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

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

提问人:Robert 提问时间:1/24/2020 更新时间:3/4/2021 访问量:6718

问:

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

<!-- 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 不接受括号,所以显然这是行不通的。没有括号也不起作用。该文档提供了使用运算符为变量分配静态值的示例,但没有关于将两者组合在一起的示例。

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

有没有办法将运算符的输出分配给 Liquid 中的变量?

液体 赋值 运算符

评论


答:

5赞 RustyDev 1/25/2020 #1

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

稍微短一点/不同的版本是:

{% assign month = 'now' | date: "%m" %}
{% liquid
case month
when '12'
  assign isDecember = true
else
  assign isDecember = false
endcase %}
0赞 Valentine Shi 3/4/2021 #2

您可以完全避免使用中间布尔标志变量,因为只有布尔变量的 Liquid 似乎在 .以下是解决方案。isDecemberassignif/endif

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

{% if month == "12" %}
  Happy Holidays
{% endif %}
  1. 或者在 s 中使用纯字符串赋值(不是布尔值赋值):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. 还想要 unsing 中介吗?如果您在任一子句中放置一些虚拟文本赋值,那也将起作用。isDecemberif/else
{% if month == "12" %}
  {% assign dummy = "summy" %}
  {% assign isDecember = true %}
{% else %}
  {% assign isDecember = false %}
{% endif %}

希望能有所帮助。

评论

0赞 Michael Sotnikov 11/16/2023
内在不尊重外在条件。所以它总是渲染到最后assignassign