14.4. Die Ausgabe von cachebaren Plugins Kontrollieren Seit Smarty-2.6.0 kann bei der Registrierung angegeben werden ob ein Plugin
cached werden soll. Der dritte Parameter für register_block, register_compiler_function
und register_function heisst $cacheable, der Standardwert ist TRUE, was in Smarty vor
Version 2.6.0 üblich war.
Wenn ein Plugin mit $cacheable=false registriert wird, wird er bei jedem Besuch der Seite aufgerufen, selbst wenn die Site aus dem Cache stammt. Die Pluginfunktion verhält sich ein wenig wie insert.
Im Gegensatz zu werden die Attribute standartmässig nicht gecached. Sie können das caching jedoch mit dem vierten Parameter $cache_attrs kontrollieren. $cache_attrs ist ein Array aller Attributnamen die gecached wertden sollen.
Beispiel 14-10. Preventing a plugin's output from being cached 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')) {
// objekt $obj aus datenbank dem template zuweisen
$smarty->assign_by_ref('obj', $obj);
}
$smarty->display('index.tpl');
index.tpl:
Time Remaining: {remain endtime=$obj->endtime} Der Wert von $obj->endtime ändert bei jeder Anzeige der Seite, selbst wenn die Seite gecached wurde. Das Objekt $obj wird nur geladen wenn die Seite nicht gecached wurde.
Beispiel 14-11. Verhindern dass Template Blöcke gecached werden 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"}
Now is: {"0"|date_format:"%D %H:%M:%S"}
... do other stuff ...
Um sicherzustellen dass ein Teil eines Templates nicht gecached werden soll, kann dieser Abschnitt in einen ... Block verpackt werden.
|