Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you increment an assigned variable in smarty without displaying it

Tags:

php

smarty

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.

like image 614
Francis Lewis Avatar asked Dec 29 '11 23:12

Francis Lewis


People also ask

How do you increment a variable?

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.

How do I assign a variable in smarty?

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() .

What is section in smarty?

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.


1 Answers

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

like image 127
Cyclonecode Avatar answered Oct 12 '22 02:10

Cyclonecode