tutorial español descargar php smarty

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.