液体:如何结合两个条件?

时间:2018-11-01 15:17:36

标签: conditional shopify liquid

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

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

(集合)蛋白质棒>(产品)薄荷巧克力片

我试图根据收藏和产品句柄隐藏/显示特定于那些项目的内容(在同一页面内)。我已经尝试了以下操作,但是即使==应该是特定的,它也显示了这两个项目,但并没有显示,因为它认为巧克力片和胆汁片薄荷糖是匹配的,但不是:

{% 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 :(得分:3)

在编写流动性陈述时要记住一些事情:

  • 液体很冗长-它使用文字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 %}