所以我在smarty中有一个分配的变量:
{assign var=number value=0}
现在我可以使用
{$number++}
或者
{++$number}
正是我需要的,唯一的问题是,它在页面上显示了$ number的值。
有什么办法可以增加值但不显示?
这不在循环内使用,否则我将使用诸如迭代或索引之类的方法。
最佳答案
您可以这样做:
{assign var=val value=1}
{assign var=val value=$val+1}
{$val} // displays 2
以上内容将编译为:
$this->assign('val', 1);
$this->assign('val', $this->_tpl_vars['val']+1);
echo $this->_tpl_vars['val'];
或者
{assign var=var value=1}
{capture assign=var}{$var+1}{/capture}
{$var} // displays 2
依次将其编译为:
$this->assign('var', 1);
ob_start();
echo $this->_tpl_vars['var']+1;
$this->_smarty_vars['capture']['default'] = ob_get_contents();
$this->assign('var', ob_get_contents());
ob_end_clean();
echo $this->_tpl_vars['var'];
另一种方法是编写一个小插件:
// plugins/function.inc.php
function smarty_function_inc($params, Smarty &$smarty)
{
$params['step'] = empty($params['step']) ? 1 : intval($params['step']);
if (empty($params['var'])) {
trigger_error("inc: missing 'var' parameter");
return;
}
if (!in_array($params['var'], array_keys($smarty->_tpl_vars))) {
trigger_error("inc: trying to increment unassigned variable ".$params['var']);
return;
}
if (isset($smarty->_tpl_vars[$params['var']])) {
$smarty->assign($params['var'],
$smarty->_tpl_vars[$params['var']] + $params['step']);
}
}
然后将像这样调用该函数,请注意
step
是可选的,如果未指定,则该变量将增加1:{assign var=var value=0}
{inc var=var step=2}
{$var} // displays 2
引用
Smarty {assign}
Smarty {capture}
Extending Smarty With Plugins
关于php - 如何在Smarty中递增分配的变量而不显示它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8674831/