What is Smarty?
Why use it?
Use Cases and Work Flow
Syntax Comparison
Template Inheritance
Best Practices
Crash Course
You may use the Smarty logo according to the trademark notice.
For sponsorship, advertising, news or other inquiries, contact us at:
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.
Example 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.
Example 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.