2012-03-05 11 views
6

¿Cómo puedo verificar la iteración actual para foreach y hacer algo?¿Cómo verificar la iteración en smarty?

{foreach $new_products as $product name=foo} 
    {if $smarty.foreach.foo.iteration=5} 
     Do it! 
    {/if} 
{/foreach} 

Este retorno no siempre comprobado

+2

'{foreach $ de tan $ item} {if $ item @ iteración == 5}' es un poco más corto ... – rodneyrehm

Respuesta

9

creo que debe hacer {if $smarty.foreach.foo.iteration == 5} (nótese el ==).

+0

por qué los dobles iguales? Solo intento entender porque === también funciona bien. – loxyboi

+0

@loxyboi puede usar dos o tres signos iguales (tres verificarán que el tipo coincida también; consulte http://php.net/manual/de/language.types.type-juggling.php). Pero en la pregunta original solo había un signo igual, lo cual es incorrecto. – apfelbox

+0

@apfelbox oh sí puedo ver que ahora, no detecté el '=' en la pregunta. Pensé que te estabas refiriendo a reglas específicas inteligentes. ¡Gracias! – loxyboi

6

Existe una técnica alternativa (creo que más nueva) para esto. El ejemplo de la Smarty docs lo demuestra muy bien:

{foreach $items as $i} 
    {if [email protected] eq 3} 
    {* put empty table row *} 
    <tr><td>nbsp;</td></tr> 
    {/if} 
    <tr><td>{$i.label}</td></tr> 
{/foreach} 

Nota del índice comienza desde cero, por lo que el índice 3 es la cuarta iteración.

0

Por Smarty 3 se puede utilizar la propiedad @iteration

{foreach $new_products as $product} 
    {if [email protected] == 5} 
     Do it! 
    {/if} 
{/foreach}