位置:首頁 > 框架 > Smarty教學 > Smarty控製插件輸出緩衝

Smarty控製插件輸出緩衝

Controlling Cacheability of Plugins' Output控製插件輸出的緩衝能力

自從Smarty-2.6.0插件以來,如果注冊它們,則插件的緩存能力能夠被重新聲明的。register_block,register_compiler_function 和register_function的第3個參數就是$ cacheable , 並且它的值默認為true。當然,在2.6.0版本之前它的默認值也是這樣的。

 

當用$cacheable=false來這冊一個插件,則每次這個頁麵被輸出的時候,這個插件就會被使用,即使這個頁麵來自緩存。這個插件函數的行為有點像這個函數insert。

 

和{insert}相反,插件的屬性默認是不緩存的。通過使用第四個參數 $cache_attrs ,它們能夠被重新聲明為緩存的。 $cache_attrs 是一個屬性名字的數組,可以被緩存,所以每次當它被從緩存中取出的時候,這個插件函數獲得值-----因為這個頁麵會被寫入用來緩存。


Example 14-10. Preventing a plugin's output from being cached

例14-10.阻止插件從緩存中輸出

index.php:

require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;

function remaining_seconds($params, &$smarty) {
 $remain = $params['endtime'] - time();
 if ($remain >=0)
 return $remain . " second(s)";
 else
 return "done";
}

$smarty->register_function('remaining', 'remaining_seconds', false, array('endtime'));

if (!$smarty->is_cached('index.tpl')) {
 // fetch $obj from db and assign...
 $smarty->assign_by_ref('obj', $obj);
}

$smarty->display('index.tpl');
// by www.gitbook.net/smarty

index.tpl:

Time Remaining: {remain endtime=$obj->endtime}

 

直到$obj運行結束,時間的秒數在每一個頁麵輸出的時候會改變,即使這個頁麵被緩存。隻要結束時間屬性被緩存,當頁麵被寫入到緩存但是冇有對這個頁麵接著的請求的時候對象隻是不得不重新從數據庫裡取出而已。

 


Example 14-11. Preventing a whole passage of a template from being cached

例14-11.阻止一個模板文件的 整篇被緩存

index.php:

require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;

function smarty_block_dynamic($param, $content, &$smarty) {
 return $content;
}
$smarty->register_block('dynamic', 'smarty_block_dynamic', false);

$smarty->display('index.tpl');


index.tpl:

Page created: {"0"|date_format:"%D %H:%M:%S"}

{dynamic}

Now is: {"0"|date_format:"%D %H:%M:%S"}

... do other stuff ...

{/dynamic}

 

當重新加載這個頁麵,你將會注意到這兩個日期不同。一個是“動態“,一個是“靜態”。你能夠在{dynamic}...{/dynamic}之間作任何事情,並且保證它將不會像剩下的頁麵一樣被緩存。