Contrôler la mise en cache des sorties des Plugins
Depuis Smarty-2.6.0, la mise en cache des plugins peut être déclarée lors
de leur inscription. Les troisièmes paramètres de register_block,
register_compiler_function et register_function sont appelés
$cacheable et valent true par défaut, ce qui est
aussi le comportement par défaut des versions de Smarty précédent la 2.6.0
Lors de l'inscription d'un plugin avec $cacheable=false, le plugin est
appelé à chaque fois que la page est affichée, même si la page vient du
cache. La fonction plugin se comporte presque comme la fonction
insert.
Contrairement à {insert}
les attributs pour le plugin ne sont pas mis en cache par défaut. Cela peut
être le cas en utilisant le quatrième paramètre
$cache_attrs. $cache_attrs
est un tableau de noms d'attributs qui doivent être mis en cache, pour que
la fonction plugin reçoive les valeurs telles qu'elles étaient définies lorsque
la page a été mise en cache, à chaque récupération à partir du cache.
Eviter la mise en cache du résultat d'un plugin
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')) {
// récupération de $obj à partir de la page et assignation...
$smarty->assign_by_ref('obj', $obj);
}
$smarty->display('index.tpl');
?>
index.tpl:
Time Remaining: {remain endtime=$obj->endtime}
]]>
Le nombre de secondes avant que la date de fin de $obj ne soit atteinte change
à chaque affichage de la page, même si la page est mise en cache. Comme l'attribut
endtime est mis en cache, il n'y a que l'objet qui ait besoin d'être extrait de la
base de données lors de la mise en cache de la page, mais pas lors des affichages
ultérieurs de la page.
Eviter la mise en cache d'une portion du template
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}
]]>
Lors du rechargement de la page, vous remarquerez que les deux dates sont différentes.
L'une est "dynamique" et l'autre est "statique". Vous pouvez faire ce que vous voulez
entre {dynamic}...{/dynamic} et être sûrs que cela ne sera pas mis en cache comme le
reste de la page.