Петли корыта коллекции продуктов - PullRequest
1 голос
/ 05 марта 2019

Я пытаюсь перебрать все коллекции, частью которых является набор продуктов. Это мой код:

<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 голосов
/ 05 марта 2019

Вы можете получить сводный список вложенных свойств, используя фильтр map в своем коде Liquid, а фильтр map позволяет довольно эффективно разбирать вложенные объекты.

Таким образом, чтобы получить массивиз всех уникальных дескрипторов коллекции, используемых всеми продуктами в вашей коллекции, мы можем быстро получить требуемую информацию:

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

Это создает массив всех дескрипторов коллекции всех продуктов внутри коллекции., а затем сводит их к уникальным (используя фильтр uniq).Примечание: uniq необходимо работать с числом, строкой или другим простым полем - вот почему нам нужен был массив дескрипторов коллекции, а не массив объектов коллекции.

Так что теперь вы можете выполнять циклas:

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

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...