You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Twig模板IF语句失效,如何实现每3个条目生成新row?

解决你的Twig IF语句失效问题

嘿,我看了你的代码,问题出在两个关键地方:变量递增的语法写错了,还有逻辑顺序搞反了,这才导致你的IF判断完全没按预期工作。

首先,修复变量递增的错误

Twig里没有=+这种赋值写法,你写的{% set x =+ 1 %}其实是把x重新设成了1(相当于每次循环都把x重置为1),这就导致x % 3 == 0这个条件永远不成立——或者如果你的实际需求是反过来的,那反而会每次都触发?不管怎样,正确的递增写法应该是:

{% set x = x + 1 %}

然后,调整逻辑顺序匹配你的需求

你想要每处理第三个条目时生成新的row div,但原代码的逻辑是先判断再递增x,然后输出条目,这不仅顺序错了,结构也不对。通常我们会把3个条目包裹在一个row里,这时候用Twig循环自带的loop变量会更省心,不需要自己维护x,避免出错。

推荐的修复代码

用loop.index0(从0开始计数)和loop.index(从1开始计数)来控制row的开闭:

{% extends "_layout" %}
{% block content %}
<div class="box">
{% for entry in craft.entries.section('news') %}
    {# 每3个条目开头创建新row(第1、4、7...个条目时触发) #}
    {% if loop.index0 % 3 == 0 %}
        <div class="row">
    {% endif %}

    <div class="beitrag col l4 m12 s12">
        <h3 class="beitrag_titel">{{ entry.title }}</h3>
        <p>{{ entry.textnews }}</p>
    </div>

    {# 每3个条目结尾关闭row,或者循环结束时关闭未闭合的row(处理条目数不是3的倍数的情况) #}
    {% if loop.index % 3 == 0 or loop.last %}
        </div>
    {% endif %}
{% endfor %}
</div>
{% endblock %}

如果你坚持用自己的x变量

那修正后的代码应该是这样,注意递增的位置和判断条件:

{% extends "_layout" %}
{% block content %}
<div class="box">
{% set x = 1 %}
{% for entry in craft.entries.section('news') %}
    {% if x % 3 == 1 %} {# 在第1、4...个条目时打开row #}
        <div class="row">
    {% endif %}

    <div class="beitrag col l4 m12 s12">
        <h3 class="beitrag_titel">{{ entry.title }}</h3>
        <p>{{ entry.textnews }}</p>
    </div>

    {% if x % 3 == 0 or loop.last %} {# 在第3、6...个条目或最后一个条目时关闭row #}
        </div>
    {% endif %}

    {% set x = x + 1 %} {# 正确的递增写法,放在条目输出之后 #}
{% endfor %}
</div>
{% endblock %}

原代码失效的核心原因

  1. =+是错误的赋值语法,导致x永远是1,你的IF条件要么永远不触发,要么(如果条件写反)每次都触发
  2. 逻辑顺序错误:你在判断后才递增x,并且把row放在条目输出之前,这完全不符合“每3个条目一组”的结构,导致要么生成的row位置不对,要么完全不生成

内容的提问来源于stack exchange,提问作者regrettableclone0816

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:15:34