2012-02-25 5 views
18

Я не могу на всю жизнь понять, как добавить </tr><tr> каждую ДРУГОЙ итерации в петле Twig.Как бы вы сделали два столбика с веточкой?

Например:

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

Передается прутик, я бы цикл таблицу, как:

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

Это выведет:

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

То, что я хотел бы сделать что-то вроде этого:

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

Но я не могу для жизни меня понять способ чередовать ввод строки со всем, что не кажется взломанным. Честно говоря, я не могу даже взломать работу. Есть ли способ для этого? Или, должен ли я искать собственное расширение?

ответ

29

Правильный способ сделать это с помощью выпуск фильтр. Это новое в 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

Такая потрясающая особенность! – webDEVILopers

0

Для этого конкретного случая вы можете подготовить свой массив раньше. Таким образом, в цикле вы будете иметь в каждой строке две переменные. Попробуйте первый пример с этого сайта http://twig.sensiolabs.org/doc/templates.html

5

Что-то, как это будет работать:

<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> 

Альтернативный путь, который чувствует себя гораздо менее 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

Спасибо. Я закончил тем, что написал расширение, чтобы вернуться к некоторым php. Но это, безусловно, ответ, который я искал. –

+0

Привет, Говард, любое изменение, которое вы хотели бы открыть с помощью этого расширения? –

+2

обновление: пакетный фильтр был добавлен в Twig 1.12.3. http://twig.sensiolabs.org/doc/filters/batch.html – dnagirl

 Смежные вопросы

  • Нет связанных вопросов^_^