我在我的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}
但是当它禁用智能页面缓存时它不起作用,它可以工作。
谁能告诉我这是什么问题?
答案 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}
或使用上面修改过的插件代码。