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

Shopify Liquid中forloop.last针对特定区块类型失效问题求助

解决Shopify Section中同类型Block的HR分隔问题

你遇到的核心问题是forloop.last的判断对象错误:当前代码遍历的是所有Section Blocks,再通过if筛选特定类型,此时forloop.last指的是整个循环的最后一个Block,而非当前类型的最后一个Block。比如当全局最后一个Block不是accordion_description类型时,即使已经遍历完所有description类型的Block,forloop.last仍为false,导致最后一个description Block后面还是会输出<hr>。

解决方案

用Shopify的where过滤器先把对应类型的Block单独筛选出来,存入变量后再遍历这个过滤后的数组。此时forloop.last会针对当前类型的Block列表生效,精准判断是否为该类型的最后一个元素。

修改后的完整代码

{% if section.settings.productaccordion_active %}
  <ul class="product-accordion  product-accordion-small">
      {% if section.settings.accordion_description_active %}
        <li id="product-accordion-1">
          <div class="product-accordion-title">Description</div>
          <div class="product-accordion-content">
            {%- assign desc_blocks = section.blocks | where: "type", "accordion_description" -%}
            {%- for block in desc_blocks -%}
              {% if block.settings.accordion_description_title %}
                <h5>{{ block.settings.accordion_description_title }}</h5>
                {{ block.settings.accordion_description_content }}
              {% endif %}
              {% unless forloop.last %}
                <hr>
              {% endunless %}
            {%- endfor -%}
          </div>
        </li>
      {% endif %}

      {% if section.settings.accordion_ingredients_active  %}
        <li id="product-accordion-2">
          <div class="product-accordion-title">Ingredients</div>
          <div class="product-accordion-content">
              {%- assign ing_blocks = section.blocks | where: "type", "accordion_ingredients" -%}
              {%- for block in ing_blocks -%}
                  {% if block.settings.accordion_ingredients_title %}
                    <h5>{{ block.settings.accordion_ingredients_title }}</h5>
                    {{ block.settings.accordion_ingredients_content }}
                    <br><span class="product-popup-link" data-popupid="popup_ingredient_A_breakdown">See breakdown</span>
                    <br><span class="product-popup-link" data-popupid="popup_ingredient_A_full">See full list</span>
                  {% endif %}
                  {% unless forloop.last %}
                    <hr>
                  {% endunless %}
              {%- endfor -%}
          </div>
        </li>
      {% endif %}
  </ul>
{% endif %}

关键修改说明

  • 用{% assign desc_blocks = section.blocks | where: "type", "accordion_description" %}筛选出所有accordion_description类型的Block,存入desc_blocks变量
  • 遍历desc_blocks而非整个section.blocks,此时forloop.last仅针对当前类型的Block列表判断
  • 配料部分做同样处理,筛选出accordion_ingredients类型的Block存入ing_blocks后遍历

这样就能保证同类型的最后一个Block后面不会输出<hr>,不受全局Block顺序的影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:15:37