天天看點

CI 模闆解析器類

模闆解析器類可以解析你的視圖檔案中的僞變量。它可以解析簡單的變量或者以變量作為标簽的結構。如果你以前沒有用過模闆引擎,那麼僞變量如下所示:

<code>&lt;html&gt; &lt;head&gt; &lt;title&gt;{blog_title}&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;h3&gt;{blog_heading}&lt;/h3&gt; {blog_entries} &lt;h5&gt;{title}&lt;/h5&gt; &lt;p&gt;{body}&lt;/p&gt; {/blog_entries} &lt;/body&gt; &lt;/html&gt;</code>

這些變量不是标準的PHP變量,但是這樣的以文本形式展現可以讓你很容易地區分出它與PHP變量的不同之處。

注意:因為在視圖檔案中使用純PHP要快一些,是以CodeIgniter不 要求你一定要用這個類。然而,有一些開發者和對使用PHP有困難的設計師一同工作時,更願意使用模闆引擎。

Also Note: 模闆解析類不是一個完善的模闆解析方案。為了保持最高性能,我們的模闆解析類非常精簡。

如同CI中的其他類, 使用$this-&gt;load-&gt;library 函數在控制器中初始化模闆解析類:

<code>$this-&gt;load-&gt;library('parser');</code>

一旦加載,模闆解析類可以這樣使用: $this-&gt;parser

下面的函數在庫中可用:

這個方法接收一個模闆名和資料數組作為輸入,生成一個解析過的版本。例如:

<code>$this-&gt;load-&gt;library('parser'); $data = array(             'blog_title' =&gt; 'My Blog Title',             'blog_heading' =&gt; 'My Blog Heading'             ); $this-&gt;parser-&gt;parse('blog_template', $data);</code>

第一個參數包含視圖檔案的檔案名(在這個例子中是blog_template.php), 第二個參數包含一個用于模闆替換的相關數組。 在上面的例子中,這個模闆包含兩個變量:{blog_title} 和 {blog_heading}

不用“echo”或處理$this-&gt;parser-&gt;parse()傳回的資料。他會自動傳送資料到output類最終輸出到浏覽器。然而,如果你想傳回資料而不是發送到output類,你可以使用TRUE(布爾值)作為第三個參數。

<code>$string = $this-&gt;parser-&gt;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-&gt;load-&gt;library('parser'); $data = array(               'blog_title'   =&gt; 'My Blog Title',               'blog_heading' =&gt; 'My Blog Heading',               'blog_entries' =&gt; array(                                       array('title' =&gt; 'Title 1', 'body' =&gt; 'Body 1'),                                       array('title' =&gt; 'Title 2', 'body' =&gt; 'Body 2'),                                       array('title' =&gt; 'Title 3', 'body' =&gt; 'Body 3'),                                       array('title' =&gt; 'Title 4', 'body' =&gt; 'Body 4'),                                       array('title' =&gt; 'Title 5', 'body' =&gt; 'Body 5')                                       )             ); $this-&gt;parser-&gt;parse('blog_template', $data);</code>

如果你的“資料對”來自資料庫的查詢,那麼它已經是一個二維數組,你可以輕松的使用資料庫 result_array() 函數:

<code>$query = $this-&gt;db-&gt;query("SELECT * FROM blog"); $this-&gt;load-&gt;library('parser'); $data = array(               'blog_title'   =&gt; 'My Blog Title',               'blog_heading' =&gt; 'My Blog Heading',               'blog_entries' =&gt; $query-&gt;result_array()             ); $this-&gt;parser-&gt;parse('blog_template', $data);</code>