php smarty程序设计,Smarty程序设计-动态文件操作
Smarty程序設計-動態(tài)文件操作
Smarty程序設計在動態(tài)PHP文件中進行操作,其功能可以分為兩種:一種功能是配置Smarty,如變量template_dir、$config_dir等;另一種功能是和Smarty模板之間的交互,如方法assign、display。
SMARTY_PATH常量
SMARTY_PATH常量定義Smarty類文件的完整系統(tǒng)路徑,如果沒有定義Smarty目錄,Smarty將會試著自動創(chuàng)建合適的值。如果定義了路徑必須要以斜線結束。該常量的應用是在Smarty的配置文件中,通過它獲取Smarty類的絕對路徑。
例如,在上小節(jié)創(chuàng)建的配置config.php中,就應用到這個常量。關鍵代碼如下:
define('BASE_PATH',$_SERVER['DOCUMENT_ROOT']);//定義服務器的絕對路徑
define('SMARTY_PATH',\Smarty\\');//定義Smarty目錄的絕對路徑
require BASE_PATH.SMARTY_PATH.'libs\Smarty.class.php';//加載Smarty類庫文件
Smarty程序設計變量
在Smarty中提供了很多的變量,這里只講解比較常用的幾個,如果讀者想詳細地了解Smarty變量,請參考Smarty的手冊。
$templte_dir:模板目錄。該目錄來存放Smarty模板,在前面的實例中,所有的.html文件都是Smaarty模板。模板的后綴沒有要求,一般為.html、.tpl等。
$compile_dir:編譯目錄。顧名思議,就是編譯后的模板和PHP程序所生成的文件默認路徑為當前執(zhí)行文件所在的目錄下的templates_c目錄。進入到編譯目錄,可以發(fā)現(xiàn)許多“%%...%%index.hgtml.php”格式的文件。隨便打開一個這樣的文件可以發(fā)現(xiàn),實際上Smaarty將模板和PHP程序又重新組合成一個混編頁面。
$cache_dir:緩存目錄。該目錄用來存放緩存文件。同樣,在cache目錄下可以看到生成的.html文件。如果caching變量開啟,那么Smarty將直接從這里讀取文件。
$config_dir:配置目錄。該目錄用來存放配置文件。
設計變量。該變量可以打開調試控制臺。只要在配置文件(config.php)中將$smarty->debugging設為TRUE即可使用。
$caching:緩存變量。該變量可以開啟緩存。只要當前模板文件和配置文件未被改動,Smarty就直接從緩存目錄中讀取緩存文件而不重新編譯模板。
Smarty方法
在Smarty提供的方法中,最常用的是assign方法和display方法。
1.assing方法
assing方法用于在模板執(zhí)行時為模板變量賦值。語法如下:
{assign var ="" value=""}
參數(shù)var是被賦值的變量名,參數(shù)value是賦給變量的值。
display方法
display方法用于顯示模板,需要指定一個合法的模板資源的類型和路徑。還可以通過第二個可選參數(shù)指定一個緩存號,相關的信息可以查看緩存。
void display (string template[,string cache_id[,string complle_id]])
參數(shù)template指定一個合法的模板資源的類型和路徑;參數(shù)cache_id為可選參數(shù),指定一個緩存號;參數(shù)compile_id為可選參數(shù),指定編譯號。編譯號可以將一個模板編譯成不同版本使用,如針對不同的語言編譯模板。編譯號的另外一個作用是,如果存在多個$template_dir模板目錄,但只有一個$compile_dir編譯后存檔目錄,這時可以為每一個$template_dir模板目錄指定一個編譯號,以避免相同的模板文件在編譯后會互相覆蓋。相對于在每一次調用display()時都指定編譯號,也可以通過設置$compile_id編譯號屬性來一次性設定。
Smarty
在講解Smarty的緩存之前,先將它和Smarty的編譯過程做一個對比,讓讀者明白緩存到底意味著什么。
Smarty的編譯功能默認是開啟的,而Smarty緩存則必須由開發(fā)人員來開啟。
編譯的過程是將模板轉換為PHP腳本,雖然在模板沒有被修改的情況下,不會重新執(zhí)行轉換過程,但這個編譯過的模板其實就是一個PHP腳本,只是減少了模板轉換的壓力,仍需要在邏輯層執(zhí)行獲取數(shù)據的操作,而這個獲取數(shù)據的操作是耗費內存最大的。
緩存則不僅將模板轉換為PHP腳本,而且將模板內容轉換為靜態(tài)頁面,不僅減少了模板轉換的壓力,也不再需要在邏輯層執(zhí)行獲取數(shù)據的操作。
這就是Smarty的緩存機制,它是一種更加理想的開發(fā)web程序的方法。下面就來學習這種技術。
1.創(chuàng)建緩存
開啟緩存的方法非常簡單,只要將Smarty對象中$config的值設置為TRUE即可,同時還要通過Smarty對象中的$cache_dir屬性指定緩存文件的存儲位置。操作代碼如下:
$smarty->caching=true;
$smarty->cache_dir = BASE_PATH.SMARTY_PATH.'cache/';//定義緩存文件存儲位置
2.緩存的生命周期
緩存創(chuàng)建成功后,必須為它設置一個生命周期,如果它一直不更新,那么就沒有任何意義。設置緩存生命周期應用的是Smarty對象中的$cache_lifetime屬性,緩存時間以秒為單位,默認值是3600秒。操作代碼如下:
$smarty->caching=true;//開啟緩存
$smarty->cache_dir = BASE_PATH>SMARTY_PATH.'cche/';//定義緩存文件存儲位置
$smarty->cache_lifetime=3600//設置緩存時間為1小時
如果將$caching的值設置為2,那么就可以控制單個緩存文件各自的過期時間。
3.同一模板生成多個緩存
在實際的程序開發(fā)中,經常會遇到這樣的情況,同一個模板文件生成多個頁面。而此時要對多個頁面進行緩存,就用的是Smarty中的display()方法,通過該方法的第二個參數(shù)設置緩存號,有幾個不同的緩存號就有幾個緩存頁面。操作代碼如下:
$smarty->caching=true;//開啟緩存
$smarty->cache_dir = BASE_PATH.SMARTY_PATH.'cache/';//定義緩存文件存儲位置
$smarty->cache_lifetime=3600;//設置緩存時間為1小時
$smarty->display('index.html',$_GET['id']);//將id作為第二個參數(shù)傳遞
4.判斷模板文件是否已被緩存
如果頁面已經被緩存,那么就可以直接調用緩存文件,而不再執(zhí)行動態(tài)獲取數(shù)據和輸出的操作。為了避免在開啟緩存后,再次執(zhí)行動態(tài)獲取數(shù)據和輸出操作給服務器帶來的壓力,最佳的方法就是應用Smarty對象中的is_cached()方法,判斷指定的模板是否存在緩存,如果存在則直接執(zhí)行緩存中的文件,否則執(zhí)行動態(tài)獲取數(shù)據和輸出的操作。操作代碼如下:
$smarty->caching=true;
if($smarty->is_cached('index.html')){//開啟緩存
//執(zhí)行動態(tài)獲取數(shù)據和輸出的操作
}
$smrty->display('index.html');
你問我答:如何判斷同一模板中的多個緩存文件?
判斷同一模板中的多個緩存是否存在與同一模板生成多個緩存類似,都是以緩存號為依據。判斷同一模板的多個緩存是否存在應用is_cached()方法,通過該方法的第二個參數(shù)設置緩存號,判斷對應的緩存是否存在。其方法如下:
$smarty->caching=true;
$smarty->cache_dir = BASE_PATH.SMARTY_PATH.'cache/';//定義緩存文件存儲位置
$smarty->cache_lifetime=3600;//設置緩存時間為1小時
if(!$smarty->is_cached('index.html',$_GET['id'])){
//執(zhí)行動態(tài)獲取數(shù)據和輸出的操作
}
$smarty->display('index.html',$_GET['id']);//將id作為第二個參數(shù)傳遞
5.清除模板中緩存
緩存的清除有兩種方法,分別介紹如下。
(1)clear_all_cache()方法,清除所有模板緩存。其語法如下:
void clear_all_cache(int expire time)
可選參數(shù)expire time,可以指定一個以秒為單位的最小時間,超過這個時間的緩存都將被清除。
(2)clear_cache()方法,清除指定模板的緩存。其語法如下:
void clear_cache(string template[,string cache id[,string compile id [, int expire time]]])
如果這個模板有多個緩存,可以用第二個參數(shù)指定要清除緩存的緩存號,還可以通過第3個參數(shù)指定編譯號。可以把模板分組,以便可以方便地清除一組緩存。第4個參數(shù)是可選的,用來指定超過某一時間(以秒為單位)的緩存才會被清除。
例如,分別應用這兩種方法清除緩存。代碼如下:
$smarty->caching=true;//開啟緩存
$smarty->clear_all_cache();//清除所有緩存
$smarty->clear_cache('index.html');//清除index.html模板的緩存
$smarty->clear_cache('index.html','$_GET['id']');//清除index.html模板中一個指定緩存號的緩存
$smarty->display('index.html');//指定模板頁
總結
以上是生活随笔為你收集整理的php smarty程序设计,Smarty程序设计-动态文件操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微型雷达的发展
- 下一篇: hive 窗口函数(开窗函数)