首页 文章

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

提问于
浏览
0

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

(系列)小吃店>(产品)巧克力片

(收藏)蛋白质棒>(产品)薄荷巧克力片

我试图根据集合和产品句柄隐藏/显示特定于这些项目(在同一页面内)的内容 . 我已经尝试了以下内容,但这显示了两个项目,即使==应该是具体的,它不是并显示,因为它认为巧克力芯片和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 回答

  • 3

    在撰写流动声明时要记住的一些事项:

    • Liquid很详细 - 它使用文字词 andor 进行比较 . 示例: {% if product.price > 1000 and product.price < 2000 %}

    • 条件不能包含括号 . 或者至少,他们可以,但他们被忽略了 . 结果:最佳做法是仅在任何单个语句中使用 andor .

    • 您不能在 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 %}
    

相关问题