W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
在調(diào)用display()
或者 fetch()
的時(shí)候, 你可以設(shè)置單個(gè)頁面有多個(gè)緩存。 當(dāng)我們希望執(zhí)行display('index.tpl')
的時(shí)候, 可以根據(jù)不同的情況來生成不同的緩存,并且可以單獨(dú)區(qū)分, 那么就需要設(shè)置$cache_id
為第二個(gè)參數(shù)來實(shí)現(xiàn)了。
Example 15.6. display()的參數(shù)作為$cache_id
<?php require('Smarty.class.php'); $smarty = new Smarty; $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); $my_cache_id = $_GET['article_id']; $smarty->display('index.tpl', $my_cache_id); ?>
上面,我們將$my_cache_id
值作為$cache_id
參數(shù)傳遞給 display()
。 每個(gè)單獨(dú)的$my_cache_id
值,對應(yīng)將會有單獨(dú)的 index.tpl
模板的緩存文件生成。 在這個(gè)例子里面,$cache_id
是我們從URL中獲得的article_id
。
當(dāng)客戶端(瀏覽器)傳遞值到Smarty或任何的PHP程序時(shí),務(wù)必謹(jǐn)慎。 雖然上面例子通過URL傳遞article_id顯得比較方便,但可能會引起問題。$cache_id
值會用來建立文件目錄的, 所以如果用戶故意傳遞了非常大的值給article_id,或?qū)憘€(gè)快速循環(huán)的腳本來發(fā)送隨機(jī)的article_id, 那么這很有可能引起一些服務(wù)器端的問題。 要記住,使用任何數(shù)據(jù)前要先檢查。 在上面的例子中,或許article_id有10個(gè)字符的長度, 僅可以是字母數(shù)組的組合,而且還應(yīng)該是存在于數(shù)據(jù)庫內(nèi),那么,你就應(yīng)該檢查它!
確保用同一個(gè)$cache_id
作為 isCached()
和 clearCache()
的第二個(gè)參數(shù)。
Example 15.7. 給 isCached() 傳遞一個(gè) cache_id
<?php require('Smarty.class.php'); $smarty = new Smarty; $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); $my_cache_id = $_GET['article_id']; if(!$smarty->isCached('index.tpl',$my_cache_id)) { // 沒有緩存,這里將進(jìn)行一些賦值操作 $contents = get_database_contents(); $smarty->assign($contents); } $smarty->display('index.tpl',$my_cache_id); ?>
要刪除特定$cache_id
的全部緩存, 同時(shí)需要給clearCache()
傳遞null作為第一個(gè)參數(shù)。
Example 15.8. 刪除特定$cache_id的緩存
<?php require('Smarty.class.php'); $smarty = new Smarty; $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); // 刪除$cache_id為"sports"的全部緩存 $smarty->clearCache(null,'sports'); $smarty->display('index.tpl','sports'); ?>
按這種方式,你可以通過設(shè)置同一個(gè)$cache_id
來把你的緩存“組織”起來。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: