选择twig for循环中的上一项

时间:2013-04-05 17:38:04

标签: for-loop twig

我使用twig并在数组中包含一些数据。我使用for循环来访问所有这样的数据:

{% for item in data %}
    Value : {{ item }}
{% endfor %}

是否可以在循环中访问上一个项目?例如:当我在 n 项目时,我希望能够访问 n-1 项目。

3 个答案:

答案 0 :(得分:9)

没有内置的方法可以做到这一点,但这是一个解决方法:

{% set previous = false %}
{% for item in data %}
    Value : {{ item }}

    {% if previous %}
        {# use it #}
    {% endif %}

    {% set previous = item %}
{% endfor %}

第一次迭代需要if。

答案 1 :(得分:1)

除了@Maerlyn的例子,这里是提供next_item的代码(当前版本之后的代码)

{# this template assumes that you use 'items' array 
and each element is called 'item' and you will get 
'previous_item' and 'next_item' variables, which may be NULL if not availble #}


{% set previous_item = null %}
{%if items|length > 1 %}
    {% set next_item = items[1] %}
{%else%}
    {% set next_item = null %}
{%endif%}

{%for item in items %}
    Item: {{ item }}

    {% if previous_item is not null %}
           Use previous item here: {{ previous_item }}    
    {%endif%}


    {%if next_item is not null %}
          Use next item here: {{ next_item }}    
    {%endif%}


    {# ------ code to udpate next_item and previous_item  elements #}
    {%set previous_item = item %}
    {%if loop.revindex <= 2 %}
       {% set next_item = null %}
    {%else%}
        {% set next_item = items[loop.index0+2] %}
    {%endif%}
{%endfor%}

答案 2 :(得分:0)

我的解决方案:

{% for item in items %}

  <p>item itself: {{ item }}</p>

  {% if loop.length > 1 %}
    {% if loop.first == false %}
      {% set previous_item = items[loop.index0 - 1] %}
      <p>previous item: {{ previous_item }}</p>
    {% endif %}

    {% if loop.last == false %}
      {% set next_item = items[loop.index0 + 1] %}
      <p>next item: {{ next_item }}</p>
    {% endif %}

  {% else %}

    <p>There is only one item.</p>

  {% endif %}
{% endfor %}

我必须制作无尽的图像库,在第一个项目进入最后一个项目之前,在最后一个项目进入第一项之后。它可以这样做:

{% for item in items %}

  <p>item itself: {{ item }}</p>

  {% if loop.length > 1 %}
    {% if loop.first %}
      {% set previous_item = items[loop.length - 1] %}
    {% else %}
      {% set previous_item = items[loop.index0 - 1] %}
    {% endif %}

    {% if loop.last %}
      {% set next_item = items[0] %}
    {% else %}
      {% set next_item = items[loop.index0 + 1] %}
    {% endif %}

    <p>previous item: {{ previous_item }}</p>
    <p>next item: {{ next_item }}</p>

  {% else %}

    <p>There is only one item.</p>

  {% endif %}
{% endfor %}