Жидкость: Как мне совместить два условия? - PullRequest
0 голосов
/ 01 ноября 2018

Жидкий новичок здесь ищет помощи. У меня есть две коллекции и один продукт в каждой коллекции, которые имеют похожие названия:

(коллекция) Snack Bars> (продукт) Шоколадная стружка

(коллекция) Протеиновые батончики> (продукт) Мятно-шоколадный чип

Я пытаюсь скрыть / показать содержимое, относящееся к этим элементам (на одной странице), на основе коллекции и дескриптора продукта. Я попробовал следующее, но это показывает оба пункта, хотя == должен быть конкретным, это не так, и отображает, так как считает, что шоколадная стружка и шоколадная мята совпадают, но это не так:

{% if product.handle == "chocolate-chip" %} // do something {% endif %}

Я пробовал это, но не пошел:

{% if collection == "protein-bars" && product.handle == "mint-chocolate-chip" %} // do something {% endif %}

Я тоже пробовал это, но это не работает:

{% if product.handle == "mint-chocolate-chip" | within: collections.protein-bars %} // do something {% endif %}

В конечном счете, я просто хочу убедиться, что если я нахожусь на странице продукта, моя логика проверяет:

  1. что дескриптор продукта в URL совпадает (точно) с мятным шоколадным чипом.
  2. Что входит в коллекцию: протеиновые батончики (не закусочные)

https://www.blakesseedbased.com/collections/snack-bars/products/chocolate-chip

https://www.blakesseedbased.com/collections/protein-bars/products/mint-chocolate-chip

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

1 Ответ

0 голосов
/ 01 ноября 2018

Некоторые вещи, которые следует иметь в виду при написании жидких заявлений:

  • Жидкость многословна - для сравнения используются буквенные слова and и or. Пример: {% if product.price > 1000 and product.price < 2000 %}
  • Условные выражения не могут содержать скобок. Или, по крайней мере, они могут , но их игнорируют. Результат: Рекомендуется использовать and или or в любом отдельном утверждении.
  • Вы не можете использовать фильтры внутри операторов if (или unless) - сначала вы захотите использовать assign, чтобы сначала создать переменную со всеми фильтрами, а затем сравнить ее.
  • В дополнение к ==, >, < и !=, вы можете использовать contains в своих утверждениях. Если вы используете contains в строке, вы будете соответствовать подстроке; если вы используете contains в массиве, вы получите точное значение в массиве. (Примечание: вы не можете использовать contains для массива сложных объектов, например, для массива вариантов)
  • Коллекции являются объектами, поэтому они никогда не могут быть равны строке. Вам следует проверить коллекцию на основе некоторого свойства, например collection.handle
  • Фильтр map - это удобный способ сократить массив сложных объектов в массив простых полей

Так что вы могли бы сделать:

{% assign product_collections = product.collections | map: 'handle' %}
{% if product_collections contains 'my-special-collection' and product.handle == 'my-special-handle' %}
  <h2>Hi Mom!</h2>
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...