从smarty插件中分配值

时间:2011-12-20 06:55:05

标签: smarty smarty3

我在我的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 :(得分:0)

尝试使用assignGlobal,例如:

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

希望它适合你

答案 1 :(得分:0)

在Smarty3中,你的插件可以使用模板,而不是智能对象。所以你的函数的足迹是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}或使用上面修改过的插件代码。