Smarty單頁多個緩存

2018-12-09 11:35 更新

單頁多個緩存

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號