如何在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是非常丑陋的。 这可能表明有一个更好的方式来做你打算做的事情。
- 将短划分的string转换为camelCase?
- Java EE应用程序中的java.lang.NoSuchMethodError:org.apache.commons.codec.binary.Base64.encodeBase64String()