Twig:如何使用基于值的集成 if 条件编写 for 循环

Twig: How to write a for loop with an integrated if condition based on a value

情况

问题

我找到了一种方法来处理这个要求。但是用下面的方法,我需要复制一些我觉得很不对的代码。

当前代码:

{% if activateShuffle == 'yes' %}
    {% for item in images|shuffle() %}
        <div>
            <h1>{{ item.title }}</h1>
            <img src="{{ asset('images/')}}{{ item.imagename }}"/>
        </div>
    {% endfor %}
{% else %}
    {% for item in images %}
        <div>
            <h1>{{ item.title }}</h1>
            <img src="{{ asset('images/')}}{{ item.imagename }}"/>
        </div>
    {% endfor %}
{% endif %}

解决方法

有没有办法在 for 循环中定义 if 条件?以便它检查变量是否具有特定值并添加扩展名?所以也许是这样的:

{% for item in images if activateShuffle == 'yes' add |shuffle() %}
    <div>
        <h1>{{ item.title }}</h1>
        <img src="{{ asset('images/')}}{{ item.imagename }}"/>
    </div>
{% endfor %}

感谢您的帮助

您可以在循环之前根据 activateShuffle 的值更改 images 变量,如下所示:

{% if activateShuffle == 'yes' %}
    {% set images = images|shuffle() %}
{% endif %}

{% for item in images %}
    <div>
        <h1>{{ item.title }}</h1>
        <img src="{{ asset('images/')}}{{ item.imagename }}"/>
    </div>
{% endfor %}

使用宏:

{% macro render_images_conditional(images, doShuffle) %}
    {% if doShuffle %}
        {% set images = images|shuffle() %}
    {⅜ endif %}

    {% for item in images %}
        ...
{% endmacro %}

{{ _self.render_images_conditional(images, shuffle) }}