присвоение значения из умных плагинов

У меня включено кеширование в моей умной установке, и у меня есть следующие функции шаблона

function smarty_updatedhour($params, $smarty)
{
    $date1 = new DateTime($params['timestamp']);
    $date2 = new DateTime("now");
    $interval = $date1->diff($date2);
    $smarty->assign("updated_period", $interval->format('%h'), true);
}

Я зарегистрировал плагин как:

$smarty->registerPlugin('function', 'updated_hour', 'smarty_updatedhour', false, array('timestamp'));

Я пытался проверить, работает он или нет.

{updated_hour timestamp=$timestamp_vale}
{$updated_period}
{if $updated_period > 10}
    // do other stuffs
{/if}

но это не работает, однако, когда я отключаю кеширование умных страниц, оно работает.

может ли кто-нибудь сказать мне, в чем проблема?


person Prakash    schedule 20.12.2011    source источник


Ответы (2)


В Smarty3 ваши плагины работают с шаблоном, а не со смарт-объектом. Таким образом, размер вашей функции равен function smarty_updatehour(array $params, Smarty_Internal_Template $template). Впрочем, это не твоя проблема. Даже подсказка assignGlobal() от @sudhir вам ничуть не поможет.

ваш плагин без кэширования не может назначать переменные, но возвращает фактический результат:

function smarty_updatedhour($params, $smarty)
{
    $date1 = new DateTime($params['timestamp']);
    $date2 = new DateTime("now");
    $interval = $date1->diff($date2);
    return $interval->format('%h');
}

это потому, что {$updated_period} не является некэшируемым. Этот вывод оценивается ТОЛЬКО ОДИН РАЗ, а затем записывается в кеш. Либо попробуйте {nocache}{$updated_period}{/nocache}, либо используйте модифицированный код плагина выше.

person rodneyrehm    schedule 20.12.2011
comment
ну никак не могу вернуть функцию на выходе. Это связано с тем, что назначенное значение обрабатывается в шаблоне с помощью {if}{/if}, а назначенное значение в реальном времени не предназначено для отображения в шаблоне. Таким образом, из вашего предложения единственная возможность - обернуть вывод моей переменной (для тестирования) или условия {if} в {nocache}. Также обратите внимание, что я установил для параметра nocache значение true при назначении updated_period в моем плагине. - person Prakash; 20.12.2011

Попробуйте использовать assignGlobal, например:

$smarty->assignGlobal("updated_period", $interval->format('%h'), true);

Надеюсь, это сработает для вас

person Sudhir Bastakoti    schedule 20.12.2011