Liquid
一門為靈活的 web 應(yīng)用而設(shè)計(jì)的面向客戶的模板語(yǔ)言请敦。
簡(jiǎn)介
什么是 Liquid 肆饶?
Liquid 是一門用 Ruby 編寫的開源模板語(yǔ)言改衩,由 Shopify 所開發(fā)。它是 Shopify 主題 的骨架驯镊,被用來(lái)讀取店面的動(dòng)態(tài)內(nèi)容葫督。
從 2006 年 6 月份開始,Liquid 被用作生產(chǎn)工具板惑,到現(xiàn)在已經(jīng)有很多其他的托管的 web 應(yīng)用在使用 Liquid橄镜。
誰(shuí)在使用 ?
概覽
Liquid 代碼由 對(duì)象冯乘,標(biāo)簽 和 過(guò)濾器 組成洽胶。
對(duì)象
對(duì)象 告訴 Liquid 將在頁(yè)面的什么位置顯示內(nèi)容。對(duì)象和變量名包含在雙重花括號(hào)中: {{
和 }}
裆馒。
輸入:
{{ page.title }}
輸出:
Introduction
在這個(gè)例子中姊氓,Liquid 渲染了名為 page.title
的對(duì)象,其包含了文字 Introduction
喷好。
標(biāo)簽
標(biāo)簽 為模板提供邏輯和流程控制翔横。用花括號(hào)和百分號(hào)來(lái)標(biāo)記 {%
和 %}
。
在標(biāo)簽中的標(biāo)記不會(huì)產(chǎn)生任何的可見文字梗搅。也就是說(shuō)你可以為變量賦值棕孙,創(chuàng)建條件語(yǔ)句或者循環(huán)條件,但是這些 Liquid 邏輯在生成的頁(yè)面中是不可見的些膨。
輸入:
{% if %}
Hello {{ user.name }}
{% endif %}
輸出:
Hello Adam!
標(biāo)簽可以分為 3 類:
它們的細(xì)節(jié)詳見對(duì)應(yīng)章節(jié)
過(guò)濾器
過(guò)濾器 可以改變 Lquid 對(duì)象的輸出蟀俊。被用在輸出中并用 |
分隔。類似于 Linux 的管道订雾。
輸入:
{{ "/my/fancy/url" | append: ".html" }}
運(yùn)算符
Liquid 引入了許多的邏輯和比肩運(yùn)算符肢预。
基本運(yùn)算符
== |
相等 |
!= |
不等 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
or |
邏輯或 |
and |
邏輯與 |
實(shí)例:
{% if product.title == "Awesome Shoes" %}
These shoes are awesome!
{% endif %}
你也可以在一個(gè)標(biāo)簽內(nèi)使用多個(gè)運(yùn)算符:
實(shí)例:
{% if product.type == "Shirt" or product.type == "Shoes" %}
This is a shirt or a pair of shoes.
{% endif %}
contains
contains
運(yùn)算檢查一個(gè)字符串是否含有特定的子串。
實(shí)例:
{% if product.title contains 'Pack' %}
This product's title contains the word Pack.
{% endif %}
contains
也可以檢查一個(gè)字符串?dāng)?shù)組中是否包含某個(gè)字符串洼哎。
實(shí)例:
{% if product.tags contains 'Hello' %}
This product has been tagged with 'Hello'.
{% endif %}
contains
只能作用于字符串烫映。不可以用于檢查其他對(duì)象。
Truthy 和 Falsy
在編程中噩峦,任何返回 true
的條件表達(dá)式被稱作 truthy锭沟,任何返回 false
的條件表達(dá)式被稱為 falsy
。任何類型的對(duì)象都可以被表達(dá)成 truethy 或者 falsy识补。
Truthy
除了 nil
和 false
之外族淮,Liquid 中的任何值都是 Trusy。
在下面的例子中凭涂,字符串 "Tobi" 不是布爾類型祝辣,但是在條件表達(dá)式中它為 truthy:
實(shí)例:
{% assign tobi = "Tobi" %}
{% if tobi %}
this condition will always be true.
{% endif %}
即使在 字符串 為空的時(shí)候,也是 truthy切油。在下面的例子中蝙斜,如果 setting.fp_heading
為空的話,將會(huì)生成空的 HTML 標(biāo)簽:
實(shí)例:
{% if setting.fp_heading %}
<h1>{{ setting.fp_heading }}</h1>
{% endif %}
輸出:
<h1></h1>
Falsy
在 Liquid 中只有 nil
和 false
是 falsy澎胡。
總結(jié)
下表總結(jié)了 Liquid 中的 truthy 和 falsy孕荠。
truethy | falsy | ||
---|---|---|---|
true | ? | ||
false | ? | ||
nil | ? | ||
string | ? | ||
empty string | ? | ||
0 | ? | ||
integer | ? | ||
float | ? | ||
array | ? | ||
empty array | ? | ||
page | ? | ||
EmptyDrop | ? |
數(shù)據(jù)類型
Liquid 有以下 5 種數(shù)據(jù)類型:
你可以使用 assign 或者 capture 標(biāo)簽對(duì) Liquid 的變量進(jìn)行賦值。
字符串
將變量值包裹在單引號(hào)或者雙引號(hào)中來(lái)聲明一個(gè)字符串:
實(shí)例:
{% assign my_string = "Hello World!" %}
數(shù)字
數(shù)字包含了浮點(diǎn)數(shù)和整數(shù):
實(shí)例:
{% assign my_int = 25 %}
{% assign my_float = 39.756 %}
布爾值
布爾值不是 true
就是 false
攻谁。在聲明的時(shí)候不需要添加引號(hào):
實(shí)例:
{% assign foo = true %}
{% assign bar = false %}
Nil
Nil 是一個(gè)特殊的空值稚伍,在 Liquid 代碼沒(méi)有結(jié)果產(chǎn)生時(shí)會(huì)返回 Nil。注意這并 不是 一個(gè)值為 Nil
的字符串巢株。
在 if
語(yǔ)句或者其他的可判斷真假的 Liquid 標(biāo)簽中槐瑞,Nil 被當(dāng)做 false。
在以下實(shí)例中阁苞,如果用戶不存在 (即 user
返回 nil
)困檩,Liquid 將不會(huì)打印出問(wèn)候語(yǔ):
實(shí)例:
{% if user %}
Hello {{ user.name }}!
{% endif %}
返回 Nil
的標(biāo)簽或者輸出在頁(yè)面中不會(huì)打印任何東西。
輸入:
The current user is {{ user.name }}
輸出:
The current user is
數(shù)組
數(shù)組可以承載一組任意類型的變量那槽。
遍歷數(shù)組
要訪問(wèn)數(shù)組中的每一個(gè)元素悼沿,你可以使用 迭代標(biāo)簽 來(lái)遍歷。
輸入:
<!-- if site.users = "Tobi", "Laura", "Tetsuro", "Adam" -->
{% for user in site.users %}
{{ user }}
{% endfor %}
輸出:
Tobi Laura Tetsuro Adam
訪問(wèn)數(shù)組中特定的元素
你可以使用方括號(hào) ([
]
) 來(lái)訪問(wèn)數(shù)組中特定的元素骚灸。數(shù)組的索引從 0 開始糟趾。
輸入:
<!-- if site.users = "Tobi", "Laura", "Tetsuro", "Adam" -->
{{ site.users[0] }}
{{ site.users[1] }}
{{ site.users[3] }}
輸出:
Tobi
Laura
Adam
初始化數(shù)組
Liquid 本身無(wú)法實(shí)現(xiàn)數(shù)組的初始化。
然而,你可以使用 split 過(guò)濾器將一個(gè)字符串分割成由子串組成的數(shù)組义郑。
空行輸出控制
在 Liquid 中蝶柿,你可以在你的標(biāo)簽中使用連字符 {{-
,-}}
非驮,{%-
和 -%}
來(lái)限制 Liquid 語(yǔ)句輸出空行交汤。
正常情況下,即使是不輸出文字的 Liquid 語(yǔ)句劫笙,在你的 Liquid 模板生成的 HTML 中的仍會(huì)輸出一個(gè)空行:
輸入:
{% assign my_variable = "tomato" %}
{{ my_variable }}
注意,在輸出的 "tomato" 的上方有一個(gè)空行:
輸出:
tomato
在 assign
標(biāo)簽內(nèi)插入連字符填大,可以不輸出空行:
輸入:
{%- assign my_variable = "tomato" -%}
輸出:
tomato
如果你希望所有的 Liquid 標(biāo)簽都不輸出空行戒洼,可以在每一個(gè)標(biāo)簽兩邊插入連字符({%-
和 -%}
):
輸入:
{% assign username = "John G. Ghalmers-Smith" %}
{% if username and username.size > 10 %}
wow, {{ username }}, you have a long name!
{% else %}
Hello there!
{% endif %}
輸出:
Wow, John G. Chalmers-Smith, you have a long name!
輸入:
{%- assign username = "John G. Chalmers-Smith" -%}
{%- if username and username.size > 10 -%}
Wow, {{ username }}, you have a long name!
{%- else -%}
Hello there!
{%- endif -%}
輸出:
Wow, John G. Chalmers-Smith, you have a long name!
文章來(lái)自我的 個(gè)人博客,轉(zhuǎn)載請(qǐng)注明出處允华。