Liquid 語(yǔ)言基礎(chǔ)

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

除了 nilfalse 之外族淮,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 中只有 nilfalse 是 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)注明出處允华。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末圈浇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子例获,更是在濱河造成了極大的恐慌汉额,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榨汤,死亡現(xiàn)場(chǎng)離奇詭異蠕搜,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)收壕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門妓灌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蜜宪,你說(shuō)我怎么就攤上這事虫埂。” “怎么了圃验?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵掉伏,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我澳窑,道長(zhǎng)斧散,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任摊聋,我火速辦了婚禮鸡捐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘麻裁。我一直安慰自己箍镜,他們只是感情好源祈,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著色迂,像睡著了一般香缺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上脚草,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天赫悄,我揣著相機(jī)與錄音,去河邊找鬼馏慨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛姑隅,可吹牛的內(nèi)容都是我干的写隶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼讲仰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼慕趴!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起鄙陡,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤冕房,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后趁矾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耙册,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年毫捣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了详拙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蔓同,死狀恐怖饶辙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情斑粱,我是刑警寧澤弃揽,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站则北,受9級(jí)特大地震影響矿微,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咒锻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一冷冗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惑艇,春花似錦蒿辙、人聲如沸拇泛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)俺叭。三九已至,卻和暖如春泰偿,著一層夾襖步出監(jiān)牢的瞬間熄守,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工耗跛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留裕照,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓调塌,卻偏偏與公主長(zhǎng)得像晋南,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子羔砾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容