引用
官方文档
一、基本
1、介绍
liquid 代码可以被分类为对象,标签和过滤代码
对象
对象表示页面中将要显示的内容,对象和变量使用双花括号表示
上面的实例中,liquid指向对象 page.title
, 对象中包含文本为 Introduction
标签
标签创建模板的逻辑和控制流,标签使用花括号和百分号表示
标签的使用不会产生其他的文本,即说明在页面中不显示liquid逻辑代码的条件下,我们可以分配变量,创建条件和循环
存在三种类型的标签,控制流标签,迭代型标签,变量赋值型标签
过滤
使用过滤代码可以变更liquid对象的输出内容,过滤包含在一个输出代码,中间使用 |
分隔
2、运算
liquid包含了多种逻辑运算符和比较运算符
下面为简单实例和包含多个运算符的例子
包含符号 contains
使用contains
可以查询一个字符串中是否存在某个子串
使用contains
也可以查询一个字符串数组中,是否包含某个子串
contains
只可以查询字符串,不可以查询一个对象列表中,是否存在某个对象
3、真实和虚拟
程序中,在条件语句中,任何返回值为true
的对象称为真实,同时,任何在条件语句中,返回值为false
的对象称为虚拟,对象的类型可以分为真实和虚拟两类
真实
liquid中的所有值都是真实的,除了nil
和false
下面的列子中,虽然字符串Tobi
不是布尔型变量,但是在条件语句中,其值为真实的
所有的字符串,即使是空字符串,都是真实的,下面例子中,如果settings.fp_heading
为空,将产生空的HTML标签
虚拟
liquid虚拟值包含 nil
和false
概要
下面的表格表明liquid中的真实和虚拟
4、类型
liquid对象包含了6种类型:
字符串, 数值, 布尔, Nil
,数组
使用assign
和capture
标签初始化liquid变量
字符串string
使用单引号或者双引号声明一个字符串
数值Number
数值类型包含了整型和浮点型数值
布尔型Boolean
布尔型非true
即false
, 当声明一个布尔型变量时候,不需要引用符号
Nil
Nil
是一个特别的空值,当liquid 代码没有结果时候,将会返回nil
,nil
不是一个字符串类型
在条件语句的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
块的代码
上面的代码可以表述为
更多的判断条件可以使用elsif
,else
,或者可以使用case/when
来实现开关式条件语句
2、迭代
迭代标签可以将代码循环执行
for
,break
,continue
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
声明的变量和assign
,capture
声明的变量不会产生冲突
decrement
的用法同increment
,只是其初始值是-1
三、过滤筛选
abs
返回数值的绝对值,但一个字符串中只包含数值时候,abs
依然起作用
append
将会连接两个字符串并且返回连接后的字符串,连接的两个字符串可以是变量
capitalize
将字符串中第一个字母大写,字符串中包含多个单词,只会将第一个单词首字母大写
ceil
将会取接近比当前数值大或者等于当前数值的整数,在ceil
之前,会先将前面的表达式取值
compact
可以将数组的空值删除,下面的实例中,我们将site.pages
中所有具有特定的分类的page
map成一个数组,然后使用compact
将数组的空值删除
date
筛选器可以格式化一个时间,语法同strftime
,参数是字符串时候,会先将字符串转化成日期类型,
可以使用now
获取当前时间,today
获取当前日期
当前值是指模板最近一次生成页面的时间,不是涉及到缓存或者静态站点中将页面呈现给用户的时间
default
允许我们指定当返回值为nil
, false
或者空时候,默认呈现的内容
divided_by
可以执行除法运算,参数如果是整数,将会得到小于等于商的最大整数,
参数如果是浮点型小数,将会进行浮点型运算
times
表示乘法,一个整型乘以1.0
将得到浮点型
plus
加法运算
minus
可以进行减法运算
modulo
取余运算
downcase
将字符串中每一个字符小写
escape
将一个字符串转义,如此,字符串可以在url中使用
escape_once
不会将已经存在的转义字符,进行转义
first
将会返回数组中的第一个元素
last
返回数组中的最后一个元素
floor
返回一个不大于参数的最大整数
join
将一个数组中各个元素结合成一个字符串
lstrip
将字符串开始和结尾处的所有空白删除,字符串之间的空白不会被删除
map
根据一个数组对象中元素的属性,重新生成一个数组下面的例子中,假设对象
site.pages
中包含了所有的网站源数据,使用map
可以得到所有页面中的分类信息的一个数组
newline_to_br
将每一个行中\n
转化成HTML中的<br>
prepend
在字符串的开端添加特定的字符串