詳細介紹PHP模板引擎Smarty
PHP模板引擎,Smarty,它不同于其他的模板引擎,比如FastTemplate或者patTemplate,其中主要原因就是 Smarty會將模板轉(zhuǎn)化成PHP腳本,并剔除每次使用該模板時都會出現(xiàn)在解析環(huán)節(jié)里的用來控制和錯誤檢驗的附加碼。
這個功能使Smarty在大型應(yīng)用和高流量網(wǎng)站上有優(yōu)異的表現(xiàn)。 Smarty除了模板編譯還有很多其他的突出特性,我們會在后面詳細的討論。
首先,我們來揭秘模板編譯。
“模板的編譯”是什么意思?網(wǎng)頁需要做什么樣的編譯?編譯不是C++和Java也要做嗎?是的,但是這里的編譯會稍有不同。 Smarty將你的模板解析,然后轉(zhuǎn)換成PHP腳本,而不是二進制碼,像在一般的編程中做的那樣。這樣,當(dāng)你的網(wǎng)頁被瀏覽時,Smarty直接讀取PHP 腳本文件,而不是模板本身,這樣就節(jié)省了再次解析的時間。
Smarty在決定何時編譯上也很智能,他只在你對網(wǎng)頁有實際的更改的時候才會重新編譯,所以你不需要擔(dān)心手動編譯會出現(xiàn)問題。這樣做的好處就是你不需要了解任何關(guān)于PHP腳本和編碼的知識。這些都是在后天操作的,所以如果你的模板設(shè)計師甚至都不需要知道Smarty是一個“模板編譯引擎”。
Smarty也以自動緩存模板輸出而著名。
Smarty將模板的輸出內(nèi)容緩存,這樣就省下了在從數(shù)據(jù)源重新取回數(shù)據(jù)時的系統(tǒng)支出。數(shù)據(jù)源通常都是外部的,而且很慢,所以也經(jīng)常是你的應(yīng)用的瓶頸,如同遠程數(shù)據(jù)源一樣。Smarty將你模板的輸出連同從數(shù)據(jù)源取得的數(shù)據(jù)一起緩存,這樣并不是每次你的網(wǎng)頁被訪問時你就去連接數(shù)據(jù)源。如果你有一個反應(yīng)慢的數(shù)據(jù)源服務(wù)器或者對數(shù)據(jù)源有多種請求,這種緩存功能會大大提升網(wǎng)頁的性能。
當(dāng)然,有時你并不像讓模板的輸出被緩存,比如說證券報價機或者你不停的修改你的數(shù)據(jù)源并期望立刻在網(wǎng)頁上反應(yīng)出這些變化。這些都沒問題!Smarty同樣允許你定義哪些需要緩存哪些不需要。事實上你可以將緩存和沒有緩存的內(nèi)容放在一個頁面上,因為Smarty可以準(zhǔn)確的定義什么可以被緩存(比如萬年不變的導(dǎo)航欄)和什么不可以被緩存(比如網(wǎng)頁底部的證券機)。你也可以設(shè)定緩存內(nèi)容的有效期,這樣模板的內(nèi)容只會被緩存一段時間。這樣你就可以在實時更新的大量資訊和更快速的網(wǎng)站體驗中找到平衡。
有一點需要指出的是,這種緩存功能和Zend Cache或者其他的PHP加速器完全不一樣。
類似Zend Cache的緩存工具都是將PHP腳本編譯后產(chǎn)生的字節(jié)碼緩存起來,而Smarty緩存的是你的模板的輸出(其實就是一種PHP腳本)。因此,Smarty可以與Zend Cache并肩作戰(zhàn)。通過基準(zhǔn)測試已經(jīng)發(fā)現(xiàn)這是一種完美的解決方案。
正如引擎創(chuàng)作者所說:當(dāng)和PHP加速器一起使用時,Smarty的表現(xiàn)確實有所提升。 Smarty也提供變量修改功能。你可以把字符串大寫、切割、查找和替換。變量修改器簡化了編程的過程,繞開了程序員經(jīng)常使用的專業(yè)語法。這樣模板設(shè)計者就會對模板變量的格式有更好的控制,雖然他首先得知道哪些變量修改器是可用的。這是個很有用的功能,因為句法變得簡潔,而且不是程序員的人也可以使用它。
Smarty也在你的模板中提供了很多內(nèi)置的和習(xí)慣使用的函數(shù)。
這些函數(shù)就像模板的應(yīng)用編程接口,除了習(xí)慣使用函數(shù)可以被修改而內(nèi)置函數(shù)不能。這些函數(shù)可以讓4F60實現(xiàn)條件輸出(使用if語句),動態(tài)循環(huán)迭代(使用 foreach或section語句),讀取config文件等等功能。
過濾器 Smarty可以將過濾器分類,讓你可以在模板被編譯之前或者之后運行過濾器。預(yù)過濾器在你的模板運行前使用,后置過濾器在模板被編譯后使用,輸出過濾器會過濾模板的輸出結(jié)果。為什么使用過濾器?你可能會問。預(yù)過濾器可以去掉你不想要的內(nèi)容,確保你不想要的內(nèi)容不會被編譯。后置過濾器可以再模板被編譯后加入附加的信息,比如創(chuàng)建時間。輸出過濾器可以讓你修改模板的輸出,比如隱藏掉所有的電郵地址以垃圾郵件的騷擾。
Config 文件 Config文件是可以儲存模板的全局變量的配置文件。這樣你就能把一些影響到所有模板的全局變量集中儲存在一個地方。一個典型的例子就是所有模板的配色方案。如果配色方案需要修改,模板設(shè)計者只需要改變配置文件中的值。這樣他們就不必一個一個的修改每一個模板。
插件 Smarty插件架構(gòu)自2.0版本就出現(xiàn)了,它能讓Smarty更加用戶化。前面討論的預(yù)過濾器、后置過濾器等都是可用的插件類型而已。其他的插件類型包括修改器、控制模塊、編譯器等。使用插件,你可以制作自己的模板函數(shù),變量修改器和過濾器。你還可以使用資源插件改變Smarty的讀取數(shù)據(jù)格式(默認是展平文件)。
通過資源插件,你可以將你的模板保存在數(shù)據(jù)庫里,通過一定的接口取回數(shù)據(jù)。結(jié)束語將Smarty的模板編譯功能和PHP固有的效率結(jié)合在一起,你就擁有了絕對的速度優(yōu)勢。使用設(shè)計優(yōu)良的插件構(gòu)架,Smarty還有擴展的函數(shù)功能,包括模板功能和變量修改器。速度和函數(shù)性的提高并沒有影響Smarty的親和度,事實上,Smarty非常容易上手。Smarty同時也配備了在線共享文檔。你可以從Smarty Website上下載。
Smarty的作者之一,Andrei Zmievski,也是PHP發(fā)展小組的成員,他會盡量保證Smarty緊跟PHP的發(fā)展。所以你大可放心:PHP的任何改版都會被Smarty支持的。
希望通過以上內(nèi)容的介紹,能夠給你帶來幫助。
【編輯推薦】


2011-07-07 13:48:35
2011-07-07 14:14:41
2011-07-07 16:24:09
2009-12-01 19:28:16
2011-07-12 17:42:46
2011-07-05 17:29:56




