Liquid 有两种标记类型:输出和标签。
- 输出标记(用于输出文本)如下:
{{ '把变量放入匹配的双括号内' }}
- 标签标记(不能输出文本)如下:
{% '把程式放入匹配的单括号+百分比号内' %}
输出
输出语句是位于双括号里的表达式,当模板被渲染时,它被替换为该表达式的值。
这里有一个简单的输出的例子:
Hello {{name}}
Hello {{user.name}}
Hello {{ 'tobi' }}
表达式和变量
表达式是有值的语句。Liquid 模板可以在几个地方使用表达式;最常见的是输出语句,但也可以作为一些标签或过滤器的参数。
Liquid 接受以下几种表达式类型:
- 变量:最基本的一种表达方式就是一个变量的名称。Liquid 的变量命名为像Ruby变量:他们应该由字母数字字符和下划线,应该总是以字母开始,并没有任何一种领先的印记(即,它们看起来像var_name美元,不var_name)。
- 数组或散列访问:如果你有一个表达式(通常是一个变量),其值是一个数组或散列,你可以使用一个单一的值从该数组/散列如下:
- 数组或散列大小:如果你有一个表达式,它的值是一个数组或散列,你可以按照它。大小来解决在原始表达式中的元素的数量,作为一个整数。
- 字符串:字符串必须被双引号或单引号(“我的字符串”或“我的字符串”)包围。没有区别,无论是风格允许变量插值。
- 整数型:不能引用整数。
- 布尔型和 nil:字面的值为真,假和零。
注意,没有办法写文字数组或散列是一个表达式;数组和散列必须传递到模板,或建造成一标签或输出语句。
高级输出:过滤
输出标记可以采取过滤器,它修改输出语句的结果。您可以通过以下语句的主表达式来调用筛选器:
- 管道符号(|)
- 过滤器的名称
- 任选地,一个结(:)和一个逗号分隔的附加参数列表到过滤器。每个额外的参数必须是一个有效的表达式,每个过滤器预先定义它接受的参数和它们必须通过的顺序。
过滤器也可以被链接在一起,通过添加额外的过滤器语句(从另一个管道字符开始)。前一个过滤器的输出将是下一个过滤器的输入。
Hello {{ 'tobi' | upcase }}
Hello tobi has {{ 'tobi' | size }} letters!
Hello {{ '*tobi*' | textilize | upcase }}
Hello {{ 'now' | date: "%Y %h" }}
在引擎盖下,一个过滤器是一个红宝石的方法,需要一个或多个参数,并返回一个值。参数的位置通过过滤器:第一个参数是前管特性的表达,和额外的参数可以通过使用名称:arg1,arg2上面描述的语法。对于更多的实现过滤器,为程序员看液体。
基本过滤
append
– 附加字符串,如 {{ foo | append: ‘bar’ }} #=> “foobar”
capitalize
– 在输入句子中大写大写
ceil
– 将参数向上舍入到最近的整数,例如 {{ 4.6 | ceil }} #=> 5
date
– 格式化日期(语法参考)
default
– 如果变量的值为 null 或空字符串,它将返回指定的值。例如{{ undefined_variable | default: “Default value” }} #=>”Default value”
divided_by
– 整除,例如 {{ 10 | divided_by: 3}} #=> 3
downcase
– 转换字符串到小写
escape_once
– 返回转义HTML的版本而不影响现有逃脱实体
escape
– HTML转义字符串
first
– 获取数组的第一个元素
floor
– 轮数降到最接近的整数,例如{{ 4.6 }} | 楼# = > 4
join
– 在它们之间具有一定的字符的数组的连接元素
last
– 得到数组最后一个元素
lstrip
– 带所有从字符串的开头空格
map
– 在一个给定的属性上映射/收集一个数组
minus
– 负差,例如 {{ 4 | minus:2 }} #=> 2
modulo
– 取模,例如 {{ 3 | modulo:2 }} #=> 1
newline_to_br
– 替换每个换行符( )HTML打破
pluralize
– 多元化收益第二字如果输入不为1,否则返回第一个字如{{ 3 | 多元化:“项目”,“项目”}} # = >“项目”
plus
– 加法。例如 {{ ‘1’ plus:’1’ }} #=> 2, {{ 1 plus:1 }} #=> 2
prepend
– 在-在字符串例如 {{ ‘bar’ | prepend:’foo’ }} #=> ‘foobar’
remove_first
– 除去第一次出现如 {{ ‘barbar’ | remove_first:’bar’ }} #=> ‘bar’
remove
– 删除每个发生如{{“foobarfoobar”|删除:’foo”}} # = >“态度”
replace_first
– 替换第一次出现如{{”式的| replace_first:’bar ‘,’foo”}} # = >“foobar”
replace
– 取代替换发生如{{”取代“| foofoo:’foo ‘,’bar”}} # = >“态度”
reverse
– 反转数组
round
– 圆轮输入到最接近的整数或指定的小数如{{ 2 }} 4.5612 |轮:# = > 4.56
rstrip
– 带所有从一个字符串的末尾的空格
size
– 返回一个数组或字符串的大小
slice
– 切片一个字符串。作为一个偏移量和长度,例如 {{ “hello” | slice::3, 3 }} #=> llo
sort
– 数组排序
split
– 分割字符串在匹配模式,例如 {{ “a~b” | split:”~” }} #=> [‘a’,’b’]
strip_html
– 条HTML字符串
strip_newlines
– 条所有换行符( )从字符串
strip
– 带所有空白字符串的两端
times
– 次乘法如 {{ 5 | times:4 }} #=> 20
truncate
– 截截形串到X字。它还接受第二个参数,将追加到字符串,例如 {{ ‘foobarfoobar’ | truncate: 5, ‘.’ }} #=> ‘foob.’
truncatewords
– 截断字符串到X的话
uniq
– 去除从数组中重复的元素,可以选择使用一个给定的性能测试的唯一性
Upcase
– 转换字符串到大写
url_encode
– URL编码的字符串
标签
标签用于在您的模板中的逻辑。新的标签是非常容易的代码,所以我希望得到许多贡献的标准标签库释放后,这个代码。
这里是当前支持的标签的列表:
assign
– 给变量分配一些值
capture
– 捕获文本到一个变量的块标记
case
– 块标记,它的标准的情况下,当块
comment
– 块标记,注释块中的文本
cycle
– 周期通常是在一个环用来交替之间的值,如颜色或DOM类。
for
– 用于循环
break
– 中断退出一个循环
continue
– 继续跳过余下的代码在循环电流,继续下一个循环
if
– 如果-标准如果/其他块
include
– 包括包含另一个模板;有用的部分
raw
– 暂时禁用标签处理,以避免语法冲突。
unless
– 如果语句的镜像
注释
任何内容,你把 {% comment %}
和 {% endcomment %}
标签变成了一个评论。
We made 1 million dollars {% comment %} in losses {% endcomment %} this year
原始数据
原料临时禁用标签处理。这产生的内容是有用的(例如,胡子,把手)使用冲突的语法。
In Handlebars, {{ this }} will be HTML-escaped, but {{{ that }}} will not.
If / Else
{% if user %}
Hello {{ user.name }}
{% endif %}
# Same as above
{% if user != null %}
Hello {{ user.name }}
{% endif %}
{% if user.name == 'tobi' %}
Hello tobi
{% elsif user.name == 'bob' %}
Hello bob
{% endif %}
{% if user.name == 'tobi' or user.name == 'bob' %}
Hello tobi or bob
{% endif %}
{% if user.name == 'bob' and user.age > 45 %}
Hello old bob
{% endif %}
{% if user.name != 'tobi' %}
Hello non-tobi
{% endif %}
# Same as above
{% unless user.name == 'tobi' %}
Hello non-tobi
{% endunless %}
# Check for the size of an array
{% if user.payments == empty %}
you never paid !
{% endif %}
{% if user.payments.size > 0 %}
you paid !
{% endif %}
{% if user.age > 18 %}
Login here
{% else %}
Sorry, you are too young
{% endif %}
# array = 1,2,3
{% if array contains 2 %}
array includes 2
{% endif %}
# string = 'hello world'
{% if string contains 'hello' %}
string includes 'hello'
{% endif %}
Case 语句
如果你需要很多的条件判断,你可以使用 Case 语句:
{% case condition %}
{% when 1 %}
hit 1
{% when 2 or 3 %}
hit 2 or 3
{% else %}
... else ...
{% endcase %}
示例:
{% case template %}
{% when 'label' %}
// {{ label.title }}
{% when 'product' %}
// {{ product.vendor \| link_to_vendor }} / {{ product.title }}
{% else %}
// {{page_title}}
{% endcase %}