2013-07-31 42 views
0

我有一个使用默认的液体模板引擎小哲基尔供电现场。我将其转换为使用Gekyll,它覆盖了Git的时间戳标准page.date模板变量,所以我需要重写与前事宣布page.original_date值的日期只是旧帖子。使用“或”在液体可选模板变量

在我的模板,我希望能够做到这一点:

<span class="date">{% page.original_date or page.date | date: "%B %-d, %Y" }}</span> 

这似乎并没有工作,所以我这样做:

<span class="date"> 
{% if page.original_date %} 
    {{ page.original_date | date: "%B %-d, %Y" }} 
{% else %} 
    {{ page.date | date: "%B %-d, %Y" }} 
{% endif %} 
</span> 

这不是这是一件大事,但却很麻烦,无法找到更好的解决方案。 Liquid中的逻辑是否允许像我第一次尝试那样的后备变量?

回答

2

{% page.original_date or page.date | date: "%B %-d, %Y" }}逻辑是不正确的给我摆在首位。

or运营商是液体绝对支持的,但它是执行逻辑或像其他正常的编程语言中的条件或运算符。

但是,你想做什么是后备的事情,就像三元运算符。

例如,类似于C#的?? Operator?: Operator

{% page.original_date ?? page.date | date: "%B %-d, %Y" }} 
{% page.original_date ? page.original_date : page.date | date: "%B %-d, %Y" }} 

不幸的是,我不认为它存在于液体。在Liquid的问题跟踪器上查看Ternary operator support isssue

+2

谢谢,这是非常有用的!我想在Javascript中,你可能会说“体重=体重|| 180”的情况下,它不是一个函数或东西定义的条款。干杯。 –

+0

@ChrisWilson:不用担心。更多阅读':'运营商[这里](http://en.wikipedia.org/wiki/%3F :)。 –

+0

“猫王”操作符... – Gal

1

在寻找一个三元运营商来讲,我觉得这是最简单的语法,你可以使用:

{% assign original_date = page.original_date %} 
{% unless original_date %}{% assign original_date = page.date %}{% endunless %} 
{% unless original_date %}{% assign original_date = date: "%B %-d, %Y" %}{% endunless %} 

不是很可读或简洁,但至少它的工程!