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 %}
最后,我只想验证如果我在产品页面上,我的逻辑检查:
- URL 中的产品句柄与(完全)薄荷巧克力片匹配。
- 该项目是该系列的一部分:蛋白质棒(不是零食棒)
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 冗长 - 它使用字面词
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 %}
液体新手在这里寻求一些帮助。我有两个系列,每个系列中有一个产品具有相似的名称:
(集合) 小吃店 > (产品)巧克力片
(系列) 蛋白棒 > (产品)薄荷巧克力片
我正在尝试 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 %}
最后,我只想验证如果我在产品页面上,我的逻辑检查:
- URL 中的产品句柄与(完全)薄荷巧克力片匹配。
- 该项目是该系列的一部分:蛋白质棒(不是零食棒)
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 冗长 - 它使用字面词
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 %}