Вы можете получить улучшение скорости по сравнению с ответом Дэвида Лазара, используя фильтр map
от Shopify.
Как и в случае с его ответом, на шаге 1 создайте коллекцию с правилом «Товар содержит тег» и введитетег, который вы используете.
Теперь при условии, что у вас есть этот объект коллекции в переменной Liquid с именем collection
, вы получите дескрипторы всех коллекций с помощью простой команды map
, за которой следует *Команда 1008 * для удаления всех дубликатов:
{% assign all_collection_handles = collection.products | map: 'collections' | map: 'handle | uniq %}
Фильтр map
получает очень конкретную информацию из пачки объектов, так что это немного быстрее, чем перебирать множество больших объектов смножество полей, которые вас не интересуют.
(обратите внимание, что uniq
работает только со строками, числами или другими простыми типами данных, поэтому мы полностью отображаем дескрипторы коллекций)
Теперь вы можете выполнить итерацию по all_collection_handles
, чтобы сделать то, что вам нужно:
{% for handle in all_collection_handles %}
{% assign collection = collections[handle] %}
<!-- Cool stuff here -->
{% endfor %}
Поскольку у вас должен быть гораздо более короткий список коллекций, чем выпродуктов, это должно быть разумно производительным.Как всегда, помните, что чем тяжелее вы работаете в коде Liquid, тем больше вероятность возникновения задержек при загрузке страницы, поэтому сокращение циклов и использование целенаправленных фильтров, таких как map
, по возможности поможетвсе работает как можно быстрее.
Примечание. Если ваша страница начинает страдать от чрезмерной задержки при загрузке страницы, вы можете пропустить это как часть загрузки страницы и просто оставить элемент-заполнитель, а затем использовать Javascript для получения информации, которую вынужно и создайте нужный вам дисплей.