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

如何在Twig模板的for循环中按指定变量对输出的div元素分组

实现按reference分组的代码方案
  • 先对购物车商品按lineItem.payload.reference字段完成预分组,再嵌套循环渲染即可,完整替换原有代码如下:
{# 第一步:按reference字段分组商品,空reference会归入uncategorized组 #}
{% set groupedLineItems = page.cart.lineItems|group(lineItem => lineItem.payload.reference ?? 'uncategorized') %}

{# 第二步:嵌套循环渲染分组 #}
{% for reference, groupItems in groupedLineItems %}
    {# 同reference商品的父包裹容器,可按需添加自定义样式类 #}
    <div class="offcanvas-reference-group-{{ reference }}">
        {% for lineItem in groupItems %}
            {% block component_offcanvas_cart_item %}
                {% sw_include '@Storefront/storefront/component/checkout/offcanvas-item.html.twig' %}
            {% endblock %}
        {% endfor %}
    </div>
{% endfor %}
  • 低版本Twig兼容方案:如果环境不支持group过滤器,用手动分组逻辑替换第一步即可:
{% set groupedLineItems = {} %}
{% for lineItem in page.cart.lineItems %}
    {% set groupKey = lineItem.payload.reference ?? 'uncategorized' %}
    {% if groupKey not in groupedLineItems %}
        {% set groupedLineItems = groupedLineItems|merge({(groupKey): []}) %}
    {% endif %}
    {% set groupedLineItems = groupedLineItems|merge({
        (groupKey): groupedLineItems[groupKey]|merge([lineItem])
    }) %}
{% endfor %}

上述代码执行后,所有reference相同的商品div都会被包裹在同一个父div容器内,原有子模板的{{ lineItem.payload.reference }}类逻辑不受任何影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:15:01