Liquid:如何将运算符的输出分配给变量?

Liquid: How to assign the output of an operator to a variable?

我正在使用 Shopify 的 Liquid 模板。我希望仅当月份恰好是十二月时才显示某些元素。由于有多个元素需要这个,所以我想在文档的顶部设置一个变量,稍后再引用它。这是我得到的有效方法:

<!-- At the top of the page -->
{% assign month = 'now' | date: "%m" %}
{% if month == "12" %}
{% assign isDecember = true %}
{% else %}
{% assign isDecember = false %}
{% endif %}

<!-- Only show in December -->
{% if isDecember %}
Happy Holidays
{% endif %}

这可行(为了测试,我将“12”更改为当前月份),但它非常难看。在大多数语言中,我会这样做:

{% assign isDecember = (month == "12") %}

Liquid 不接受括号,所以显然这行不通。没有括号也行不通。该文档有 using operators and for assigning static values to variables 的示例,但没有关于将两者结合的示例。

我可以将 | 过滤器的输出分配给一个变量,但似乎没有过滤器来涵盖每个运算符(甚至是必要的“==”),所以这并不令人满意。

有什么方法可以将运算符的输出分配给 Liquid 中的变量吗?

没有办法优雅地做到这一点,根据 this,它们不支持三元运算符。有人提到有人在尝试类似的事情。

稍微 shorter/different 的版本是:

{% assign month = 'now' | date: "%m" %}
{% liquid
case month
when '12'
  assign isDecember = true
else
  assign isDecember = false
endcase %}

您完全可以避免使用中间布尔标志变量 isDecember,因为只有布尔变量的 Liquid assign 似乎在 if/endif 中不起作用。这是解决方案。

  1. 只需使用纯字符串:
{% assign month = 'now' | date: "%m" %}

{% if month == "12" %}
  Happy Holidays
{% endif %}
  1. 或在 if 内使用纯字符串赋值(不是布尔值赋值):
{% if month == "12" %}
  {% assign phrase = "Happy Holidays" %}
{% else %}
  {% assign phrase = "Happy usual time of the year" %}
{% endif %}

Now my message to you is: {{ phrase }}
  1. 还想要无名中介isDecember?如果您将一些虚拟文本分配放在 if/else 的任一子句中,那也可以。
{% if month == "12" %}
  {% assign dummy = "summy" %}
  {% assign isDecember = true %}
{% else %}
  {% assign isDecember = false %}
{% endif %}

希望对您有所帮助。