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 das Verhalten von Smarty vor Version 2.6.0 wiederspiegelt.
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 {insert} 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 werden sollen.
Beispiel 14-10. Verhindern des Caching der Ausgabe eines Plugins
<?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'); ?>
|
Bei folgendem index.tpl:
Verbleibende Zeit: {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:
<?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');
?> |
Bei folgendem index.tpl:
Seite wurde erzeugt: {"0"|date_format:"%D %H:%M:%S"}
{dynamic}
Jetzt ist es: {"0"|date_format:"%D %H:%M:%S"}
... weitere Ausgaben ...
{/dynamic} |
|
Um sicherzustellen dass ein Teil eines Templates nicht gecached
werden soll, kann dieser Abschnitt in einen {dynamic}...{/dynamic}
Block verpackt werden.