Liquid :如何结合两个条件?

Liquid : How do I combine two conditions?

液体新手在这里寻求一些帮助。我有两个系列,每个系列中有一个产品具有相似的名称:

(集合) 小吃店 > (产品)巧克力片

(系列) 蛋白棒 > (产品)薄荷巧克力片

我正在尝试 hide/show 基于集合和产品句柄的那些项目(在同一页面内)的特定内容。我已经尝试了以下方法,但这显示了两个项目,即使 == 应该是特定的,但它不是并且显示它认为 chocolate-chip 和 chocholate-chip-mint 是匹配的,但它不是:

{% 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

您可以在 Mint Chocolate Chip 页面上看到逻辑认为 "chocolate-chip" 是产品匹配项,并在 mint-chocolate-chip 页面(在下面的白色部分中)显示 chocolate-chip 的信息产品展示)。

编写流动报表时要记住的一些事项:

  • Liquid 冗长 - 它使用字面词 andor 进行比较。示例:{% 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 %}