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:
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.
Example 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.
Example 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.