So I have an assigned variable in smarty:
{assign var=number value=0}
Now I can increment it using
{$number++}
or
{++$number}
Which is exactly what I need, only problem is, it displays the value of $number on the page. Is there a way I can increment the value but not display it?
This is not used inside of a loop otherwise I would use something like iteration or index.
The most simple way to increment/decrement a variable is by using the + and - operators. This method allows you increment/decrement the variable by any value you want.
You can assign a variable to root of the current root tree. The variable is seen by all templates using the same root tree. A global variable is seen by all templates. To access {assign} variables from a php script use getTemplateVars() .
A {section} is for looping over sequentially indexed arrays of data, unlike {foreach} which is used to loop over a single associative array. Every {section} tag must be paired with a closing {/section} tag.
You could do this:
{assign var=val value=1} {assign var=val value=$val+1} {$val} // displays 2
The above will be compiled to:
$this->assign('val', 1); $this->assign('val', $this->_tpl_vars['val']+1); echo $this->_tpl_vars['val'];
or
{assign var=var value=1} {capture assign=var}{$var+1}{/capture} {$var} // displays 2
Which in turn will be compiled as:
$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'];
another approach would be to write a small plugin:
// 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']); } }
The function would then be called like this, notice that step
is optional and if not given the variable will be incremented by one:
{assign var=var value=0} {inc var=var step=2} {$var} // displays 2
Reference
Smarty {assign}
Smarty {capture}
Extending Smarty With Plugins
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With