Get Smarty

Donate

Paypal

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

Управление кэшированием результатов работы плагинов

Начиная с плагинов Smarty-2.6.0, кэшируемость плагинов может быть объявлена во время их регистрации. Третий аргумент у register_block, register_compiler_function и register_function называется $cacheable и имеет значение по умолчанию true, что соответствует поведению плагинов Smarty версии ранее 2.6.0

Если плагин регистрируется с $cacheable=false, плагин вызывается каждый раз, когда страница отображается, даже если сама страница кэширована. Поведение плагина немного похоже на функцию insert.

В отличие от {insert}, атрибуты плагина не кэшируются по умолчанию. Они могут быть объявлены как кэшируемые при помощи четвертого параметра - $cache_attrs. $cache_attrs это массив имен атрибутов, которые должны кэшироваться, чтобы функция плагина брала значение в том виде, в котором оно было в момент помещения страницы в кэш, каждый раз, когда страница запрашивается из кэша.

Example 14.10. Предотвращение кэширования результата работы плагина


<?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')) {
    // извлекаем $obj из БД и присваиваем...
    $smarty->assign_by_ref('obj', $obj);
}

$smarty->display('index.tpl');
?>

   

Шаблон index.tpl:


Оставшееся время: {remaining endtime=$obj->endtime}

   

Количество секунд до endtime объекта $obj изменяется при каждом обновлении страницы, даже если страница кэширована. Так как атрибут endtime кэширован, объект извлекается из базы данных в тот момент, когда страница помещается в кэш, но не во время последующих запросов к странице.


Example 14.11. Предотвращение кэширования части страницы


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');
?>

   

Шаблон index.tpl:


Страница кэширована: {"0"|date_format:"%D %H:%M:%S"}

{dynamic}

Текущее время: {"0"|date_format:"%D %H:%M:%S"}

... выполняем разные действия ...

{/dynamic}

   

Во время обновления страницы вы заметите, что даты отличаются. Одна является "динамической", другая - "статической". Вы можете поместить в конструкцию {dynamic}...{/dynamic} любой код и быть уверенным, что он не будет помещён в кэш вместе с остальной частью страницы.

Comments
No comments for this page.

Advertisement