?
This document uses PHP Chinese website manual Release
模板解析器類可以對視圖文件中包含的偽變量執(zhí)行簡單的文本替換。它可以解析簡單變量或變量標簽對。
如果您從未使用過模板引擎,則偽變量名稱將被括在大括號中,如下所示:
<html> <head> <title>{blog_title}</title> </head> <body> <h3>{blog_heading}</h3> {blog_entries} <h5>{title}</h5> <p>{body}</p> {/blog_entries} </body> </html>
這些變量不是實際的PHP變量,而是純文本表示,允許您從模板中刪除PHP(視圖文件)。
注意
CodeIgniter也不會要求你使用這個類,因為用純PHP在您的視圖頁面讓他們跑快一點。但是,有些開發(fā)人員喜歡使用模板引擎,如果他們與設計人員一起工作,他們會覺得使用PHP會遇到一些困惑。
重要
模板解析器類不是完整的模板解析解決方案。為了保持最佳性能,我們一直非常精益求精。
使用模板解析器類
初始化類
解析模板
變量對
使用說明
查看片段
類參考
像CodeIgniter中的大多數(shù)其他類一樣,解析器類在您的控制器中使用以下$this->load->library()
方法進行初始化:
$this->load->library('parser');
一旦加載,解析器庫對象將可用:$ this-> parser
您可以使用該parse()
方法來解析(或呈現(xiàn))簡單模板,如下所示:
$data = array( 'blog_title' => 'My Blog Title', 'blog_heading' => 'My Blog Heading');$this->parser->parse('blog_template', $data);
第一個參數(shù)包含視圖文件的名稱(在本例中該文件將被稱為blog_template.php),第二個參數(shù)包含要在模板中替換的數(shù)據(jù)的關聯(lián)數(shù)組。在上例中,模板將包含兩個變量:{blog_title}和{blog_heading}
沒有必要對$ this-> parser-> parse()返回的數(shù)據(jù)進行“回顯”或做些什么。它會自動傳遞給輸出類以發(fā)送到瀏覽器。但是,如果您希望返回數(shù)據(jù)而不是發(fā)送到輸出類,則可以傳遞TRUE(布爾值)作為第三個參數(shù):
$string = $this->parser->parse('blog_template', $data, TRUE);
上面的示例代碼允許替換簡單的變量。如果你想要重復一整塊變量,每次迭代包含新值,該怎么辦?考慮我們在頁面頂部顯示的模板示例:
<html> <head> <title>{blog_title}</title> </head> <body> <h3>{blog_heading}</h3> {blog_entries} <h5>{title}</h5> <p>{body}</p> {/blog_entries} </body></html>
在上面的代碼中,您會注意到一對變量:{blog_entries}數(shù)據(jù)... {/ blog_entries}。在這種情況下,這些對之間的整個數(shù)據(jù)塊將重復多次,與參數(shù)數(shù)組的“blog_entries”元素中的行數(shù)相對應。
解析變量對使用上面顯示的相同代碼來解析單個變量,除了您將添加與變量對數(shù)據(jù)相對應的多維數(shù)組。考慮這個例子:
$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ù)來自已經(jīng)是多維數(shù)組的數(shù)據(jù)庫結果,那么您可以簡單地使用數(shù)據(jù)庫result_array()
方法:
$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);
如果包含模板中未引用的替代參數(shù),則會忽略它們:
$template = 'Hello, {firstname} {lastname}'; $data = array( 'title' => 'Mr', 'firstname' => 'John', 'lastname' => 'Doe'); $this->parser->parse_string($template, $data);// Result: Hello, John Doe
如果不包含在模板中引用的替換參數(shù),則原始偽變量將顯示在結果中:
$template = 'Hello, {firstname} {initials} {lastname}'; $data = array( 'title' => 'Mr', 'firstname' => 'John', 'lastname' => 'Doe'); $this->parser->parse_string($template, $data);// Result: Hello, John {initials} Doe
如果您希望在數(shù)組期望時提供字符串替換參數(shù),例如,對于變量對,則替換操作將針對打開的變量對標記完成,但閉合變量對標記不能正確呈現(xiàn):
$template = 'Hello, {firstname} {lastname} ({degrees}{degree} {/degrees})'; $data = array( 'degrees' => 'Mr', 'firstname' => 'John', 'lastname' => 'Doe', 'titles' => array( array('degree' => 'BSc'), array('degree' => 'PhD') ));$this->parser->parse_string($template, $data);// Result: Hello, John Doe (Mr{degree} {/degrees})
如果您將您的一個替代參數(shù)命名為與變量對內使用的替代參數(shù)相同,則結果可能與預期不符:
$template = 'Hello, {firstname} {lastname} ({degrees}{degree} {/degrees})'; $data = array( 'degree' => 'Mr', 'firstname' => 'John', 'lastname' => 'Doe', 'degrees' => array( array('degree' => 'BSc'), array('degree' => 'PhD') ));$this->parser->parse_string($template, $data);// Result: Hello, John Doe (Mr Mr )
您不必使用變量對來獲得視圖中迭代的效果。可以在變量對內使用視圖片段,并在控制器中而不是在視圖中控制迭代。
在視圖中控制迭代的示例:
$template = '<ul>{menuitems} <li><a href="{link}">{title}</a></li>{/menuitems}</ul>';$data = array( 'menuitems' => array( array('title' => 'First Link', 'link' => '/first'), array('title' => 'Second Link', 'link' => '/second'), ));$this->parser->parse_string($template, $data);
結果:
<ul> <li><a href="/first">First Link</a></li> <li><a href="/second">Second Link</a></li></ul>
在控制器中使用視圖片段控制迭代的示例:
$temp = '';$template1 = '<li><a href="{link}">{title}</a></li>';$data1 = array( array('title' => 'First Link', 'link' => '/first'), array('title' => 'Second Link', 'link' => '/second'),);foreach ($data1 as $menuitem){ $temp .= $this->parser->parse_string($template1, $menuitem, TRUE);}$template = '<ul>{menuitems}</ul>';$data = array( 'menuitems' => $temp);$this->parser->parse_string($template, $data);
結果:
<ul> <li><a href="/first">First Link</a></li> <li><a href="/second">Second Link</a></li></ul>
class CI_Parserparse($template, $data[, $return = FALSE])
參數(shù): | $ template(string) - 查看文件的路徑$ data(array) - 變量數(shù)據(jù)$ return(bool) - 是否僅返回解析的模板 |
---|---|
返回: | 解析模板字符串 |
返回類型: | 串 |
$ template(string) - 查看文件的路徑
$ data(數(shù)組) - 變量數(shù)據(jù)
$ return(bool) - 是否只返回解析的模板
返回:解析模板字符串
Return type: string
從提供的路徑和變量中解析模板。
parse_string($template, $data[, $return = FALSE])
參數(shù): | $ template(string) - 查看文件的路徑$ data(array) - 變量數(shù)據(jù)$ return(bool) - 是否僅返回解析的模板 |
---|---|
返回: | 解析模板字符串 |
返回類型: | 串 |
$ template(string) - 查看文件的路徑
$ data(數(shù)組) - 變量數(shù)據(jù)
$ return(bool) - 是否只返回解析的模板
Returns: Parsed template string
Return type: string
該方法與`parse()`完全相同,只是它接受模板作為字符串而不是加載視圖文件。
set_delimiters([$l = '{'[, $r = '}']])
參數(shù): | $ l(字符串) - 左分隔符$ r(字符串) - 右分隔符 |
---|---|
返回類型: | 空虛 |
$ l(字符串) - 左分隔符
$ r(字符串) - 右分隔符
Return type: void
Sets the delimiters (opening and closing) for a pseudo-variable “tag” in a template.