php - español - ¿Cómo se incrementa una variable asignada en smarty sin mostrarla?
smarty español (4)
Es más limpio simplemente hacerlo así ...
{$number = $number +1}
Entonces tengo una variable asignada en smarty:
{assign var=number value=0}
Ahora puedo incrementarlo usando
{$number++}
o
{++$number}
Que es exactamente lo que necesito, el único problema es que muestra el valor de $ number en la página. ¿Hay alguna manera de incrementar el valor pero no mostrarlo?
Esto no se usa dentro de un bucle, de lo contrario usaría algo como iteración o índice.
Es mejor usar el elemento Smarty "counter" >> {counter}
incorporado.
Entonces, en la plantilla puedes usar:
<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}
Imprimirá para usted:
Run the counter: 1
Run the counter: 2
Run the counter: 3
Entonces, al menos, puedes usarlo con la opción print=false
, y tienes el contador pero está oculto.
Si lo usa de la "forma variable" (como la sección superior de escritura) también puede ocultarlo con html / css o simplemente no lo deje imprimir :)
Podrías hacer esto:
{assign var=val value=1}
{assign var=val value=$val+1}
{$val} // displays 2
Lo anterior se compilará para:
$this->assign(''val'', 1);
$this->assign(''val'', $this->_tpl_vars[''val'']+1);
echo $this->_tpl_vars[''val''];
o
{assign var=var value=1}
{capture assign=var}{$var+1}{/capture}
{$var} // displays 2
Que a su vez se compilará como:
$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''];
otro enfoque sería escribir un pequeño complemento:
// 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'']);
}
}
La función se llamaría así, observe que el step
es opcional y, si no se da, la variable se incrementará en uno:
{assign var=var value=0}
{inc var=var step=2}
{$var} // displays 2
Referencia
Smarty {assign}
Smarty {captura}
Extendiendo Smarty con complementos
Si tuviera que hacer esto, haría algo como lo siguiente: {php}$number++{/php}
pero es muy feo tener que usar php en una plantilla inteligente. Esto podría sugerir que hay una mejor manera de hacer lo que planeas hacer.