從PHP的模板引擎看Discuz 模板機制

2021-06-05 13:25:25 字數 2358 閱讀 9630

此文**第七期,看看人家寫的東西。鑑於對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...