模板解析器類
模板解析器類可以解析你的視圖文件中的偽變量。它可以解析簡單的變量或者以變量作為標(biāo)簽的結(jié)構(gòu)。如果你以前沒有用過模板引擎,那么偽變量如下所示:
<html>
<head>
<title>{blog_title}</title>
</head>
<body>
<h3>{blog_heading}</h3>
{blog_entries}
<h5>{title}</h5>
<p>{body}</p>
{/blog_entries}
</body>
</html>
這些變量不是標(biāo)準(zhǔn)的PHP變量,但是這樣的以文本形式展現(xiàn)可以讓你很容易地區(qū)分出它與PHP變量的不同之處。
注意:因?yàn)樵谝晥D文件中使用純PHP要快一些,所以CodeIgniter不 要求你一定要用這個(gè)類。然而,有一些開發(fā)者和對(duì)使用PHP有困難的設(shè)計(jì)師一同工作時(shí),更愿意使用模板引擎。
Also Note: 模板解析類不是一個(gè)完善的模板解析方案。為了保持最高性能,我們的模板解析類非常精簡。
類的初始化
如同CI中的其他類, 使用$this->load->library 函數(shù)在控制器中初始化模板解析類:
$this->load->library('parser');
一旦加載,模板解析類可以這樣使用: $this->parser
下面的函數(shù)在庫中可用:
$this->parser->parse()
這個(gè)方法接收一個(gè)模板名和數(shù)據(jù)數(shù)組作為輸入,生成一個(gè)解析過的版本。例如:
$this->load->library('parser');
$data = array(
????????????'blog_title' => 'My Blog Title',
????????????'blog_heading' => 'My Blog Heading'
????????????);
$this->parser->parse('blog_template', $data);
第一個(gè)參數(shù)包含視圖文件的文件名(在這個(gè)例子中是blog_template.php), 第二個(gè)參數(shù)包含一個(gè)用于模板替換的相關(guān)數(shù)組。 在上面的例子中,這個(gè)模板包含兩個(gè)變量:{blog_title} 和 {blog_heading}
不用“echo”或處理$this->parser->parse()返回的數(shù)據(jù)。他會(huì)自動(dòng)傳送數(shù)據(jù)到output類最終輸出到瀏覽器。然而,如果你想返回?cái)?shù)據(jù)而不是發(fā)送到output類,你可以使用TRUE(布爾值)作為第三個(gè)參數(shù)。
$string = $this->parser->parse('blog_template', $data, TRUE);
$this->parser->parse_string()
This method works exactly like parse(), only accepts a string as the first parameter in place of a view file.
變量對(duì)
上面的示例代碼中演示簡單變量的替換。如果你想要替換整個(gè)塊的變量,這個(gè)塊的每行都包含新值?想象一下在頁面最頂端我們展示的例子:
<html>
<head>
<title>{blog_title}</title>
</head>
<body>
<h3>{blog_heading}</h3>
{blog_entries}
<h5>{title}</h5>
<p>{body}</p>
{/blog_entries}
</body>
</html>
在上面的代碼中你會(huì)注意到一對(duì)變量: {blog_entries} 數(shù)據(jù)…… {/blog_entries}。 像這樣,在這對(duì)變量中間的數(shù)據(jù)將會(huì)被多次替換,替換的次數(shù)取決于結(jié)果集的行數(shù)。
除了要根據(jù)你的數(shù)據(jù)提供一個(gè)多維數(shù)組以外,變量對(duì)的解析代碼和單個(gè)變量的解析代碼相同。參考下面的例子:
$this->load->library('parser');
$data = array(
??????????????'blog_title'?? => 'My Blog Title',
??????????????'blog_heading' => 'My Blog Heading',
??????????????'blog_entries' => array(
??????????????????????????????????????array('title' => 'Title 1', 'body' => 'Body 1'),
??????????????????????????????????????array('title' => 'Title 2', 'body' => 'Body 2'),
??????????????????????????????????????array('title' => 'Title 3', 'body' => 'Body 3'),
??????????????????????????????????????array('title' => 'Title 4', 'body' => 'Body 4'),
??????????????????????????????????????array('title' => 'Title 5', 'body' => 'Body 5')
??????????????????????????????????????)
????????????);
$this->parser->parse('blog_template', $data);
如果你的“數(shù)據(jù)對(duì)”來自數(shù)據(jù)庫的查詢,那么它已經(jīng)是一個(gè)二維數(shù)組,你可以輕松的使用數(shù)據(jù)庫 result_array() 函數(shù):
$query = $this->db->query("SELECT * FROM blog");
$this->load->library('parser');
$data = array(
??????????????'blog_title'?? => 'My Blog Title',
??????????????'blog_heading' => 'My Blog Heading',
??????????????'blog_entries' => $query->result_array()
????????????);
$this->parser->parse('blog_template', $data);
?