Shopify专题
Liquid 语法说明
00 分钟
2022-10-11
2023-9-11
type
status
date
slug
summary
tags
category
icon
password

变量标签

变量标签用来创建一个 liquid 变量。

assign

创建一个命名变量。
 
capture
捕获开始和结束标记内的字符串,并将其赋值给一个变量。 使用capture创建的变量存储为字符串。
使用capture,您可以混合使用 assign 创建的其他变量来创建复杂字符串。
输出:
I am 35 and my favorite food is pizza.
 
increment
创建一个新的数字变量,并在每次调用该变量的增量时将其值增加1。 计数器的初始值为0。
输出:0 1 2
使用 increment 创建的变量与使用 assign 或 capture 创建的变量是分开的。
输出:0 1 2 10
 

decrement

创建一个新的数字变量,并在每次对该变量进行递减调用时将其值减少1。 计数器的初始值为-1。
输出:-1 -2 -3
 

流程控制标签

if
 
unless
 
else / elsif
 
case / when
case/when 类似于 switch 语句,default 条件改为 else 。
 
for
 
for/else
当循环对象的长度为0时,执行 else 语句。
 
break
 
continue
 

for循环参数

使用 offset 定义偏移个数:
使用 limit 定义限制个数:
组合使用 offset 和 limit:
定义循环的数字范围,可以使用字面量或变量:
 
使用 reversed 倒序遍历数组:
reversed 和 offset, limit共用(reversed需要放在前面;结果为先获取数组元素再翻转):
 
cycle
循环遍历一组字符串,并按照它们作为参数传递的顺序输出它们。每次调用 cycle 时,都会输出作为参数传递的下一个字符串。
cycle 必须在for循环块中使用。
cycle常用于:
  • 对表中的行应用奇数/偶数类
  • 对一行中的最后一个产品缩略图应用唯一类
cycle 接受一个 cycle 组参数,用于在一个模板中需要多个cycle块。 如果没有为循环组提供名称,则假定具有相同参数的多个调用为一个组。例如:
如果要想每一个for循环都重新开始迭 cycle ,需要给每个 cycle 起个组名:
 

tablerow

用于生成 tr 和 td 标签,详情查看官网 https://shopify.dev/api/liquid/tags/iteration-tags#tablerow
 

主题相关标签

comment 注释
开始和结束标签内的任何文本和Liquid代码都不会执行。
输出:
My name is Wilson Abercrombie.
 

echo 输出

echo和 {{ }} 的功能一样,主要用于 liquid 标签内。
 
输出:
<img src="//cdn.shopify.com/s/files/1/0159/3350/products/red_shirt.jpg?v=1398706734" alt="Red Shirt Small" width="500" />
 

form 表单

form标签会创建 form 元素和必要的 input 元素,你再补上其他的表单元素就构成了一个完成的表单。form 标签有众多的类型和参数。
下面举个登录表单的例子,其他表单类似:
生成:
官网完整表单标签:https://shopify.dev/api/liquid/
 

layout 布局

在模板文件的顶部定义模板的布局文件,如果没有定义,默认的布局文件为 theme.liquid。如果模板文件为json文件,则使用 layout 属性定义布局文件:
类似于json类型的模板文件可以通过设置 layout 属性为 false 而不使用布局文件,在 liquid 类型的模板文件中,可以也可以通过指定 'none' 而不使用布局文件:
 

liquid

liquid 标签能让你在一组分隔符写多个标签。在liquid标签内可以使用 echo 输出内容
 

paginate 分页

paginate 用来实现分页效果,paginate 和 for 循环一起可以将内容分割为多个页面。
paginate 标签并不会自动生成页码,需要通过 paginate 标签内部的 paginate 对象来自定义页码。
上面案例中,paginate 的参数 by 用来定义每页显示多少条数据。
 

raw 原生的

raw 标签内的代码不会被 liquid 解析,而是直接输出来。
输出:
{{ 5 | plus: 6 }} equals 11.

render

渲染 snippet 文件夹下的代码段,类似于 php 的 include 和 require。
代码段作用域和父模板代码作用域是隔离的,如果代码段需要访问父模板作用域变量,需要从父模板传递进去。
with...as... 参数,如果只传递一个变量,可以使用 with...as... 参数:
接着就能在"snippet-name.liquid"文件中使用"str2"变量。
 
for...as... 参数,如果要循环渲染多个代码段,除了在for循环中嵌套 render 标签,还可以使用 render 标签的for...as参数:
如上,产品的每一个 variant 都会渲染一次"variant"代码段。
注意:有一个和 render 类似的标签 include,不过已被废弃,不建议使用,因为 include 进来的代码段和父模板作用域是不隔离的,效率低下且不好理解。
 
 

section

渲染一个 sections 文件夹中的分区。
生成:
模板的分区并不一定要在 JSON 类型的模板文件中定义,通过 section 标签也可以定义。
 

style 样式标签

Liquid style 标签渲染一个带有 data-shopify 属性的 HTML <style>标签。 将颜色设置放置在 style 标签中,允许您在不刷新整个页面的情况下从主题编辑器进行实时颜色更新。
 

schema 标签

schema 标签放置在 section 文件任意位置中用来定义 section 的各种属性。一个 section 文件只能有一个 schema 标签,且不能嵌套。
schema 标签内容是一个json对象,json对象各个属性参考官网:Section schema (shopify.dev)