【摘要】隨著當(dāng)今社會網(wǎng)絡(luò)化、信息化的不斷深入,構(gòu)建動態(tài)網(wǎng)站已經(jīng)普及到整個網(wǎng)站制作領(lǐng)域。本文是介紹PHP技術(shù)下的Smarty模板引擎,在分析其特點、工作原理的基礎(chǔ)上,簡要介紹了該引擎的安裝、配置以及應(yīng)用實現(xiàn)。
【關(guān)鍵詞】Smarty,PHP,Smarty安裝配置,Smarty應(yīng)用實現(xiàn)
【中圖分類號】G434 【文獻標(biāo)識碼】B 【論文編號】1009—8097(2007)09—0080—03
一、引言
在當(dāng)今的動態(tài)網(wǎng)頁制作領(lǐng)域,無論是ASP 、JSP或是PHP,都是屬于內(nèi)嵌 Server Script 的網(wǎng)頁編程語言。因此也就有人設(shè)想,如果能把程序應(yīng)用邏輯與網(wǎng)頁呈現(xiàn)邏輯分離的話,會不會比較好呢?其實Smarty就能為我們解決這個問題。
那讓我們先來了解一下什么是Smarty?Smarty有什么樣的作用?
Smarty指的是一種PHP模板引擎,它的作用是能夠使程序邏輯與外在內(nèi)容的分離。在實際應(yīng)用中,使用Smarty目的就是要使PHP程序員同模板設(shè)計者分離,也就是說當(dāng)程序員改變程序的邏輯內(nèi)容時,不會影響到美工的頁面設(shè)計;當(dāng)美工修改頁面也不會影響到程序邏輯。這為團隊合作完成項目打下了更加堅實的基礎(chǔ),使每個人都能發(fā)揮其專長。【1】
為了更好的理解Smarty,筆者認為有必要把模板的概念重新介紹一下。看完下面這個例子,您也許會對模板有一個更好的認識。
1996年CGI在中國開始流行的時候,早期的WEB程序員都是從HTML開始自學(xué)成材 的,在PERL中print一行行的HTML也是可以實現(xiàn)的,但是隨著網(wǎng)絡(luò)的不斷發(fā)展,頁面大小暴漲了十幾倍。于是寫CGI程序就產(chǎn)生了一個迫切的要求:分開PERL和HTML源碼。由于需求的驅(qū)動,網(wǎng)頁制作領(lǐng)域取得了很大的進步,主要體現(xiàn)在開發(fā)小組內(nèi)部的分工上。在大型網(wǎng)站制作中,由于網(wǎng)頁美工和程序員對互相的工作相對分離,因此在進行合作的過程中需要用一種約定的\"語言\"進行交流。這種語言術(shù)語叫做\"模板\",程序邏輯和內(nèi)容表示依靠它聯(lián)系。它是一種結(jié)合了HTML和腳本語言特征的一種表達方式。通過這種方式,表示層可以按照用戶所希望的格式來顯示經(jīng)過邏輯層處理過的數(shù)據(jù)。通過這個例子,我們熟悉了模板的含義,進而對Smarty的理解也就沒有問題了。【2】
Smarty構(gòu)思相當(dāng)前衛(wèi),它已經(jīng)成為PHP設(shè)計的全新路線。Smarty可以用在多種操作系統(tǒng)平臺下,本文基于windows平臺進行Smarty的安裝、配置和應(yīng)用實現(xiàn)。筆者所采用的開發(fā)工具:PHP語言(php 5.0.3)、MySQL數(shù)據(jù)庫和UltraEdit等開發(fā)工具;操作系統(tǒng)采用Windows XP;Web服務(wù)器采用IIS5.1。當(dāng)然您可以使用其它版本的工具進行學(xué)習(xí)和制作。
二、Smarty的運行機制
在網(wǎng)頁制作領(lǐng)域,特別是動態(tài)網(wǎng)頁制作領(lǐng)域,對各種開發(fā)工具、組件、平臺的原理的理解以及對其特點的把握就顯得相當(dāng)重要。因此,我們必須對Smarty運行機制進行了解。
(1) Smarty的特點
Smarty的特點可以從它的優(yōu)點和缺點兩個方面來分析。
優(yōu)點是:運行速度極快;效率高;模板只需被解析一次,無需重復(fù);只需重新編譯一次修改過的模板文件;它是一種可擴展的模板語言,你可以自定義函數(shù)和自定義變量格式;任意模板源文件;自定義緩存處理函數(shù);可以在模板文件中嵌入PHP代碼。這些優(yōu)點可以使您在網(wǎng)頁制作中更加靈活、方便。
當(dāng)然,Smarty也有自己的缺點:需要實時更新的內(nèi)容,這類型的程序使用smarty會使模板處理速度變慢;美工與程序員兼于一人的小項目,使用smarty會喪失php開發(fā)迅速的優(yōu)點。【3】
(2)Smarty的運行機制如圖1所示,大家流程圖中可以清楚看出Smarty的工作過程,這里就不作詳述了。【4】

三、Smarty的安裝和配置
首先到Smarty的官方網(wǎng)站(http://smarty.php.net/download.php)下載最新的版本 。筆者以Smarty-2.6.13版本為例進行介紹。下載后,解壓縮到一個指定目錄,解壓目錄可以任意選擇,這里是D:\\web\\smarty目錄。
解壓文件目錄下有四個主要文件目錄demo\\、libs\\ 、misc\\、unit_test\\。其中l(wèi)ibs目錄是主要的庫目錄,也是我們使用最多的目錄。Libs\\目錄里的庫文件主要有:
Smarty.class.php
Smarty_Compiler.class.php
Config_File.class.php
debug.tpl
\\internals\\*.php
\\plugins\\*.php
這些PHP文件可被所有應(yīng)用程序共享,因此我們千萬不要隨意修改其中的內(nèi)容。
接下來我們來分析Smarty的基本設(shè)置。
(1)在include_path加入庫文件目錄
編輯你的php.ini文件,加入你的smarty目錄到include_path。方法是:
include_path = \".;c:\\php\\includes;c:php\\smarty\\libs\"
(2) 設(shè)置SMARTY_DIR
Smarty使用一個叫做'SMARTY_DIR'的PHP常量作為它的系統(tǒng)庫目錄.如果你的程序可以找到 Smarty.class.php文件,你不需要設(shè)置SMARTY_DIR,Smarty 將會自己運作.但是,如果 Smarty.class.php沒有在你的include_path(php.ini里的一項設(shè)置)里,或者沒有在你的應(yīng)用程序里設(shè)置它的絕對路徑的時候,就必須手動配置SMARTY_DIR 。(注意:SMARTY_DIR必須包含結(jié)尾斜杠)
手工設(shè)置SMARTY_DIR常量方法是:
define('SMARTY_DIR',' \\php\\Smarty\\');
(3)在php腳本里創(chuàng)建一個smarty的例子:
require(‘Smarty.class.php’);
$smarty = new Smarty;
?>
試著運行一下以上腳本,如果你發(fā)現(xiàn)\"未找到Smarty.class.php 文件\"的錯誤時,你應(yīng)該這樣做,加入庫文件所在目錄的絕對路徑,方法是:
require(' \\php\\Smarty\\Smarty.class.php');
$smarty = new Smarty;
?>【5】
至此,基本配置已經(jīng)完成。
四、應(yīng)用實現(xiàn)
我們通過一個“文字傳遞”的實例來講解Smarty的應(yīng)用。
本例以D:\\web\\wenzi\\為根目錄。它要求四個目錄,默認下命名為:tempalates, templates_c, configs ,cache. 每個都是可以自定義的,當(dāng)然也可以修改Smarty的類屬性: $template_dir, $compile_dir, $config_dir, 和 $cache_dir。Smarty的四個目錄只可以被那些庫文件訪問,不可以被網(wǎng)絡(luò)上的瀏覽器訪問的目錄。因此為防止不安全因素,建議將那4個目錄和網(wǎng)頁文件目錄區(qū)分開來。
(1)我們在D:\\web\\wenzi\\分別建立tempalates, templates_c, configs 和 cache四個文件夾。通常使用.tpl來標(biāo)識smarty模板,下面我們就在tempalates目錄下自編一個.tpl文件,取名為index.tpl。編輯內(nèi)容如下:
{* smarty 變量標(biāo)志符中用*包含的文字轉(zhuǎn)化為注釋內(nèi)容 *}
{include file=\"header.tpl\"}{*頁面開始*}
Welcome!My name is{$name}, We can help each oether.Thanks!
{include file=\"foot.tpl\"}{*頁面結(jié)束*}
上邊這個例子是一個tpl模板,其中:
①{**}是模板頁的注釋內(nèi)容,模板進行解析時不進行任何輸出,僅供模板設(shè)計者對模板進行注釋,這有利于閱讀和區(qū)分其中的內(nèi)容。
②{include file=\"X.tpl\"}使用此句將一個模板文件包含到當(dāng)前頁面中,例子中將在網(wǎng)站中公用事的head.tpl與foot.tpl進行了包含,你可以這樣想,使用這一句將X.tpl中的內(nèi)容全部復(fù)制在當(dāng)前語句處。當(dāng)然,你不使用這一句也可以,將X.tpl中的內(nèi)容復(fù)制到當(dāng)前語句處
也是完全可以了。
③{$name}: 模板變量,它是smarty中的核心部分,并且以PHP變量形式給出,這將在smarty程序中將使用。
(2)本例完整源程序如下:
①新建header.tpl,并進行編輯:
②新建foot.tpl,并進行編輯:
③新建index.tpl,并進行編輯:
{include file=\"header.tpl\"}{*頁面頭*}
Welcome!My name is{$name}, We can help each oether.Thanks!
{include file=\"foot.tpl\"}{*頁面尾*}
(4)新建Index.php,并進行編輯:
//文件名: Index.php
//作 用: 實現(xiàn)文字傳遞
include_once(\".\\Smarty.class.php\"); //包含smarty類文件
$smarty = new Smarty(); //建立smarty實例對象$smarty
$smarty->template_dir = \".\emplates\";//設(shè)置模板目錄
$smarty->compile_dir = \".\emplates_c\"; //設(shè)置編譯目錄
$smarty->left_delimiter = \"{\";
$smarty->right_delimiter = \"}\";
$smarty->assign(\"name\", \"張三\"); //進行模板變量替換
//編譯并顯示位于.\emplates下的index.tpl模板
$smarty->display(\"index.tpl\");
?>
④最終執(zhí)行這個程序時將顯示為:
Welcome!My name is張三, We can help each other.Thanks!
感謝您的光臨!【6】
盡管這只是一個簡單實現(xiàn),但是筆者卻希望它能夠起到拋磚引玉的功效,使大家都能夠了解它、使用它。只有這樣,Smarty才能發(fā)揮出耀眼的光芒。
五、結(jié)束語
Smarty最有意義之處在于它是PHP新體系的一部份,Smarty自官方發(fā)布以來,已經(jīng)得到了廣泛的應(yīng)用和迅速的發(fā)展,其版本不斷更新。Smarty發(fā)展飛速的原因是多方面的。就其技術(shù)本身而言,具有其它PHP模板引擎不可比擬的優(yōu)點;更實際也是最重要的是市場更需要Smarty這種速度快、 效率高、方便易用的PHP模板引擎。鑒于Smarty諸多的優(yōu)點,對它的掌握就顯得相當(dāng)重要,讓Smarty技術(shù)成為我們構(gòu)筑動態(tài)網(wǎng)站的有利臂膀!
參考文獻
[1] [2]陳俊宏.《PHP4網(wǎng)站實作深度研究篇》[M].北京:人民郵電出版社,2001
[3] 南順成,劉敏.《PHP網(wǎng)絡(luò)編程技術(shù)》[M].北京:國防工業(yè)出版社,2002
[4] 臺灣聯(lián)盟 http://www.twpug.net/modules/mylinks
[5] [6]Smarty官方網(wǎng)址 http://smarty.php.net