Как вы увеличиваете назначенную переменную в smarty, не отображая ее

Поэтому у меня есть назначенная переменная в smarty:

{assign var=number value=0} 

Теперь я могу увеличить его, используя

 {$number++} 

или

 {++$number} 

Это именно то, что мне нужно, только проблема, она отображает значение $ number на странице. Есть ли способ увеличить значение, но не отобразить его?

Это не используется внутри цикла, иначе я бы использовал что-то вроде итерации или индекса.

Related of "Как вы увеличиваете назначенную переменную в smarty, не отображая ее"

Вы можете сделать это:

 {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 является необязательным, и если не указано, переменная будет увеличиваться на единицу:

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

Справка
Smarty {assign}
Smarty {capture}
Расширение Smarty с помощью плагинов

Это просто, чтобы сделать это вот так …

 {$number = $number +1} 

Лучше использовать встроенный элемент «счетчик» Smarty >> {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 

Таким образом, по крайней мере, вы можете использовать его с параметром print=false , и у вас есть счетчик, но он скрыт.

Если вы используете его «переменный способ» (например, надпись в верхнем разделе), вы также можете скрыть его с помощью html / css или просто не позволяйте ему печатать 🙂

Если бы мне пришлось это сделать, я бы сделал что-то вроде следующего: {php}$number++{/php} но очень уродливо использовать php в шаблоне smarty. Это может означать, что есть лучший способ сделать то, что вы планировали делать.