Liquid 设计师

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 %}
赞(0) 打赏
取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

    暂无评论...