液体新手在这里寻求一些帮助 . 我在每个集合中有两个集合和一个产品,它们具有相似的名称:
(系列)小吃店>(产品)巧克力片
(收藏)蛋白质棒>(产品)薄荷巧克力片
我试图根据集合和产品句柄隐藏/显示特定于这些项目(在同一页面内)的内容 . 我已经尝试了以下内容,但这显示了两个项目,即使==应该是具体的,它不是并显示,因为它认为巧克力芯片和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中的产品句柄匹配(确切地说)mint-chocolate-chip .
-
该物品是该系列的一部分:蛋白质棒(不是小吃店)
https://www.blakesseedbased.com/collections/snack-bars/products/chocolate-chip
https://www.blakesseedbased.com/collections/protein-bars/products/mint-chocolate-chip
您可以在Mint Chocolate Chip页面上看到逻辑认为“巧克力片”是产品匹配,并且在薄荷巧克力片页面上显示巧克力片的信息(在产品显示的白色部分中) .
1 回答
在撰写流动声明时要记住的一些事项:
Liquid很详细 - 它使用文字词
and
和or
进行比较 . 示例:{% if product.price > 1000 and product.price < 2000 %}
条件不能包含括号 . 或者至少,他们可以,但他们被忽略了 . 结果:最佳做法是仅在任何单个语句中使用
and
或or
.您不能在
if
(或unless
)语句中使用过滤器 - 您首先要使用assign
来创建一个首先应用了所有过滤器的变量,然后对其进行比较 .除了
==
,>
,<
和!=
之外,您还可以在语句中使用contains
. 如果你在字符串上使用contains
,你将匹配一个子字符串;如果您在数组上使用contains
,则将匹配数组中的精确值 . (注意:你不能在复杂对象数组上使用contains
,比如一组变体)集合是对象,因此它永远不会等于字符串 . 您应该根据某些属性测试集合,例如
collection.handle
map
过滤器是将复杂对象数组减少为简单字段数组的便捷方法所以你可以做的事情: