此文**第七期,看看人家寫的東西。鑑於對php的熟悉度及以後的維護,最近想把那個asp的分類資訊網改一下,前台基本改版 完畢,使用了fleaphp提供的架構(對比了thinkphp與fleaphp最終還是選擇了後者),其中的檢視使用了smarty模板,平台環境使用 了apmserv,開發環境使用了zend development environment,後台正在進行中,計畫月底前完成。
一、關於模板引擎的前言
從phplib到smarty,再到discuz!的模板機制,本文試圖通過php模板引擎為你講解作者自己的php心得。
我清楚的記得在我剛上大學開始學習php的時候,曾經在phpe.net看到過一篇關於phplib template和fasttemplate這兩模板引擎效能比較的文章。讓我在接下來半年的時間內持續的使用著phplib。不可否認phplib是左 右了一代php開發人員對於php模板引擎的認識。或許你也會對下面的方法比較熟悉
$t->set_file
$t->set_var
當我對於phplib的執行效率不滿意的時候,我開始尋找下乙個php的模板引擎,於是smarty跳入我的視野範圍,當我費盡心血去學會了smarty 並使用開發了很多東西,而現在的我突然發現記得的也就只有下面的方法了
$s->assign
$s->display
究竟我們需要模板引擎來做什麼呢,mvc?簡單?易用?效率?請看下文的分析。
二、程式處理的分析
1.phplib的程式處理過程
$t = new template()
$t->set_file
$t->set_var
$t->parse
$t->p
看上面的**,翻譯成中文就是
初始化模板類$t
設定模板檔案
設定模板變數
分析模板檔案中的模板變數
輸出內容
通過了最少5個步驟在php程式中實現模板的處理
2.smarty的程式處理過程
$s = new smarty
$s->assign
$s->display
翻譯成中文就是
初始化模板類$s
設定模板變數
解析並輸出模板
3.discuz!模板的程式處理過程
include template(tplname);
主要作用就是指定給程式需要處理的模板檔案
在上述三種模板處理機制中,最容易理解和接受就是discuz!模板的處理過程。初始化、設定變數、解析模板、輸出內容,discuz!只用了乙個函式來 做。對於乙個開源的論壇軟體,這樣處理的好處是顯而易見的,對於discuz!進行二次開發的程式設計師的要求降低。簡化模板語言,方便風格和外掛程式的製作,這 也在一定程度上促進了discuz!的傳播
三、模板原始檔的語法
在phplib中處理迴圈巢狀的時候,使用:
在smarty中處理迴圈巢狀的時候,引入了
<>(當然還有foreach這樣的)
在discuz!中處理迴圈巢狀的時候,
其實真正的模板面對的可以說是不懂php或者懂一點php的美工同志們,模板的複雜就意味著美工製作頁面的難度加大。在必不可少的需要模板有邏輯處理的時 候,為什麼不在html**中使用原生態的php語法,而讓美工相當於去學習另外一種語言呢?在我個人的經驗中,顯然是discuz!的模板語言更為簡單 易學,也為我節省了更多的時間。
四、discuz!模板處理機制
我剝離出乙個簡單的discuz!模板處理函式
function template($file, $templateid = 0, $tpldir = '')
//返回快取檔名稱
//$objfile變數內容可能為d:\discuz\forumdata\templates\1_demo.tpl.php
return $objfile;
}而php頁面的模板執行語句
include template('demo');
實際上在本例中就是相當於
include 'd:\discuz\forumdata\templates\1_demo.tpl.php';
這個流程就是乙個demo.php檔案中當資料處理完成以後include template('demo'),去顯示頁面。
五、總結
我也曾經看到過有列舉出很多種的php模板引擎,但是我覺著phplib、smarty、discuz!模板機制就足以說明問題了。
1.我們需要模板來做什麼?
分離程式與介面,為程式開發以及後期維護提供方便。
2.我們還在關心什麼?
php模板引擎的效率,易用性,可維護性。
3.最後的要求什麼?
簡單就是美!
文章好像沒有寫完,其實已經寫完了,我要說明的就是從php的模板引擎看discuz!模板機制
PHP原生模板引擎 最簡單的模板引擎
複製 如下 php a array a b c require template demo.php 引用模板 程式設計客棧 模板檔案 複製代gkugmrgq碼 如下 程式設計客棧ype html 模板測試 a 程式設計客棧1 複製 如下 陣列的迭代 smarty 鍵值 對於php程式設計師那個更好理...
php模板引擎原理
訪問php檔案,php檔案會去載入模板引擎,通過模板引擎去載入模板然後替換模板裡面的變數 然後生成乙個編譯檔案 最後將該編譯檔案匯入 訪問的php檔案中輸出 第二次訪問的時候 如果 快取檔案存在或者沒有被改動則直接 匯入快取檔案 輸出 否則重新編譯 自定義的乙個模板引擎 mytpl.class.ph...
從Django看CakePHP模板技術的弊端
cakephp的模板技術基本上沿用了rails的方式,也使用了layout技術 鏈結 子模板的內容會替換layout中的 content for layout變數。這樣的方式很簡單,但它也有很多弊端,比如說title的渲染是由layout中的 title for layout變數負責的,通常cake...