2012-02-25 15 views
18

No puedo, por la vida de mí, descubrir cómo agregar un </tr><tr> cada OTRA iteración en un bucle Twig.¿Cómo harías una mesa de dos columnas con ramita?

Por ejemplo:

$numArray = array(12,13,14,15,16,17,18); 

pasa al ramita, lo haría bucle de una tabla como:

<table> 
    {% for num in numArray %} 
    <tr> 
     <td> 
     {{num}} 
     </td> 
    </tr> 
    {% endfor %} 
</table> 

Esto seria:

+-----------+ 
| 12  | 
+-----------+ 
| 13  | 
+-----------+ 
| 14  | 
+-----------+ 
| 15  | 
+-----------+ 
| 16  | 
+-----------+ 
| 17  | 
+-----------+ 
| 18  | 
+-----------+ 

Lo que me gustaría hacer es obtener algo como esto:

+-----------+-----------+ 
| 12  | 13  | 
+-----------+-----------+ 
| 14  | 15  | 
+-----------+-----------+ 
| 16  | 17  | 
+-----------+-----------+ 
| 18  |   | 
+-----------+-----------+ 

Pero no puedo por la vida de encontrar una manera de alternar mi entrada de fila con cualquier cosa que no parezca hacky. Honestamente, ni siquiera me puedo poner hacky para trabajar. ¿Hay un método para esto? O, ¿debería estar buscando escribir mi propia extensión?

Respuesta

29

La forma correcta de hacer esto es mediante el lote filtro. Es nuevo en 1.12.3.

<table> 
{% for row in numArray|batch(2) %} 
    <tr> 
    {% for column in row %} 
    <td>{{ column }}</td> 
    {% endfor %} 
    </tr> 
{% endfor %} 
</table> 

Ref: http://twig.sensiolabs.org/doc/filters/batch.html

+0

¡Una característica tan impresionante! – webDEVILopers

5

Algo como esto funcionaría:

<table> 
    <tr> 
    {% for num in numArray %} 
     <td> 
     {{num}} 
     </td> 
    {% if loop.index is even %} 
    </tr> 
    <tr> 
    {% endif %} 
    {% endfor %} 

    {% if num|length is odd %} 
    <td></td> 
    {% endif %} 
    </tr> 
</table> 

Una forma alternativa, que se siente mucho menos hacky:

<table> 
    {% for i in range(0, numArray|length-1, 2) %} 
    <tr> 
    <td>{{ numArray[i] }}</td> 
    <td>{{ numArray[i+1]|default("") }}</td> 
    </tr> 
    {% endfor %} 
</table> 
+0

Gracias. Terminé escribiendo una extensión para poder regresar a algunos php. Pero, esta es ciertamente la respuesta que estaba buscando. –

+0

Hola Howard, ¿algún cambio que desees para abrir la fuente de esa extensión? –

+2

una actualización: el filtro de lote se agregó en Twig 1.12.3. http://twig.sensiolabs.org/doc/filters/batch.html – dnagirl

Cuestiones relacionadas