Liquid语法

引用
官方文档

一、基本

1、介绍

liquid 代码可以被分类为对象,标签和过滤代码

对象
对象表示页面中将要显示的内容,对象和变量使用双花括号表示

上面的实例中,liquid指向对象 page.title, 对象中包含文本为 Introduction

标签

标签创建模板的逻辑和控制流,标签使用花括号和百分号表示
标签的使用不会产生其他的文本,即说明在页面中不显示liquid逻辑代码的条件下,我们可以分配变量,创建条件和循环

存在三种类型的标签,控制流标签,迭代型标签,变量赋值型标签

过滤
使用过滤代码可以变更liquid对象的输出内容,过滤包含在一个输出代码,中间使用 |分隔

2、运算

liquid包含了多种逻辑运算符和比较运算符

下面为简单实例和包含多个运算符的例子

包含符号 contains
使用contains可以查询一个字符串中是否存在某个子串

使用contains也可以查询一个字符串数组中,是否包含某个子串

contains只可以查询字符串,不可以查询一个对象列表中,是否存在某个对象

3、真实和虚拟

程序中,在条件语句中,任何返回值为true的对象称为真实,同时,任何在条件语句中,返回值为false的对象称为虚拟,对象的类型可以分为真实和虚拟两类
真实
liquid中的所有值都是真实的,除了nilfalse
下面的列子中,虽然字符串Tobi不是布尔型变量,但是在条件语句中,其值为真实的

所有的字符串,即使是空字符串,都是真实的,下面例子中,如果settings.fp_heading为空,将产生空的HTML标签

虚拟
liquid虚拟值包含 nilfalse

概要
下面的表格表明liquid中的真实和虚拟

4、类型

liquid对象包含了6种类型:
字符串, 数值, 布尔, Nil,数组
使用assigncapture标签初始化liquid变量

字符串string

使用单引号或者双引号声明一个字符串

数值Number
数值类型包含了整型和浮点型数值

布尔型Boolean
布尔型非truefalse, 当声明一个布尔型变量时候,不需要引用符号

Nil
Nil是一个特别的空值,当liquid 代码没有结果时候,将会返回nilnil不是一个字符串类型
在条件语句的if 块中,nil会被看成为虚拟的,在其他liquid标签查询时候,将nil当成虚拟声明

下面的例子中,如果user不存在(实际上,user返回nil),问候的语句将不会输出
标签或者输出值如果返回nil,页面中不会输出内容

数组
数组可以包含任何类型的变量的列表
使用迭代类型标签可以遍历一个数组

可以使用[ ]访问到数组中的任意一个元素,第一个元素的下标是0

初始化数组
liquid语言中无法独立生成一个数组,但是可以使用过滤符号split将一个字符串切分成一个数组

5、变化

liquid是一种灵活安全的语言,可以在不同环境中,比如shopify商店和jekyll 网站中使用。随着时间的变化,Shopify 和 Jekyll 都增加了一些独有的对象,标签和过滤,所以现在最常见的liquid语言分为Liquid,Shopify Liquid 和 Jekyll Liquid

6、空白的使用

在liquid语言中,可以使用连字符-结合{%标签,剥离标签左右的空白
通常,即使liquid代码不会输出文本,当渲染模板中的Html时候,仍然会输出空白行

下面例子中,输出tomato之前会有一个空行

但是如果在liquid语句中添加连字符,可以删除空白行

如果不希望任何liquid语句在渲染后,出现空白行,可以在任何liquid语句中添加连字符

二、标签

1、控制流

控制流标签通过改变程序逻辑,可以改变文本的输出
if 只有当条件语句结果是true的时候,才会执行if块中的代码


unless可以看成是if的对立,只有当后面的条件为false时候,才会执行unless块的代码


上面的代码可以表述为

更多的判断条件可以使用elsifelse,或者可以使用case/when来实现开关式条件语句

2、迭代

迭代标签可以将代码循环执行
forbreakcontinue

limit可以控制迭代循环特定次数

offset可以指定迭代循环的索引初始值

循环范围
定义循环范围,可以使用变量或者固定值定义

reversed可以逆向循环,注意将其和过滤符号reverse区分

循环会按照序列访问一组字符串或者输出值,但是每一个出现cycle,调用周期中,会输出作为参数传递的一个字符串,只有在循环块中才能使用cycle
cycle的使用场景
区分多行中的奇数和偶数行
在最后的产品缩略图应用特殊类于一行中


cycle接收一个称为cycle group的参数,一个模板中需要多个循环块,如果没有为循环组提供名称,
则假设具有相同参数的多个调用是一个组

tablerow
tablerow可以生成一个表格中的一行,但是必须包含在<table>标签中


1行6列

tablerow中使用cols可以定义表格的列

3行2列

同样,使用limit可以指定循环的次数,offset可以指定开始循环的索引值

3、变量

变量标签能创建新的liquid变量
assign可以创建一个新的变量,使用"可以将创建变量保存为一个字符串

capture可以创建一个字符串变量,值为标签中间字符

increment标签可以创建一个数值型变量,每一次声明将会增加变量值,初始值是0
increment声明的变量和assigncapture声明的变量不会产生冲突

decrement的用法同increment,只是其初始值是-1

三、过滤筛选

abs返回数值的绝对值,但一个字符串中只包含数值时候,abs依然起作用


append将会连接两个字符串并且返回连接后的字符串,连接的两个字符串可以是变量

capitalize将字符串中第一个字母大写,字符串中包含多个单词,只会将第一个单词首字母大写


ceil将会取接近比当前数值大或者等于当前数值的整数,在ceil之前,会先将前面的表达式取值

compact可以将数组的空值删除,下面的实例中,我们将site.pages中所有具有特定的分类的pagemap成一个数组,然后使用compact将数组的空值删除

date筛选器可以格式化一个时间,语法同strftime,参数是字符串时候,会先将字符串转化成日期类型,
可以使用now获取当前时间,today获取当前日期

当前值是指模板最近一次生成页面的时间,不是涉及到缓存或者静态站点中将页面呈现给用户的时间

default允许我们指定当返回值为nil, false或者空时候,默认呈现的内容

divided_by可以执行除法运算,参数如果是整数,将会得到小于等于商的最大整数,
参数如果是浮点型小数,将会进行浮点型运算
times表示乘法,一个整型乘以1.0将得到浮点型

plus加法运算

minus可以进行减法运算

modulo取余运算

downcase将字符串中每一个字符小写

escape将一个字符串转义,如此,字符串可以在url中使用

escape_once不会将已经存在的转义字符,进行转义

first将会返回数组中的第一个元素

Paste_Image.png

last返回数组中的最后一个元素

floor返回一个不大于参数的最大整数

join将一个数组中各个元素结合成一个字符串

lstrip将字符串开始和结尾处的所有空白删除,字符串之间的空白不会被删除


map根据一个数组对象中元素的属性,重新生成一个数组
下面的例子中,假设对象site.pages中包含了所有的网站源数据,使用map可以得到所有页面中的分类信息的一个数组

newline_to_br将每一个行中\n转化成HTML中的<br>

prepend在字符串的开端添加特定的字符串

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容