Ориентация на каждый n-й индекс от x до y в Twig

У меня проблема с loop.index в for цикл для сложной сетки (размечен как простой одноуровневый список HTML). у меня есть loop_index переменная в частичке ветки для «ячейки» сетки ( <li>) который равен loop.index,

Первоначально у меня была эта простая проверка на основе конкретных чисел для первых элементов в цикле.

{% set class = 'green' %}
{% if (loop_index > 1 and loop_index < 5) or (loop_index > 7 and loop_index < 12) %}
{% set class = 'orange' %}
{% endif %}

Но теперь его следует расширить, чтобы включить в цикл, возможно, неограниченное количество элементов. Поэтому не только пункты 2-4 и 8-11 станут orangeно также 15-18 и т. д.

По сути, мне нужно перебрать 2 класса (оранжевый, зеленый) следующим образом:

  • 2-4 — оранжевый
  • (повторяющийся узор начинается здесь 🙂
  • 5-7 — зеленый (партия 3)
  • 8-11 — оранжевый (партия 4)
  • 12-14 — зеленый (партия 3)
  • 15-18 — апельсин (партия 4)
  • 19-21 — зеленый (партия 3)
  • 22-25 — оранжевый (партия 4)

Я пытался нанять batch а также cycle для этого, но они кажутся неподходящими для этого. batch похоже, не работает с «неограниченными» циклами и cycle кажется, не подходит для повторяющегося шаблона с партиями одинаковых предметов (в отличие от циклического перебора несгруппированных одиночных предметов). divisible by также не работал для меня, как нужно в этом случае.

Как я могу изменить классы в зависимости от значения loop.index? Я не могу работать с for цикл или за его пределами здесь — вся работа должна быть выполнена внутри частичной «ячейки» сетки.

1

Решение

Вы можете проверить остальная часть подразделения. Вот рабочие решения:

{% for i in 1..30 %}
{% set class = 'green' %}
{% set loop_index = loop.index %}
{% if (loop_index %7 >= 1 and loop_index %7 < 5) %}
{% set class = 'orange' %}
{% endif %}
* {{ i }} {{class}}
{% endfor %}

Это будет выводить как:

* 5 green
* 6 green
* 7 green
* 8 orange
* 9 orange
* 10 orange
* 11 orange
* 12 green
* 13 green
* 14 green
* 15 orange
* 16 orange
* 17 orange
* 18 orange
* 19 green
* 20 green
* 21 green
* 22 orange
* 23 orange
* 24 orange
* 25 orange
* 26 green
* 27 green

Вы можете проверить вывод в этом рабочем пруте

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]