如何在smarty中增加一个赋值的variables而不显示它

所以我有一个在smarty分配的variables:

{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是可选的,如果没有给出,variables将会加1:

 {assign var=var value=0} {inc var=var step=2} {$var} // displays 2 

参考
Smarty {分配}
Smarty {捕获}
用插件扩展Smarty

只要做到这一点就干净

 {$number = $number +1} 

最好使用内置的Smarty“counter”>> {counter}元素。

所以,在模板中你可以使用:

 <div>Some text, html code, whatever... </div> {* init the counter! *} {counter start=0 print=false} {* now the tpl doesn't show the "0" number *} {* 3x run :D *} {some_cyclic_stuff_like_foreach_or_section} Run the counter: {counter} {/some_cyclic_stuff_like_foreach_or_section} 

它会为您打印:

 Run the counter: 1 Run the counter: 2 Run the counter: 3 

所以,至less,你可以用print=false选项来使用它,并且你有计数器但是它是隐藏的。

如果你使用它“可变的方式”(如上面的部分写),你也可以用html / css隐藏它,或者只是不要让它打印:)

如果我不得不这样做,我会做类似以下的事情: {php}$number++{/php}但是在smarty模板中使用php是非常丑陋的。 这可能表明有一个更好的方式来做你打算做的事情。