Liquid 语法支持的字段
- 邮件
- 推送
- 短信
- 应用内消息
- 实时活动
- 主题、回复和预览文本
- 消息正文
- HTML 块中的图片替换。示例:
<img src="{{image_url}}"/>
- 按钮块操作,如 URL、邮件发送和其他字段。
基本语法
Liquid 使用两种主要的语法结构:- 输出标签:
{{ ... }}
- 显示变量或对象中的数据。 - 逻辑标签:
{% ... %}
- 执行条件语句或循环。
数据源
来源 | 示例 | 设置方式 |
---|---|---|
标签 | {{ first_name }} | OneSignal SDK 或 API(tags ) |
属性 | {{ subscription.email }} | 系统管理(email、external_id、language) |
自定义数据 | {{ message.custom_data.key }} | 在创建消息的 API 调用中传递 |
有关数据源的更多信息,请参见消息个性化。
条件语句
运算符
==
,!=
,>
,<
,>=
,<=
and
,or
contains
(string or array)
运算从右到左执行。不支持括号。
liquid
if
、elsif
、else
liquid
unless
liquid
过滤器
使用{{ variable | filter }}
应用过滤器来调整数据显示方式。
default
如果属性为空或不存在,则分配默认值。
liquid
date
date 过滤器将时间戳转换为另一种日期格式。此语法的格式与 strftime 相同。输入使用与 Ruby 的 Time.parse 相同的格式。
使用标签将日期设置为以秒为单位的 unix 时间戳。这允许同时使用 liquid 语法个性化和时间运算符进行细分。例如,标签可能是:bill_due : 1687968776
liquid
Result
liquid
Result
liquid
Result
now
(或 today
)与日期过滤器一起传递。
liquid
Result
当前时间将根据消息发送给接收者的时间在消息中呈现。如果您正在测试消息,
您将看到当前时间为测试消息发送的时间。
capitalize
此过滤器将字符串的第一个字符大写,并将其余字符转换为小写。
liquid
Result
round
此过滤器将数字四舍五入到最接近的整数,或者如果传递了一个数字作为参数,则四舍五入到指定的小数位数。
liquid
Result
pluralize
此过滤器根据给定的数字返回字符串的单数或复数形式。数字必须是整数,可以作为字符串提供。必须同时提供字符串的单数和复数形式。
liquid
Result
迭代
for
循环
重复执行代码块。有关 for
循环中可用属性的完整列表,请参阅 for
循环对象。
liquid
Request Body
Results
虽然功能强大且灵活,但在某些罕见情况下,在 Liquid 语法中使用
for
循环可能
导致通知传递性能不佳。请注意您对 for
循环的使用。另请注意,我们禁止在
几个推送频道字段中使用 for
循环:contents
、headings
、subtitle
、
apns_alert
和 url
limit
和 offset
将循环限制为指定的迭代次数。例如,如果您只想在消息中显示 4 个产品,您可以使用限制和偏移量来指定显示的产品数量。
Data
liquid
Result
Data
liquid
where
创建一个数组,仅包含具有给定属性值的对象,或默认情况下任何真值。
在此示例中,假设您有一个产品列表,并且想要单独显示您的厨房产品。使用 where
,您可以创建一个仅包含 type
为 kitchen
的产品的数组。
Data
liquid
Result
字符串操作
有时您可能有包含字符串的数据标签,其格式不适合直接向用户显示,您可能需要操作字符串来调整格式。下面是可用于调整字符串的 liquid 语法命令表。您可以在标签和直接写入消息的字符串上使用字符串操作。命令 | 描述 | 示例 | 示例输出 |
---|---|---|---|
replace | 用另一个字符串替换子字符串。 | {{ 'hello world' | replace: 'world', 'there' }} | hello there |
capitalize | 将字符串的第一个字母大写。 | {{ 'hello' | capitalize }} | Hello |
upcase | 将字符串转换为大写。 | {{ 'hello' | upcase }} | HELLO |
downcase | 将字符串转换为小写。 | {{ 'HELLO' | downcase }} | hello |
strip | 从字符串中删除前导和尾随空白。 | {{ ' hello ' | strip }} | hello |
strip_html | 从字符串中删除所有 HTML 标签。 | {{ '<p>hello</p>' | strip_html }} | hello |
truncate | 将字符串缩短到指定长度,如果需要则添加省略号(…)。 | {{ 'This is a long sentence' | truncate: 10 }} | This is a… |
truncatewords | 在一定数量的单词后截断字符串。 | {{ 'This is a long sentence' | truncatewords: 2 }} | This is… |
replace_first | 替换子字符串的第一次出现。 | {{ 'hello world' | replace_first: 'world', 'there' }} | hello there |
prepend | 在另一个字符串的开头添加字符串。 | {{ 'world' | prepend: 'hello ' }} | hello world |
append | 在另一个字符串的末尾添加字符串。 | {{ 'hello' | append: ' world' }} | hello world |
lstrip | 从字符串中删除前导空白。 | {{ ' hello' | lstrip }} | hello |
rstrip | 从字符串中删除尾随空白。 | {{ 'hello ' | rstrip }} | hello |
常见问题
为什么替换不起作用?
- 应用内消息不支持属性替换。
- 使用”发送测试消息”时标签替换不起作用。
- 标签键必须是字母数字,或使用 _ 和 -(不能有句点或空格)。
- 替换不会在预览模式中显示 — 发送真实消息进行测试。
如何控制空白和换行?
使用连字符:{{- ... -}}
、{%- ... -%}
来修剪周围的空白。
更多详情请参阅空白控制。
如何处理用户生成的内容?
将用户生成的文本包装在{% raw %}
和 {% endraw %}
中以防止 Liquid 解析。参见 “raw” 语法。
json