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

如何在Twig中仅当数组内日期变化时切换循环样式?

解决Twig中相邻条目同日期共用Class的问题

先修正你代码里的两个小问题:

  • % set endDate = entry.end|date_time %} 少了开头的{%,应该写成{% set endDate = entry.end|date_time %}
  • 模板里的endDatum是笔误,应该改成你定义的endDate

接下来实现同日期条目共用相同class的逻辑:核心是在循环外记录上一个条目的日期,每次循环时和当前条目日期对比,相同就沿用当前class,不同则切换class。

完整代码示例:

{% set prevStartDate = null %}
{% set classIndex = 0 %}
{% set rowClasses = ['odd', 'even'] %}

{% for entry in entries %}
    {% set startDate = entry.begin|date_time %}
    {% set endDate = entry.end|date_time %}

    {# 对比当前日期和上一个,不同则切换class索引 #}
    {% if prevStartDate is not null and startDate != prevStartDate %}
        {% set classIndex = 1 - classIndex %}
    {% endif %}

    <tr class="{{ rowClasses[classIndex] }}">
        <td class="text-nowrap">
            {% block date_begin %}{{ entry.begin|date_time }}{% endblock %}
            {% if entry.end %}
                {% block date_end %}{{ endDate }}{% endblock %}
            {% endif %}
        </td>
        {# 补充其他列内容 #}
    </tr>

    {# 更新上一个日期为当前日期,供下一次循环对比 #}
    {% set prevStartDate = startDate %}
{% endfor %}

逻辑说明:

  • 循环前初始化prevStartDate存储上一个条目的日期,classIndex控制当前使用的class下标,rowClasses是你定义的class列表
  • 每次循环先计算当前条目的startDate,如果上一个日期存在且和当前日期不同,就切换classIndex(0和1互转)
  • 渲染<tr>时通过rowClasses[classIndex]获取对应的class
  • 循环末尾更新prevStartDate为当前日期,确保下一次循环能正确对比

这样就能实现:相邻条目日期相同时使用同一个class,日期不同时自动切换class。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:41:17