最近在開發的時候,遇到了在有html模板的情況下,每天生成資料包表的需求,如果用框架太重了,就想自己簡單的模板來實現,這樣簡單實用,順便記錄下原理。
一. 模板引擎原理
php是網頁內嵌型的語言,利用〈?php
?〉標籤嵌入到html文字中,然後由php的直譯器去執行,動態生成頁面。 但是對於大型的web應用,一般分為前端, 後台業務邏輯,及資料層。為了專案協作和分工,當然需要將前端和業務邏輯分離,前端專注於介面展示,後端程式負責邏輯處理。 這樣使得改變程式的邏輯內容不會影響到前端人員的頁面設計,前端人員重新修改頁面不會影響到程式的程式邏輯,這在多人合作的專案中顯的尤為重要。
分離之後的兩部分怎麼實現連線呢? 邏輯層的資料如何傳遞給模板頁面呢? 模板頁面的動態資料項採用什麼規則預先展示呢?
這是就需要這樣乙個「橋梁」來解決這個問題,即 模板引擎。
一般來說需要兩個類來實現,分別是模板引擎入口類和模板解析類。 mytpl.class.php檔案通常定義乙個類mytpl,類中需定義乙個陣列tpl_var用於存放tpl.html中自定義內容標籤的引數。mytpl.compile.class.php,解析模板檔案,的是將tpl.hml中無法識別的的內容標籤轉換成php語句,編譯成「templates_c」資料夾下的tpl_c.html中。
所以一般的模板引用步驟為:
include 「mytpl.class.php檔案」;//整個流程如圖所示:載入模板引擎
$tpl = new mytpl();//
例項化乙個模板類
$title =「標題」;
$content =「內容」;
$tpl->assign(「title」,$title);//
呼叫模板類中的方法,分配變數
$tpl->assign(「content」,$content
);$tpl->display(「tpl.html」);//
呼叫模板類中的方法,用於顯示編譯後的內容
二. 模板引擎簡單實現
以下實現了乙個最簡單的模板引擎,不含模板解析類:
tpl.html:<
html
>
<
body
>
php echo $str
?>
<
br />
php print_r($arr)
?>
body
>
html
>
mytpl.php:其中使用到了extract函式,從陣列中將變數匯入到當前的符號表,鍵做變數,值做值!<?php
//include 包含其他檔案
//extract 的作用:從陣列中將變數匯入到當前的符號表,鍵做變數,值做值!
class
mytpl }}
else}}
public
function display($tpl
)else
}}$tpl = new
mytpl;
$arr = array('a'=>'aaaaaaa','b'=>array('a'=>'111111','b'=>'22222','c'=>'3333'),'c'=>'ccccccc','d'=>'dddddd','e'=>'eeeee');
$str = '我是字串';
$tpl->assign('arr',$arr
);$tpl->assign('str',$str
);$message = $tpl->display('tpl.html');
echo
$message
;?>
同時匯入模板使用了include 函式,從include該處開始,呼叫檔案在該行處可用的任何變數在被呼叫的檔案中也都可用。不過所有在包含檔案中定義的函式和類都具有全域性作用域。當乙個檔案被包含時,語法解析器在目標檔案的開頭脫離 php 模式並進入 html 模式,到檔案結尾處恢復。由於此原因,目標檔案中需要作為 php **執行的任何**都必須被包括在有效的 php 起始和結束標記之中。(所以需要模板解析類編譯模板)。同時將inlcude的檔案「包含」到乙個變數中的方法是用輸出控制函式結合 include 來捕獲其輸出。
如果template檔案沒有改動,那麼該模板檔案就不需要被重新編譯,所以可以在模板引擎中新增快取機制,提公升訪問速度。
smarty是乙個使用php寫出來的模板引擎,是目前業界最著名的php模板引擎之一,定義了smarty的語法規則和快取等特性,效能和使用性都非常好。
同時可以參考這個smart的簡單實現
PHP模板原理
原始出處 作者資訊和本宣告。否則將追究法律責任。開發乙個 web專案,通常分為兩部分,一部分是 gui,即介面 美工,使用 html,css,js 編寫,另一部分則是業務邏輯,即程式 功能,使用 php編寫。而模板引擎則是聯絡這兩部分的 橋梁 可理解成乙個 php類,裡面定義了許多方法,實現了將 p...
php模板引擎原理
訪問php檔案,php檔案會去載入模板引擎,通過模板引擎去載入模板然後替換模板裡面的變數 然後生成乙個編譯檔案 最後將該編譯檔案匯入 訪問的php檔案中輸出 第二次訪問的時候 如果 快取檔案存在或者沒有被改動則直接 匯入快取檔案 輸出 否則重新編譯 自定義的乙個模板引擎 mytpl.class.ph...
PHP 關於模板的原理和解析
將php 和靜態html 進行分離,使 的可讀性和維護性得到顯著提高。使用模板引擎 我們所說的模板是web模板,是主要由html標記組成的語言來編寫的頁面,但也有如何表示包含動態生成內容的方式 解析標籤 模板引擎是一種軟體庫,允許我們從模板生成html 並指定要包含的動態內容。模板引擎的特點 1.鼓...