【问题标题】:Liquid : How do I combine two conditions?液体:我如何结合两个条件?
【发布时间】:2019-04-05 20:20:14
【问题描述】:

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

(collection) Snack Bars > (product)巧克力片

(collection) 蛋白质棒 > (product)薄荷巧克力片

我正在尝试根据集合和产品句柄隐藏/显示特定于这些项目的内容(在同一页面内)。我尝试了以下方法,但这显示了这两个项目,即使 == 应该是特定的,它不是并且显示为它认为巧克力片和巧克力片薄荷是匹配的,但它不是:

{% 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 中的产品句柄与(完全)mint-chocolate-chip 匹配。
  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 页面上显示巧克力片的信息(在产品下方的白色部分显示)。

【问题讨论】:

标签: conditional shopify liquid


【解决方案1】:

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

  • 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 %}

【讨论】:

  • 很高兴它有帮助!
猜你喜欢
  • 1970-01-01
  • 2021-09-21
  • 2012-10-17
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
相关资源
最近更新 更多