基础知识

通过以下基础概念,你可以快速了解如何使用 Sline objects,filters,和 tags 进行主题开发。

资源 handles​

资源 handles 是识别不同店铺资源的标识符,用于构建资源的 URL 或者获取资源对象。

拥有 handle 的常见资源对象有 product、collection、article 和 blog。其它类型的对象资源,如 linklists 和 link,也同样具有 handles。

同一对象的不同资源均拥有唯一的 handle 标识。以 product 对象为例,如果一个店铺有两个不同的产品,两个产品资源的 handle 是不同的。

创建和修改 handle​

资源创建的时候,资源标题会填充到 handle 上,并遵循一组规则:

  • handle 始终为小写,输入大写会被转换为小写。
  • 空格和特殊字符被替换为连字符 -。
  • 如果有多个连续的空格或特殊字符,则它们被替换为单个连字符。
  • 开头的空格或特殊字符将被移除。
  • 同一个资源下的 handle 需要保持唯一性,因此如果使用了重复的标题,则 handle 会自动递增一。例如,如果有两个名为 "bed" 的产品,则它们的 handle 分别为 bed 和 bed-1。

创建资源后,更改资源标题不会更新 handle。

你可以在 SHOPLINE 商家后台中修改资源的 handle。在具体资源的管理页面的 搜索引擎优化 组件编辑 handle 信息。如果通过 handle 引用资源,确保在修改 handle 时更新这些引用。

注意:

  • linklists 中的个别链接根据其标题生成 handle (例如 linklists.header),这些 handle 无法直接修改。
  • theme.config.json、sections 或 blocks 中获取的个别设置使用其 id 属性作为 handle。

使用 handle​

所有具有 handle 的对象都有一个 handle 属性。例如,你可以使用 product.handle 输出产品的 handle。你可以通过两种方式在父对象内引用一个对象,这个对象是通过其 handle 标识的:

  • 方括号表示法 [ ]:接受方括号内的 handle 字符串或变量,例如 linklists["header"]或linklists[header]。
  • 点表示法 .:接受不带方括号的 handle,例如 linklists.header。

运算符​

Sline 支持基本的逻辑和比较运算符,可用于 if tag 和取值表达式。

运算符功能
==等于
!=不等于
>大于
<小于
>=大于等于
<=小于等于
||条件 A 或条件 B
&&条件 A 和条件 B

运算符执行顺序​

在 Sline 模板中,逻辑运算符的优先级遵循常规编程语言的规则:&& 的优先级高于 || 。条件表达式会从左到右计算,但会先计算所有 && 运算,然后再计算||运算。

{{#if false || true || true && false }}
This evaluates to true, because the calculation proceeds as follows:
1. false || true → true
2. true && false → false
3. true || false → true
{{/if}}

如果你想在计算中提高优先级,就使用 ()。

{{#if true && (true && true) || false }}
This evaluates to true, with explicit calculation steps:
1. (true && true) → true
2. true && true → true
3. true || false → true
{{/if}}

类型​

Sline 支持六种数据类型。

字符串(string)​

任何一系列的字符,可以用双引号 ""、单引号 '' 或反引号 `` 括起来。

备注:可以使用 ""来检查字符串是否为空。

双引号""

标准字符串,支持换行字符(如 "\n")。

单引号 ''

表示单个字符。

反引号 ``

原始字符串,不支持转译,可跨多行。

数字(number)​

包含整型(int)和浮点型(float),直接书写数值即可。

{{ 42 }}   <!-- 整数 -->
{{ 3.14 }} <!-- 浮点数 -->

布尔(boolean)​

二进制值,要么是 true,要么是 false。

空值(nil)​

未定义的值,用 nil 表示。返回 nil 的表达式不会输出任何内容,且在条件判断中视为 false。

数组(array)​

任何类型的变量列表。

要访问数组中的所有项,可以使用 for tag 遍历数组中的每一项。

可以使用方括号 [ ] 表示法访问数组中的特定项。数组索引从零开始。

在 Sline 中无法仅使用其本身初始化数组,不过,你可以使用 split filter 将单个字符串拆分为子字符串数组。

备注:可以使用 size filter 来获取数组长度,判断数组长度是否大于 0 。

真值和假值​

所有数据类型必须返回 true 或 false。默认返回 true 的被称为真值(truthy),默认返回 false 的被称为假值(falsy)。

值真值假值
true✔️
false✔️
nil✔️
字符串✔️
空字符串✔️
整数✔️
浮点数✔️
数组✔️
空数组✔️

例子​

在 Sline 中检查值时需要小心。一个值可能不是你预期的格式,但仍然可能是真值。

<!-- True if current_tags is an empty array. Use size to determine if it is empty. -->
{{#if current_tags | size() > 0}}
Presence tag.
{{#else/}}
Tag is empty.
{{/if}}

空白符控制​

可以通过在花括号旁边添加一个 ~ 字符来省略模板中任何 Sline 语句的两侧空格、换行符,制表符等空白符。应用后,该侧的所有空白符将被删除,直到第一个 Sline 表达式或该侧的非空白符为止。

start
{{~ "content" ~}}
end
这篇文章对你有帮助吗?