2012-03-05 14 views
6

Come posso controllare l'iterazione corrente per foreach e fare qualcosa?Come verificare l'iterazione in smarty?

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

Questo sempre di ritorno non controllato

+2

'{foreach $ da da $ item} {if $ item @ iterazione == 5}' è un po 'più corta ... – rodneyrehm

risposta

9

Penso che si dovrebbe fare {if $smarty.foreach.foo.iteration == 5} (notare il ==).

+0

perché il doppio uguale? Sto solo cercando di capire perché === funziona anche bene. – loxyboi

+0

@loxyboi puoi usare due o tre segni di uguale (tre controlleranno che anche il tipo corrisponda - vedi http://php.net/manual/de/language.types.type-juggling.php). Ma nella domanda iniziale c'erano solo un segno di uguale, che è sbagliato. – apfelbox

+0

@apfelbox oh sì, ora posso vedere che non ha individuato quello "=" nella domanda. Pensavo che ti riferivi a regole specifiche intelligenti. Grazie! – loxyboi

6

Esiste una tecnica alternativa (penso sia più recente) per questo. L'esempio dalla Smarty docs dimostra piacevolmente:

{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 l'indice inizia da zero, quindi indice 3 è la 4 iterazione.

0

Per Smarty 3 è possibile utilizzare la proprietà @iteration

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