在Twig中将每个第n个索引从x到y定位

时间:2017-05-26 14:33:21

标签: php loops for-loop twig twig-filter

我在复杂网格的loop.index循环中遇到for问题(标记为简单的单级HTML列表)。我在网格“单元格”(a 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)
  • ...

我尝试使用batchcycle,但这似乎不合适。 batch似乎不适用于“无限制”循环,cycle似乎不适用于具有相同项目批次的重复模式(而不是循环通过未分组的单个项目)。在这种情况下,divisible by对我来说也不起作用。

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

1 个答案:

答案 0 :(得分:0)

您可以查看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