liquid用法笔记
来源:互联网 发布:淘宝卖家关闭订单 编辑:程序博客网 时间:2024/05/23 12:31
在折腾github
上博客的时候, 遇到一些jekyll
, 正确来说应该是Liquid
用法的问题。
于是一系列搜索之后终于找到了比较容易理解的文档>>
关于Liquid
的语法使用,看完一遍,就能愉快的在github
上继续折腾博客了。有些看不大懂,没翻译,都是自己的见解,有些根本用不上就不解释了。
Liquid
有两种标记类型:Output
和 Tag
.
Output
标记,用于输出文本,格式采用 {{ 两个尖括号包围 }}Tag
标记,用于执行命令或者处理 格式: {% 一对尖括号内一对百分号 %}
我的见解是: 类比jsp
格式,Output
相当于 <%=variable>
,即输出变量值;Tag
相当于<% int i=2 ;%>
,一种数据处理,但不做输出效果.
Output
例子:
Hello {{name}}Hello {{user.name}}Hello {{ 'tobi' }}
高级Output: Filters//过滤器
Filters过滤器,数据处理的操作方法.
过滤器的第一个参数,往往是过滤器运算符'|'左边的Output
,而过滤器的返回值,是通过过滤运算符右边的操作所得到的,过滤器可以叠加操作,最终得到该Output
所要输出的值。(这段我见解,翻译不过来 = =)
如下:
Hello {{ 'tobi' | upcase }}Hello tobi has {{ 'tobi' | size }} letters!Hello {{ 'now' | date: "%Y %h" }}
标准过滤器
date
- 格式化时间capitalize
- 输出字符串,字符串(句子)首字母大写 e.g. 假设tb为"hello world"{{ tb|capitalize }} #=> 'Hello world'
downcase
- 转换小写upcase
- 转换大写first
- 获取数组的第一个元素last
- 获取数组的最后一个元素join
- 用指定的字符拼接数组元素sort
- 排序数组map
- map/collect an array on a given propertysize
- 返回数组大小escape
- 转移字符串escape_once
- returns an escaped version of html without affecting existing escaped entitiesstrip_html
- 除去字符串中的html标签?strip_newlines
- 除去字符串中的回车?newline_to_br
- 将所有的回车"\n" 转换成"<br />"?replace
- 替换所有匹配内容 e.g.{{ 'forfor' | replace:'for', 'bar' }} #=> 'barbar'
replace_first
- 替换第一个匹配内容 e.g.{{ 'forfor' | replace_first:'for', 'bar' }} #=> 'barfor'
remove
- 移除所有匹配内容 e.g.{{ 'forbarforbar' | remove:'for'}} #=> 'barbar'
remove_first
- 移除第一个匹配内容 e.g.{{ 'forbarforbar' | remove_first:'for'}} #=> 'barforbar'
truncate
- truncate a string down to x characterstruncatewords
- truncate a string down to x wordsprepend
- 在字符串前面加上内容 e.g.{{'bar'|prepend:'far'}} #=> 'farbar'
append
- 字符串后面加上内容 e.g.{{'bar'|append: 'foo'}}#=> 'barfoo'
minus
- 减法 e.g.{{4|minus:2}} #=>2
plus
- 加法 e.g.{{ 4|plus:2}} #=> 6
times
- 乘法 e.g.{{10|times:2}} #=> 20
divided_by
- 除法 e.g.{{ 10 | divided_by:2}} #=> 5
split
- 分割字符串 e.g.{{ "a~b" | split:'~'}} #=> ['a','b']
modulo
- 取余 e.g.{{ 3 | modulo:2 }} #=> 1
Tags
Tag
在模板中起到处理逻辑的作用。
下面是目前支持的Tag
:
assign
- 定义变量 e.g.{% assign tt = 1 %}
定义了变量tt
数值为1capture
-Block tag
为变量赋值 e.g.{% capture dont %}{{ tt }}{% endcapture %}
将tt
的值赋给dont
case
-Block tag
its the standard case...when blockcomment
-Block tag
注释cycle
- Cycle is usually used within a loop to alternate between values, like colors or DOM classes.for
- for循环block
if
- 判断block
include
- 引入模板raw
- 转义内容tag
e.g.{% raw %}{{ this }}{% endraw%} #=> '{{ this }}'
unless
- Mirror of if statement
Comments
注释隐藏
We made 1 million dollars {% comment %} in losses {% endcomment %} this year
Raw
当包裹内容出现冲突语法时,不会执行其处理。
{% raw %} In Handlebars, {{ this }} will be HTML-escaped, but {{{ that }}} will not.{% endraw %}
if/else
e.g.
{% 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 Statement
多条件
{% 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 %}
Cycle
循环列举
{% cycle 'one', 'two', 'three' %}{% cycle 'one', 'two', 'three' %}{% cycle 'one', 'two', 'three' %}{% cycle 'one', 'two', 'three' %}
结果:
onetwothreeone
可以通过命名分组:
{% cycle 'group 1': 'one', 'two', 'three' %}{% cycle 'group 1': 'one', 'two', 'three' %}{% cycle 'group 2': 'one', 'two', 'three' %}{% cycle 'group 2': 'one', 'two', 'three' %}
结果:
onetwoonetwo
for 循环
循环集合:
{% for item in array %} {{ item }}{% endfor %}
遍历hash
时:item[0]
包含键,item[1]
包含值
{% for item in hash %} {{ item[0] }}: {{ item[1] }}{% endfor %}
for循环时,下列变量可以辅助使用:
forloop.length # => length of the entire for loopforloop.index # => index of the current iterationforloop.index0 # => index of the current iteration (zero based)forloop.rindex # => how many items are still left?forloop.rindex0 # => how many items are still left? (zero based)forloop.first # => is this the first iteration?forloop.last # => is this the last iteration?
还有一些变量可以用来处理循环时选择性处理:limit:int
- 限制遍历个数offset:int
- 从第n个数开始遍历
# array = [1,2,3,4,5,6]{% for item in array limit:2 offset:2 %} {{ item }}{% endfor %}# results in 3,4
反序遍历:
{% for item in collection reversed %} {{item}} {% endfor %}
除了遍历集合,还可以定义一个范围的数字来遍历:
# if item.quantity is 4...{% for i in (1..item.quantity) %} {{ i }}{% endfor %}# results in 1,2,3,4
变量赋值
赋值变量:
{% assign name = 'freestyle' %}{% for t in collections.tags %}{% if t == name %} <p>Freestyle!</p>{% endif %}{% endfor %}
还可以赋值布尔值:
{% assign freestyle = false %}{% for t in collections.tags %}{% if t == 'freestyle' %} {% assign freestyle = true %}{% endif %}{% endfor %}{% if freestyle %} <p>Freestyle!</p>{% endif %}
赋值处理过的数据:可以用capture
{% capture attribute_name %}{{ item.title | handleize }}-{{ i }}-color{% endcapture %} <label for="{{ attribute_name }}">Color:</label> <select name="attributes[{{ attribute_name }}]" id="{{ attribute_name }}"> <option value="red">Red</option> <option value="green">Green</option> <option value="blue">Blue</option> </select>
- liquid用法笔记
- liquid crystal display-液晶显示器
- LCM-------Liquid Crystil Module
- Jekyll With Liquid
- 开源模板语言Liquid
- Avid Liquid教程/输出文件的技巧
- Announces a Breakthrough By Achieving Liquid Steri
- 交叉编译liquid-dsp-1.2.0
- Which Layout? Static, Liquid, Adaptive, or Responsive
- replica character liquid crystal display control
- replica character liquid crystal display control
- replica character liquid crystal display control
- replica character liquid crystal display control
- replica character liquid crystal display control
- replica character liquid crystal display control
- replica character liquid crystal display control
- CSS+DIV 布局 (Liquid-Elastic hybrid layout)
- 《Physically guided liquid surface modeling from videos》TOG2009
- Ubuntu挂载ISO文件
- HDOJ1159
- SharePoint显示来自相同网站集另一个站点的列表 Display SharePoint list from another site
- OC语言—Id万能指针
- id to load is required for loading 原因?
- liquid用法笔记
- java基础学习心得
- Android自定义View的实现方法,带你一步步深入了解View(四)
- 关于推荐免试生申请系统中“本人自述”框不能粘贴问题的解决办法
- OC语言—property与synthesiz
- UVA839
- 和特色和天天天色呵呵
- 程序员工具集
- 判断设备是否是 iphone5