Smarty模闆引擎特點
1)速度:相對于其他的模闆引擎而言,Smarty具有更快的響應速度
2)編譯型:當我們第一次通路模闆檔案時,系統會自動對其進行編譯,當第二次通路時,系統首先判斷模闆是否發生改變,如未改變,則直接調用編譯檔案。
3)緩存技術:當我們第一次通路模闆檔案時,如果開啟了緩存機制,系統會自動生成緩存檔案,當第二次通路時,如果模闆檔案沒有改變且緩存檔案沒有過期則直接調用緩存檔案以
擷取更快的響應速度。
編譯技術<緩存技術<靜态化技術
4)插件技術:友善後期擴充
5)語句自由:if/elseif/else/endif
實時更新的項目和太小項目不适合采用Smarty。
Smarty調用的五步
1)載入Smarty入口檔案
2)執行個體化Smarty對象
3)更改對象的預設屬性或行為(更換路徑,開啟緩存)
4)通過assign方法配置設定變量到模闆檔案
5)通過display方法顯示輸出模闆内容
Smarty模闆引擎如何監管模闆檔案
Smarty是通過記錄模闆檔案的最後修改時間來判斷模闆檔案是否發生改變的!普及知識:任何一個檔案(電子文檔)都有三個時間(建立時間、修改時間、通路時間)
Smarty兩個常用方法assign與display
assign方法:配置設定變量到模闆檔案
調用該方法主要主要是為Smarty模闆檔案中的變量指派,可以傳遞一對名稱/數值對,也可以包含名稱/數值對的關聯數組。
display方法:顯示輸出模闆内容(替換标記)
基于smarty的腳本必須使用這個方法,而且一個腳本中隻能使用一次,因為它負責擷取和顯示由Smarty引擎引用的模闆。
開發常用的幾個系統内置變量
在Smarty中,存在一些特殊的内置變量,其允許我們直接在模闆檔案中,使用{$smarty.資料類型.變量名稱}的方式擷取某些指定的變量。
$smarty.now:相當于time()函數,擷取目前時間的時間戳
$smarty.config:擷取配置檔案中的變量資訊
$smarty.capture:擷取capture标簽捕獲的内容
$smarty.const :擷取php中的常量(常用)
smarty.get.page:相當于 s m a r t y . g e t . p a g e : 相 當 于 _GET[‘page’]
smarty.post.page:相當于 s m a r t y . p o s t . p a g e : 相 當 于 _POST[‘page’]
smarty.session.id:相當于 s m a r t y . s e s s i o n . i d : 相 當 于 _SESSION[‘id’](常用)
foreach内建函數
基本文法:
{foreach from=數組 key=鍵 name=名稱 item=内容 }
{foreachelse}
{/foreach}
參數說明:
from:必選項,要周遊的數組元素
item:必選項,每次周遊時,系統會自動将周遊結果放入item指定的變量中
name:foreach循環名稱,常用于附加屬性的操作
key:數組的鍵名
foreachelse:當要周遊的數組元素為空時,系統會自動執行foreachelse
capture内建函數
基本文法:
{capture name=‘變量’}
需要捕獲的内容
{/capture}
主要功能:捕獲一段内容,但本次不輸出,如果需要輸出,可以使用内置變量:
{$smarty.capture.變量名稱} 來擷取
Smarty緩存
必須開啟緩存開關(預設是關閉的)
可以設定緩存檔案的生命周期(非必須),如果不設定,預設為3600秒(1小時)
緩存作用:1可以加快伺服器的響應速度;2.減少伺服器的壓力(I/O開銷問題)3減少對資料庫的通路
問題:緩存檔案是由模闆直接生成還是由編譯檔案直接生成呢?
答:緩存檔案是由編譯檔案直接生成的!
這裡又有問題了,如果我改了資料庫的某個内容,想更新顯示内容,但是緩存又還沒到消亡時間,那該腫麼辦呢?
$smarty->clearCache(“index.tpl”);
上面的clearCache可以解決這個問題,隻要更新了資料後,調用clearCache清除一下緩存就可以了。
在實際項目應用中,如果我們采用緩存技術或靜态化技術,在背景資料有更新或調整時,一定要重新生成緩存檔案或靜态檔案,謹記!!!