TinyLiquid是一个基于JavaScript,兼容Liquid模板语法的的模板引擎。其具有以下特点:
支持异步本地和异步过滤器
轻松添加自定义标签和自定义过滤器
几乎完全支持液体语法
支持Express3.x框架
高测试覆盖率(92%覆盖率)
下载&安装目前最新版为v0.0.9,可通过以下方式来获取TinyLiquid模块:
通过NPM安装:npminstalltinyliquid
通过git下载:gitclonegit://github.com/leizongmin/tinyliquid.git
在浏览器端使用:
在Express3.x中使用:模块express-liquid
Liquid模板语法Liquid是一个比较优秀的轻量级的模版语言。详见:Liquid官网
基础
Liquid有两种形式的标签,即输出标签和逻辑标签。这两种标签的区别在于:
输出标签:用于处理模版输出值,使用{{}}包围,如下:{{product.title}}
逻辑标签:用于处理模版逻辑,使用{%%}包围,如下:{%ifproduct.price>100%}
输出标签
如下面例子:你好{{name}}你好{{user.name}}你好{{'shopqi'}}
过滤器
输出标签的内容可以通过过滤器来进行格式化操作。例如,我们将‘shop’的转化成大写输出,可使用如下形式的标签{{'shop'|upcase}}
逻辑标签
逻辑标签用于处理模版中的逻辑关系,ShopQi支持如下标签
if/else/unless
用于判断条件,参数为boolean值:
{%ifuser%}Hi{{user.name}}{%endif%}{%ifuser.name=='tobi'%}hitobi{%endif%}{%ifuser.name!='tobi'%}hinon-tobi{%endif%}{%unlessuser.name=='tobi'%}hinon-tobi{%endunless%}{%ifuser.name=='tobi'oruser.name=='marc'%}himarcortobi{%endif%}{%ifuser.name=='tobi'anduser.last_name=='scottish'%}hitobiscottish{%endif%}{%ifuser.namecontains'tobi'%}hitobias{%endif%}{%ifuser.creditcard==nil%}poorsob{%endif%}{%ifuser.payments==empty%}youhaven'tpaidyet!{%endif%}{%ifuser.age>18%}Loginhere{%else%}Sorry,youaretooyoung{%endif%}{%unlessuser.age>18%}Sorry,youaretooyoung{%else%}Loginhere{%endunless%}case语句块
如果一个情况存在多个分支的情况,可使用case来处理:
{%casecondition%}{%when1%}hit1{%when2%}hit2{%else%}hitelse{%endcase%}cycle标签
通常情况下,我们有时候需要循环交替的执行某些任务。Liquid支持这种周期性的执行任务的标签,如下:
{%cycle'one','two','three'%}{%cycle'one','two','three'%}{%cycle'one','two','three'%}{%cycle'one','two','three'%}结果为:onetwothreeone如果,我们使用
for标签
liquid支持集合数据循环,如:
{%foritemincollection%}{{item}}{%endfor%}同样还支持如下一些辅助方法:forloop.length#=>整个循环的总次数forloop.index#=>当前循环的下标forloop.index0#=>当前循环的下标(从0开始算)forloop.rindex#=>计算还剩下多少次数未执行forloop.rindex0#=>计算还剩下多少次数未执行(从0开始计算)forloop.first#=>是否是集合的第一次循环forloop.last#=>是否是集合的最后一次循环
for循环还支持一些属性limit,offset,其中,limit用于限制集合循环次数,offset用于设置开始的下标,如:
#array=[1,2,3,4,5,6]{%foriteminarraylimit:2offset:2%}{{item}}{%endfor%}#resultsin3,4同样,for里面还支持范围的定义,即..用来取得范围,如:#ifitem.quantityis4...{%foriin(1..item.quantity)%}{{i}}{%endfor%}#resultsin1,2,3,4Tables
Liquid同样支持创建表格,创建行和列
{%tablerowiteminitemscols:3limit:12%}{{item.variable}}{%endtablerow%}变量赋值assign
当我们需要为变量赋值时,我们可以使用assign来进行定义我们需要的变量:
{%assignname='freestyle'%}{%fortincollections.tags%}{%ift==name%}Freestyle!
{%endif%}{%endfor%}
评论