0

我在 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}

但它不起作用,但是当我禁用 smarty 页面缓存时,它起作用了。

谁能告诉我是什么问题?

4

2 回答 2

0

尝试使用assignGlobal,例如:

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

希望对你有帮助

于 2011-12-20T07:01:50.043 回答
0

在 Smarty3 中,您的插件使用模板,而不是 smarty 对象。所以你的函数的足迹是function smarty_updatehour(array $params, Smarty_Internal_Template $template). 不过,这不是你的问题。即使@sudhir 的assignGlobal() 提示也对你一点帮助也没有。

您的非缓存插件无法分配变量,但返回实际输出:

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}或使用上面修改过的插件代码。

于 2011-12-20T12:30:23.137 回答