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. Celà 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.
Exemple 14-10. Eviter la mise en cache du résultat d'un plugin
<?php $smarty->caching = 1;
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'); ?>
|
Où index.tpl contient :
Time Remaining: {remaining 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.
|
Exemple 14-11. Eviter la mise en cache d'une portion du template
<?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'); ?>
|
Où index.tpl contient :
Création de la page : {'0'|date_format:'%D %H:%M:%S'}
{dynamic}
Heure actuelle : {'0'|date_format:'%D %H:%M:%S'}
... faîtes quelque chose ici ...
{/dynamic} |
|
Lors du rechargement de la page, vous remarquerez que les deux dates sont
différentes. L'une est << dynamic >> et l'autre est << static >>.
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.