2011-01-05 31 views
13

No suelo ser un tipo Smarty, así que estoy un poco atascado.¿Cómo puedo incrementar una variable Smarty?

Quiero hacer eco del índice de una matriz, pero quiero incrementarla cada vez que la hago eco.

Esto es lo que tengo ...

<ul> 
    {foreach from=$gallery key=index item=image} 
    <li> 
     <img src="{$image}" alt="" id="panel-{$index++}" /> 
    </li> 
    {/foreach} 
</ul> 

no funciona.

¿Es la mejor manera de hacer esto para preprocesar la matriz antes de pasarla a Smarty?

¿Hay alguna manera de hacerlo con Smarty?

+2

Pero ya que tienes 'index' del bucle foreach, ¿Quieres decir que está justo en 1 en realidad? – mario

+0

@mario Sí, eso es lo que quiero. – alex

+0

También podría usar '{counter start = 1}' en lugar del índice. – mario

Respuesta

23

se puede hacer algo como lo siguiente:

<ul> 
    {foreach from=$gallery key=index item=image name=count} 
    <li> 
     <img src="{$image}" alt="" id="panel-{$smarty.foreach.count.index}" /> 
    </li> 
    {/foreach} 
</ul> 

partir de cero, index es el índice de la matriz actual.

Eso es probablemente la mejor manera de hacerlo, sin embargo, utilizar simplemente un fuera counter de un bucle foreach puede utilizar counter, así:

{counter start=0 skip=1 assign="count"} 

Para incrementar simplemente llamar {counter} en cada iteración .

{counter} 
{*Can then use the $count var*} 
    {if $count is div by 4} 
     {*do stuff*} 
    {/if} 
+1

+1 gracias Russell! – alex

+0

¿Qué pasa si necesito incrementar y disminuir el contador? – Gio2k

+0

¿Qué tal si tienes más de un foreach en una página? El conteo comenzará desde '0' nuevamente. – karadayi

0

¿No lo incrementaría el $index++ después del eco?

try ++$index; o do $index++ ANTES de que lo haga eco.

3

Si se trata de Smarty 2 (que a partir de la sintaxis foreach que se está usando parece) se puede dar el bucle foreach un nombre y luego usar {$smarty.foreach.name.index}

como así

<ul> 
    {foreach from=$gallery key=index item=image name=foo} 
    <li> 
     <img src="{$image}" alt="" id="panel-{$smarty.foreach.foo.index}" /> 
    </li> 
    {/foreach} 
</ul> 

El índice de aperturas en cero, si desea una secuencia que comience en 1 use .iteration en lugar de .index

No he usado smarty desde hace bastante tiempo, pero siempre encontré la documentación oficial muy buena con muchos ejemplos http://www.smarty.net/docsv2/en/language.function.foreach.tpl

0

Suponiendo que se ejecuta a través $ foo que es una matriz con las opciones de índice y de iteración

{foreach from=$foo item=bar name=humbug} 
    {$smarty.foreach.humbug.index} 
    {$smarty.foreach.humbug.iteration} 
{/foreach} 

La primera columna son los resultados del índice, la segunda columna son los resultados de iteración

0 - 1 
1 - 2 
2 - 3 
3 - 4 
4 - 5 

Esto significa que el índice comienza en 0 como su índice de matriz, donde como la iteración es el recuento de iteración de bucle que comienza en 1.

Una instancia donde usar el valor incorrecto causaría problemas es mostrar algo en filas de 4 o cualquier otra cantidad en una tabla.

El uso de índice provocaría una mesa mal diseñada. Obtendrá un cambio de fila inmediato en la primera iteración del ciclo (índice 0) que se corregirá en la quinta iteración (índice 4) pero solo dentro del alcance del diseño actual, lo que significa que su primera fila solo tendrá 1 celda eso. cada otra fila tendría 4 celdas y los datos en cada celda después de la primera fila aparecerían en la tabla 4 celdas más tarde de lo que debería estar haciendo.

{if $smarty.foreach.humbug.index is div by 4} 
    </tr><tr> 
{/if} 

El uso de iteración sería disponer el cambio de fila dando adecuadamente filas iguales de 4 hasta la última iteración o el bucle foreach.

{if $smarty.foreach.humbug.iteration is div by 4} 
</tr><tr> 
{/if} 

Después de que el bucle foreach sólo tendría que añadir una fila de tabla más cerca de completar la última fila.

Espero que esto ayude a alguien.

0
{foreach from=$foo item=bar name=humbug} 
{$smarty.foreach.humbug.index} 
{$smarty.foreach.humbug.iteration} 
{/foreach} 

o

{foreach from=$foo item=bar name=berlin} 
{$smarty.foreach.berlin.index} 
{$smarty.foreach.berlin.iteration} 
{/foreach} 
0

Puede utilizar {counter}

{counter} se utiliza para imprimir un recuento. {counter} recordará el recuento de en cada iteración. Puede ajustar el número, el intervalo y la dirección del conteo, así como determinar si imprimir el valor. Puede ejecutar varios contadores simultáneamente por proporcionando un nombre único para cada uno. Si no se proporciona un nombre, el nombre de “default” se utilizará

fuente: http://www.smarty.net/docsv2/en/language.function.counter.tpl

Uso:

{counter start=0 print=false assign="count"} 

<ul> 
{foreach from=$listing.products item="product"} 
    {counter} 
    {if $count === 1} 
    <p>Count is 1</p> 
    {/if} 
{/foreach} 
</ul> 
Cuestiones relacionadas