Liquid:如何结合两个"UNLESS"条件?

Liquid: How to combine two "UNLESS" conditions?

我在 Shopify liquid 工作,我正在寻找一种清晰而简单的方法来 运行 代码(在本例中初始化 jquery),仅当两个条件都不成立时。

  1. 模板不是购物车
  2. 该模板不是具有多个产品款式的产品模板。

在这些情况下,我之前已经用更简单的 IF- 条件初始化了 JQuery。所以现在我想避免在这些情况下再次初始化 JQuery。

我可以用这个吗:

{% unless template contains 'cart' or template contains 'product' and product.variants.size > 1 %}
  {{ 'jquery-2.2.3.min.js' | asset_url | script_tag }}
{% endunless %}

是否清楚“and”指的是 'product'-模板?所以像 If X != true OR (Y != true AND Z = true)?

否则,我是否需要使用以下命令来确保 JQuery 没有被初始化两次?

{% unless template contains 'cart' %}
    {% unless template contains 'product' and product.variants.size > 1 %}
        {{ 'jquery-2.2.3.min.js' | asset_url | script_tag }}
    {% endunless %}
{% endunless %}
{% unless template contains 'product' and product.variants.size > 1 %}
    {% unless template contains 'cart' %}
        {{ 'jquery-2.2.3.min.js' | asset_url | script_tag }}
    {% endunless %}
{% endunless %}

您的解决方案

首先,您使用嵌套代码提出的第二个替代方案将以两种形式工作:

  1. 使用购物车检查外面和里面的产品
  2. 使用产品检查外部和内部购物车

一般机制

Shopify Liquid 从右到左评估 {% if %}{% unless %} 语句中的 andor 等运算符,例如,如果您有:

<div>

  {% unless false or false and true %}
    {{"The evaluated condition is false"}}
  {% else %}
    {{"The evaluated condition is true"}}
  {% endunless %}

</div>

这将输出 {{"The evaluated condition is false"}} 因为:

  1. false 和 true 的计算结果为 false
  2. false 或 false 的计算结果为 false
  3. {% unless false %} 输出 {{"The evaluated condition is false"}}

我认为单个 {% unless %} 语句更简洁并且会避免嵌套,但您可以选择任何一种解决方案。