Ответ 1
Правильный способ сделать это - использовать фильтр пакетный. Это новое в 1.12.3.
<table>
{% for row in numArray|batch(2) %}
<tr>
{% for column in row %}
<td>{{ column }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
Я не могу на всю жизнь понять, как добавить </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 | |
+-----------+-----------+
Но я не могу, чтобы жизнь меня определяла способ чередовать ввод строки со всем, что не кажется взломанным. Честно говоря, я не могу даже взломать работу. Есть ли способ для этого? Или, нужно ли мне писать собственное расширение?
Правильный способ сделать это - использовать фильтр пакетный. Это новое в 1.12.3.
<table>
{% for row in numArray|batch(2) %}
<tr>
{% for column in row %}
<td>{{ column }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
Что-то вроде этого будет работать:
<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>
Альтернативный способ, который выглядит намного менее взломанным:
<table>
{% for i in range(0, numArray|length-1, 2) %}
<tr>
<td>{{ numArray[i] }}</td>
<td>{{ numArray[i+1]|default("") }}</td>
</tr>
{% endfor %}
</table>
В этом конкретном случае вы можете подготовить свой массив раньше. Таким образом, в цикле вы будете иметь в каждой строке две переменные. Попробуйте первый пример с этого сайта http://twig.sensiolabs.org/doc/templates.html