【其他】快速掌握Smarty模版技術
Smarty 模版語句解釋
1、/**/語句
包含的部分為程式篇頭註釋。主要的內容應該為對程式的作用,版權與作者及編寫時間做一個簡單的介紹,這在smarty中不是必需的,但從程式的風格來講,這是一個好的風格。
2、include_once語句
它將安裝到網站的smarty檔案包含到當前檔案中,注意包含的路徑一定要寫正確。
3、$smarty = new Smarty()
這一句新建一個Smarty物件$smarty,簡單的一個物件的例項化。
4、$smarty->templates("")
這一句指明$smarty物件使用tpl模板時的路徑,它是一個目錄,在沒有這一句時,Smarty預設的模板路徑為當前目錄的templates目錄,實際在寫程式時,我們要將這一句寫明,這也是一種好的程式風格。
5、$smarty->templates_c("")
這一句指明$smarty物件進行編譯時的目錄。在模板設計篇我們已經知道Smarty是一種編譯型模板語言,而這個目錄,就是它編譯模板的目錄,要注意,如果站點位於linux伺服器上,請確保teamplates_c裡定義的這個目錄具有可寫可讀許可權,預設情況下它的編譯目錄是當前目錄下的templates_c,出於同樣的理由我們將其明確的寫出來。
6、$smarty->left_delimiter與$smarty->right_delimiter
指明在查詢模板變數時的左右分割符。預設情況下為"{"與"}",但在實際中因為我們要在模板中使用<script>,Script中的函式定義難免會使用{},雖然它有自己的解決辦法,但習慣上我們將它重新定義為"{#"與"#}"或是"<!--{"與"}-->"或其它標誌符,注意,如果在這裡定義了左右分割符後,在模板檔案中相應的要使每一個變數使用與定義相同的符號,例如在這裡指定為"<{"與"}>",htm模板中也要相應的將{$name}變成<{$name}>,這樣程式才可以正確的找到模板變數。
7、$smarty->cache("./cache")
告訴Smarty輸出的模板檔案快取的位置。上一篇我們知道Smarty最大的優點在於它可以快取,這裡就是設定快取的目錄。預設情況下為當前目錄下的cache目錄,與templates_c目錄相當,在linux系統中我們要確保它的可讀可寫性。
8、$smarty->cache_lifetime = 60 * 60 * 24
這裡將以秒為單位進行計算快取有效的時間。第一次快取時間到期時當Smarty的caching變數設定為true時快取將被重建。當它的取值為-1時表示建立起的快取從不過期,為0時表示在程式每次執行時快取總是被重新建立。上面的設定表示將cache_lifetime設定為一天。
9、$smarty->caching = 1
這個屬性告訴Smarty是否要進行快取以及快取的方式。它可以取3個值,0、Smarty預設值,表示不對模板進行快取;1、表示Smarty將使用當前定義的cache_lifetime來決定是否結束cache;、2、表示Smarty將使用在cache被建立時使用cache_lifetime這個值。習慣上使用true與false來表示是否進行快取。
10、$smarty->assign("name", "zaocha")
該數的原型為assign(string varname, mixed var),varname為模板中使用的模板變數,var指出要將模板變數替換的變數名;其第二種原形為assign(mixed var),我們要在後面的例子詳細的講解這個成員函式的使用方法,assign是Smarty的核心函式之一,所有對模板變數的替換都要使用它。
11、$smarty->display("index.tpl")
該函式原形為display(string varname),作用為顯示一個模板。簡單的講,它將分析處理過的模板顯示出來,這裡的模板檔案不用加路徑,只要使用一個檔名就可以了,它路徑我們已經在$smarty->templates(string path)中定義過了。
程式執行完後我們可以開啟當前目錄下的templates_c與cache目錄,就會發現在下邊多出一些%%的目錄,這些目錄就是Smarty的編譯與快取目錄,它由程式自動生成,不要直接對這些生成的檔案進行修改。
以上我簡單的把Smarty程式中的一些常用的基本元素介紹了一下,在後邊的例子中你可以看到將它們將被多次的使用。
2.模版自帶的流程控制語句
2.1、if 條件語句{if條件1} 語句1 {elseif 條件2} 語句2 {else} 語句3 {/if}2.2、foreach、用於迴圈簡單陣列,它是一個選擇性的section迴圈,它的定義格式為
其中,from指出要迴圈的陣列變數,item為要迴圈的變數名稱,迴圈次數由from所指定的陣列變數的個數所決定。{foreachelse}用來當程式中傳遞過來的陣列為空時的處理。
下面是一個簡單的例子、2.3、section的產生是為解決foreach的不足的,與foreach一樣,它用於設計模板內的迴圈塊,它較為複雜,可極大程式上滿足程式需要,所以在程式中我習慣使用它而不使用foreach,基本原形為
{section name = name loop = $varName[, start = $start, step = $step, max = $max, show = true]} ----------------引數解釋如下、-------------------
name、 section的名稱,不用加$
$loop、 要迴圈的變數,在程式中要使用assign對這個變數進行操作。
$start、 開始迴圈的下標,迴圈下標預設由0開始
$step、 每次迴圈時下標的增數
$max、 最大迴圈下標
$show、 boolean型別,決定是否對這個塊進行顯示,預設為true這裡有個名詞需要說明、
迴圈下標、實際它的英文名稱為index,是索引的意思,這裡我將它譯成"下標",主要是為了好理解。它表示在顯示這個迴圈塊時當前的迴圈索引,預設從0開始,受$start的影響,如果將$start設為5,它也將從5開始計數,在模板設計部分我們使用過它,這是當前{section}的一個屬性,呼叫方式為Smarty.section.sectionName.index,這裡的sectionName指的是函式原型中的name屬性。
{section}塊具有的屬性值,分別為、
1. index、 上邊我們介紹的"迴圈下標",預設為0
2. index_prev、 當前下標的前一個值,預設為-1
3. index_next、 當前下標的下一個值,預設為1
4. first、 是否為第一下迴圈
5. last、 是否為最後一個迴圈
6. iteration、 迴圈次數
7. rownum、 當前的行號,iteration的另一個別名
8. loop、 最後一個迴圈號,可用在section塊後統計section的迴圈次數
9. total、 迴圈次數,可用在section塊後統計迴圈次數
10. show、 在函式的宣告中有它,用於判斷section是否顯示
它們的具體屬性大家可以參考手冊,在程式中可靈活使用它的這些屬性,模板部分我就使用過index屬性,大家可以回過頭去看看。
同樣,{section}也可以配合使用{sectionelse},用來表示傳入的陣列變數為空時對模板進行的處理。
--------------------------------------------------------- 示例、
這裡的{section}塊的對於變數的命名方式感覺有些彆扭,不過沒關係,你只要記住模板變數使用、
$loopName[name].var這種模式就行了,loopName為loop處賦予的變數名,[name]為name處賦予的字串,.後為為你要在程式陣列中設定要與值相對應的下標名稱就行了。
好了,本文關於smarty程式設計學習指南就寫到這裡,對於一般的應用,這些知識已經夠用了,其它的一些高階技巧大家請參看手冊中的例子,此外相關的還有Smarty在實際應用中的例子,以php內建的mysql語句,phplib中的DB類,ADODB,Pear中DB類等等。感興趣的朋友可以關注一下相關內容。
希望本文所述對大家的PHP程式設計有所幫助。