循环槽产品系列

时间:2019-03-05 13:05:57

标签: html shopify

我试图遍历一组产品所属的所有集合。这是我的代码:

<div class="container model-collection">
<h1>{{ collection.title }}</h1>
{% paginate collection.products by 12 %}
  <div class="grid collection-products-container">
    <ul>
    {% for product in collection.products %}
    {% for collection in product.collections %}
  <li><a href="{{ collection.url }}">{{ collection.title }}</a></li>
{% endfor %}
    {% endfor %}
  </ul>
</div>
  {% if paginate.pages > 1 %}
    {% include 'pagination' %}
  {% endif %}
{% endpaginate %}
</div>

这很好用,但是,如果两个产品属于同一集合,它将两次列出该集合。因此,我需要限制仅显示每个集合一次的循环。 我试图这样做:

<div class="container model-collection">
<h1>{{ collection.title }}</h1>
{% assign model = collection.title %}
  <div class="grid collection-products-container">
    <ul>
    {% for product in collection.products %}
    {% assign seen_collections = "" %}
    {% for collection in product.collections %}
{% unless seen_collections contains collection %}
{% assign seen_collections = seen_collections | append: "," | append: collection  %}
  <li><a href="{{ collection.url }}/{{ model }}">{{ collection.title }}</a></li>
  {% endunless %}
{% endfor %}
    {% endfor %}
  </ul>
</div>
</div>

但是这只会返回其中一个集合两次,而不会返回其他任何一个。任何想法如何做到这一点?

1 个答案:

答案 0 :(得分:0)

通过使用Liquid代码中的map过滤器,您可以获取嵌套属性的汇总列表,而map过滤器可让您高效地钻取嵌套对象。

因此,要获取集合中所有产品使用的所有唯一集合句柄的数组,我们可以按以下方式快速获取所需信息:

{% assign collection_handles = collection.products | map: 'collections'  | map: 'handle' | uniq %}

这将创建一个集合中所有产品的所有集合句柄的数组,然后将它们简化为唯一的(使用uniq过滤器)。注意:uniq需要使用数字,字符串或其他简单字段-这就是为什么我们需要一个数组集合句柄,而不是数组集合对象。

所以现在您可以按以下方式进行循环了:

{% for handle in collection_handles %}
  {% assign collection = collections[handle] %}
  <!-- All your awesome stuff here -->
{% endfor %}

希望这会有所帮助!