以 Twig 中从 x 到 y 的第 n 个索引为目标

Targeting every nth index from x to y in Twig

我在复杂网格(标记为简单的单级 HTML 列表)的 for 循环中遇到 loop.index 问题。我在网格 "cell"(<li>)的树枝部分中有一个 loop_index 变量,它等于 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个类(橙色,绿色):

我试图为此雇用 batch and cycle,但他们似乎不适合这样做。 batch 似乎不适用于 "unlimited" 循环,并且 cycle 似乎不适用于具有相同项目批次的重复模式(与循环未分组的单个项目相反)。 divisible by 在这种情况下也无法满足我的需要。

如何根据 loop.index 的值更改 类?我无法在此处使用 for 循环或在其外部工作 — 所有工作都需要在网格 "cell" 部分内部完成。

您可以查看rest of the division。这里有一个可行的解决方案:

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

你可以检查输出in this working twigfiddle