присвоение значения из плагинов smarty - PullRequest
0 голосов
/ 20 декабря 2011

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

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}

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

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

Ответы [ 2 ]

0 голосов
/ 20 декабря 2011

В Smarty3 ваши плагины работают с шаблоном, а не с объектом smarty.Таким образом, ваша функция занимает 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}, либо используйте приведенный выше модифицированный код плагина.

0 голосов
/ 20 декабря 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...