Smarty Icon

You may use the Smarty logo according to the trademark notice.

Smarty Template Engine Smarty Template Engine

For sponsorship, advertising, news or other inquiries, contact us at:

Sites Using Smarty

Advertisement

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.

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.