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