Shopify (Liquid) несколько условий в условии if - PullRequest
0 голосов
/ 08 января 2019

Я перебираю все коллекции и создаю элемент предварительного просмотра с каждым названием коллекции, изображением и ссылкой. Но у меня есть 15 коллекций, которые я бы хотел исключить.

В настоящее время я использую 'contains', чтобы исключить 15, которые я не хочу, но мне интересно, есть ли более чистый способ написать это, так как это действительно длинное условие if.

Заранее спасибо!

Пример ниже:

{% for collection in collections %}
    {% if collection.title contains 'collection-1' or collection.title 
    contains 'collection-2' or collection.title contains 'collection-3' 
    or collection.title contains 'collection-4' or collection.title 
    contains 'collection-5' %}

    {% else %}

        // build item here

    {% endif %}
{% endfor %}

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Альтернативный метод для достижения ваших исключений:

Если вы дадите своим коллекциям какой-то флаг, указывающий, что они не должны отображаться в цикле сбора, вы можете управлять каждой коллекцией напрямую, а не поддерживать отдельный список.

Если мы посмотрим на страницу коллекции в вашем администраторе, мы не получим много полезного: все, что мы видим, это такие вещи, как заголовок, описание и т. Д. Даже нет места, где можно присвоить коллекции определенный тег!

К счастью, коллекции могут иметь метаполя - в Shopify эта функция скрыта от обычных пользователей. Метаполи позволяют вам создавать дополнительную информацию для объектов в вашем магазине (товары, коллекции, страницы и т. Д.), На которые вы затем можете ссылаться через Liquid.

Подробнее об использовании метаполей в Shopify можно прочитать здесь: https://www.shopify.com/partners/blog/110057030-using-metafields-in-your-shopify-theme

Моим предыдущим любимым плагином для доступа к метаполям был ShopifyFD, расширение для браузера, которое позволяло вам просматривать и редактировать эти метаданные прямо на странице вашей коллекции, но, к сожалению, недавние изменения Shopify для администратора нарушили этот плагин. Автор работает над новой версией, но на момент написания статьи она еще не готова: https://freakdesign.com.au/blogs/news/shopifyfd-and-the-current-case-of-the-broken-tool

(Примечание: я не пробовал ни один из других инструментов редактирования мета-полей, перечисленных в приведенной выше статье - когда у ShopifyFD возникли проблемы, я начал выполнять редактирование мета-поля с помощью API администратора и самостоятельно создавать / публиковать запросы: https://help.shopify.com/en/api/reference/metafield)

Если у вас есть способ легко устанавливать метаполя (что, на удивление, кажется сейчас трудной частью), ваша логика цикла for становится чрезвычайно простой. Предположим, что метаполе, которое вы создаете для этой цели, имеет пространство имен «Предварительный просмотр» и ключ «исключить»:

{% for collection in collections %}
  {% if collection.metafields.preview.exclude %}
    {% continue %}
  {% endif %}
  {% comment %}  Do stuff! {% endcomment %}
{% endfor %}

Теперь это будет пропускать любую коллекцию, для которой в вашем настраиваемом поле установлено любое значение, поэтому, если вы передумаете о текущей или будущей коллекции, все, что нужно изменить, - это одно метаполе в самой коллекции.

0 голосов
/ 08 января 2019

Я бы создал массив исключений и проверил, содержит ли мой массив исключений рассматриваемую коллекцию. (И вместо заголовка я бы использовал дескриптор коллекции, так как гарантированно, что дескриптор будет только «чистым» именем и будет уникальным)

Пример:

{% assign collection_exclusion_array = 'collection-1, collection-2, collection-3, collection-4, collection-5' | remove: ' ' | split: ',' %}
{% for collection in collections %}
  {% if collection_exclusion_array contains collection.handle %}
    {% continue %}
  {% endif %}
  {% comment %} Build items here {% endcomment %}
{% endfor %}

Как это работает:

  • Мы не можем напрямую создавать массивы в Liquid - мы можем создать только один, взяв строку и используя разделенный фильтр для создания нашего массива.
  • Используя дескрипторы, мы гарантируем, что наши значения списка содержат только буквы, цифры и дефисы - нет никаких шансов, что наш разделитель (в данном случае запятая) может случайно отобразиться как часть значения.
  • Мы не хотим, чтобы пробелы были частью значений массива, поэтому мы удаляем их перед использованием фильтра разбиения. Вместо этого мы могли бы просто не помещать пробелы между каждым значением, но в моем мозгу это читалось как ужасное злоупотребление грамматикой. Либо пропуски пробелов в первый раз, либо удаление их после создания строки будут работать.
  • Теперь, когда у нас есть наш массив исключений, при циклическом просмотре коллекций мы можем проверить, отображается ли дескриптор текущей коллекции в списке.
  • Если найдено, перейдите к следующей коллекции с помощью оператора continue - это сохранит слой отступа, поскольку нам не нужно иметь пустой if, за которым следует else, который содержит все, что мы хотим делаем.

И вот, пожалуйста! Надеюсь, это поможет:)

NB. Для получения дополнительной информации о ручках в Shopify см. https://help.shopify.com/en/themes/liquid/basics/handle

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