首页 > 解决方案 > 在 Liquid 中的集合页面中,每隔 n 次迭代渲染一次

问题描述

如何添加不同的列表项,例如在派生自的第三个、第七个和第十一个列表项之后显示图像collection.products?我尝试过 jQuery,但它没有用。任何想法?

<ul id="collection-grid" data-id="{{ section.id }}" class="grid">
  {%- for product in collection.products -%}
    <li class="grid-item">
      {% render 'product-wrapper' %}
     </li>
  {%- endfor -%}
 </ul>

<script>
   $( "ul:nth-child(3)" ).append( "<li class="info-card card-wrapper"><img...></li>" );
</script>

标签: javascriptjquerycss-selectorsappendliquid

解决方案


我不知道您要添加什么 HTML 以及在哪里添加,但我在下面进行了猜测。

在变量中使用cycle标签和capture它,然后用它if来显示你想要的。

(不需要 jQuery)

<ul id="collection-grid" data-id="{{ section.id }}" class="grid">
    {%- for product in collection.products -%}
        {% capture thisIteration %}{% cycle '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12' %}{% endcapture %}

        <li class="grid-item">
            {% render 'product-wrapper' %}
            {% if thisIteration == '3' %}
                <span>Here is the HTML that is added only on every 3rd iteration</span>
            {% endif %}
            {% if thisIteration == '7' %}
                <span>Here is the HTML that is added only on every 7th iteration</span>
            {% endif %}
            {% if thisIteration == '11' %}
                <span>Here is the HTML that is added only on every 11th iteration</span>
            {% endif %}
        </li>
    {%- endfor -%}
</ul>

您还可以使用一个模过滤器,但是对于像第 7 和第 11 这样的迭代,我觉得上面的内容更具可读性。

<ul id="collection-grid" data-id="{{ section.id }}" class="grid">
    {%- for product in collection.products -%}
        {% assign mod3 = forloop.index | modulo: 3 %}
        {% assign mod7 = forloop.index | modulo: 7 %}
        {% assign mod11 = forloop.index | modulo: 11 %}

        <li class="grid-item">
            {% render 'product-wrapper' %}
            {% if mod3 == 0 %}
                <span>Here is the HTML that is added only on every 3rd iteration</span>
            {% endif %}
            {% if mod7 == 0 %}
                <span>Here is the HTML that is added only on every 7th iteration</span>
            {% endif %}
            {% if mod11 == 0 %}
                <span>Here is the HTML that is added only on every 11th iteration</span>
            {% endif %}
        </li>
    {%- endfor -%}
</ul>

推荐阅读