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