2013-07-31 47 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 %} 

不是很可讀或簡潔,但至少它的工程!