Mengontrol Plugins ynd Bisa Di-cache' Output
Sejak plugin Smarty-2.6.0, plugins yang bisa di-cache dapat dideklarasikan
saat meregistrasinya. Parameter ketiga pada
register_block(),
register_compiler_function() dan register_function()
disebut $cacheable dan standarnya &true; yang juga
merupakan tabiat plugins dalam Smarty versi sebelum 2.6.0
Ketika meregistrasi sebuah plugin dengan $cacheable=false, plugin
dipanggil setiap kali halaman ditampilkan, meskipun halaman berasal dari cache.
Fungsi plugin berlaku sedikit mirip fungsi
{insert}.
Sebaliknya dari {insert}
atribut plugins standarnya tidak di-cache. Bisa dideklarasikan untuk di-cache
dengan parameter keempat
$cache_attrs. $cache_attrs
adalah array nama-atribut yang harus di-cache, agar fungsi-plugin memperoleh
nilai seperti pertama kali halaman dituliskan ke cache, setiap kali ia diambil
dari cache.
Menghindari output plugin di-cache
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')) {
// ambil $obj dari db dan tempatkan...
$smarty->assign_by_ref('obj', $obj);
}
$smarty->display('index.tpl');
?>
]]>
di mana index.tpl adalah:
endtime}
]]>
Jumlah detik sampai endtime $obj dicapai, perubahan
pada setiap tampilan halaman, meskipun bila halaman di-cache. Karena
atribut endtime di-cache. obyek harus ditarik dari database ketika
halaman dituliskan ke cache tapi tidak pada permintaan halaman berikutnya.
Menghindari seluruh bagian template di-cache
caching = 1;
function smarty_block_dynamic($param, $content, &$smarty) {
return $content;
}
$smarty->register_block('dynamic', 'smarty_block_dynamic', false);
$smarty->display('index.tpl');
?>
]]>
where index.tpl is:
Ketika mengambil ulang halaman, anda akan mencatat bahwa kedua tanggal
berbeda. Satu dynamis dan satu statis.
Anda dapat melakukan apapun antara {dynamic}...{/dynamic}
dan pastikan ia tidak akan di-cache seperti bagian halaman lainnya.