模闆解析器類可以解析你的視圖檔案中的僞變量。它可以解析簡單的變量或者以變量作為标簽的結構。如果你以前沒有用過模闆引擎,那麼僞變量如下所示:
<code><html> <head> <title>{blog_title}</title> </head> <body> <h3>{blog_heading}</h3> {blog_entries} <h5>{title}</h5> <p>{body}</p> {/blog_entries} </body> </html></code>
這些變量不是标準的PHP變量,但是這樣的以文本形式展現可以讓你很容易地區分出它與PHP變量的不同之處。
注意:因為在視圖檔案中使用純PHP要快一些,是以CodeIgniter不 要求你一定要用這個類。然而,有一些開發者和對使用PHP有困難的設計師一同工作時,更願意使用模闆引擎。
Also Note: 模闆解析類不是一個完善的模闆解析方案。為了保持最高性能,我們的模闆解析類非常精簡。
如同CI中的其他類, 使用$this->load->library 函數在控制器中初始化模闆解析類:
<code>$this->load->library('parser');</code>
一旦加載,模闆解析類可以這樣使用: $this->parser
下面的函數在庫中可用:
這個方法接收一個模闆名和資料數組作為輸入,生成一個解析過的版本。例如:
<code>$this->load->library('parser'); $data = array( 'blog_title' => 'My Blog Title', 'blog_heading' => 'My Blog Heading' ); $this->parser->parse('blog_template', $data);</code>
第一個參數包含視圖檔案的檔案名(在這個例子中是blog_template.php), 第二個參數包含一個用于模闆替換的相關數組。 在上面的例子中,這個模闆包含兩個變量:{blog_title} 和 {blog_heading}
不用“echo”或處理$this->parser->parse()傳回的資料。他會自動傳送資料到output類最終輸出到浏覽器。然而,如果你想傳回資料而不是發送到output類,你可以使用TRUE(布爾值)作為第三個參數。
<code>$string = $this->parser->parse('blog_template', $data, TRUE);</code>
This method works exactly like parse(), only accepts a string as the first parameter in place of a view file.
上面的示例代碼中示範簡單變量的替換。如果你想要替換整個塊的變量,這個塊的每行都包含新值?想象一下在頁面最頂端我們展示的例子:
在上面的代碼中你會注意到一對變量: {blog_entries} 資料…… {/blog_entries}。 像這樣,在這對變量中間的資料将會被多次替換,替換的次數取決于結果集的行數。
除了要根據你的資料提供一個多元數組以外,變量對的解析代碼和單個變量的解析代碼相同。參考下面的例子:
<code>$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);</code>
如果你的“資料對”來自資料庫的查詢,那麼它已經是一個二維數組,你可以輕松的使用資料庫 result_array() 函數:
<code>$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);</code>