Smarty單頁多個(gè)緩存

2018-12-09 11:35 更新

單頁多個(gè)緩存

在調(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。

技術(shù)說明

當(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來把你的緩存組織起來。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號