天天看點

《Android和PHP開發最佳實踐 》一3.5 認識Smarty模闆引擎

如果你說學過php而沒學過smarty模闆引擎,我相信所有的面試官都會覺得你在撒謊。雖然php語言本身就可以嵌入到html頁面中去進行資料展現,但是這樣做我們不僅需要書寫大量的<?php ?>标簽,而且在某些地方還需要嵌入大量的備援代碼,另外也不利于邏輯的解耦和分離。是以,在項目中我們還是需要一個專門的模闆引擎,而smarty就是php語言在這個領域的不二選擇了。

《Android和PHP開發最佳實踐 》一3.5 認識Smarty模闆引擎

小貼士:如果你找不到站點目錄,請傳回檢視3.2.3節中apache配置虛拟主機的部分内容。

以上這個界面就是由smarty模闆引擎渲染出來的頁面,其對應的php檔案的代碼,見代碼清單3-15,已添加注釋,友善讀者閱讀。

代碼清單 3-15

常用配置選項

在使用smarty模闆引擎之前,我們必須先學習如何配置smarty的選項。而在smarty的常見選項中,我們首先必須了解4個最基本的目錄選項。

模闆目錄(template):本目錄用于存儲模闆檔案,需要渲染對應檔案時把檔案相對位址作為參數傳入display方法即可。比如,我們有一個模闆檔案位址位于template/test/index.tpl,那麼我們則應當使用“$smarty->display('test/index.tpl');”語句來渲染該模闆。

編譯模闆目錄(template_c):本目錄主要用于存儲smarty模闆引擎産生的模闆編譯檔案,smarty也正是使用這種方法來提高執行效率的。當然,我們在部署項目時一定要注意該目錄必須是可寫的。

緩存目錄(cache):smarty允許把展示過的模闆緩存起來,使用此功能将進一步提高模闆引擎的運作速度。當然,我們還可以通過設定cache_lifetime屬性來控制緩存檔案的有效時間。

配置目錄(configs):這個目錄可以用于儲存smarty模闆引擎的配置檔案,不過在實際項目中使用得比較少,我們經常會把配置放入項目統一的配置目錄。

在實際項目中我們經常使用繼承和重載的方式來定制和配置我們自己的smarty模闆類。比如,在代碼清單3-16中,我們就實作了一個自定義的my_smarty類,此類中設定了smarty模闆的必要目錄和緩存的生效時間。

代碼清單 3-16

在上述代碼中,settemplatedir方法用于設定模闆目錄,setcompiledir方法用于設定編譯過的中間模闆目錄,setconfigdir和setcachedir方法分别用于設定smarty模闆的配置檔案和緩存檔案的目錄。

常用模闆文法

smarty 3.0中的文法實際上和php的文法已經比較接近了,使用起來相當友善。接下來讓我們來熟悉一下smarty模闆語言的基本用法。首先,我們要知道所有的smarty的預設界限符号是大括号(當然這個也是可以設定的)。是以,我們可以通過類似于“{$var}”的寫法來擷取smarty變量“var”的值。其次,smarty中為我們提供了大量的字元串輔助标簽,非常友善,例如,如果需要把某個變量的首字母大寫,使用方法如代碼清單3-17所示。

代碼清單 3-17

另外,如果我們想把時間戳轉化為需要的時間格式,使用方法如代碼清單3-18所示。

代碼清單 3-18

此外,我們還可以使用代碼清單3-19中的類似方法來過濾非法字元,避免xss(跨站攻擊)的風險。

代碼清單 3-19

接下來,我們還會介紹一下在展示過程中最常用到的循環語句的寫法。實際上在smarty中有兩種最常用到的循環語句寫法,一種是“{section}”,另一種是“{foreach}”。現在假設我們需要循環一個散列數組清單“$userlist”,散列數組中包含“id”和“name”兩個字段,示例見代碼清單3-20,大家可以好好了解一下。

代碼清單 3-20

從上面的代碼中可以看出,smarty 3.0的foreach用法已經和php的文法非常類似了,既容易了解又友善實用,推薦大家使用。另外,在smarty中注釋預設使用的是“{...}”标簽,這個也需要大家了解一下。

由于篇幅限制,smarty模闆引擎的基本使用我們介紹到這裡,關于其更多的資訊請大家參考官方的文檔并動手實踐一下,畢竟smarty模闆也是使用php進行服務端開發的必不可少的一項技能。