Как бы вы сделали двухколонный стол с веткой? - PullRequest
18 голосов
/ 25 февраля 2012

Не могу понять, как добавить </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     |           |
+-----------+-----------+

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

Ответы [ 3 ]

32 голосов
/ 03 октября 2013

Правильный способ сделать это - использовать пакетный фильтр.Это новое в 1.12.3.

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

Ссылка: http://twig.sensiolabs.org/doc/filters/batch.html

5 голосов
/ 25 февраля 2012

Примерно так будет работать:

<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>
0 голосов
/ 25 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...