配置文件
当通过 SHOPLINE CLI 创建 UI 扩展时,shopline.ui.customizer.toml 文件会自动生成在根目录下。文件内容包含了扩展名称、扩展点位置、扩展能力的设置定义。
工作原理
当通过 SHOPLINE CLI 启动扩展程序时,会对配置文件内容进行解析。在页面渲染扩展时,根据解析后的数据来匹配渲染位置。
将扩展发布到 SHOPLINE 时,配置文件内容会和你的扩展代码一并推送。
type = "checkout_ui_customizer"
name = "customizer-name"
extension_points = ['Checkout::Dynamic::Render']
[capabilities]
block_progress = true
# [settings]
# ....
配置属性
| 属性 | 必填 | 描述 |
|---|---|---|
type | 是 | 扩展的类型,对于结账 UI 扩展,此值固定为 checkout_ui_customizer |
name | 是 | 结账 UI 扩展的名称 |
extension_points | 是 | 扩展将渲染的预设点,这个值必须与扩展代码 render(extensionPoint, App) 中的 extensionPoint 参数保持一致。 即,代码中的 extensionPoint 参数必须包含在 extension_points 属性里。例如:扩展代码 render('Checkout::Dynamic::Render', (props) => { return <Text/>; }) 这样调用,则配置 extension_points 属性必须指定 Checkout::Dynamic::Render。 |
capabilities | 否 | 定义 UI 扩展的能力
|
settings | 否 | 定义了在结账编辑器中的 商家配置项 |
商家配置项
配置文件中的 [settings] 字段中定 义了一组用户配置 [[settings.fields]],最终会呈现在结账编辑器中给商家填写。
例如:下方代码中设置了 2 个配置项,第一个配置项的 name 名称是 标题(将被呈现给商家查看),其类型是 single_line_text_field,即单行文本输入框,更多数据类型请查看 支持的数据类型。当然,你也可以对输入的数据进行校验,请查看 数据校验选项。随后商家可以在结账编辑器中输入字符,且这个字符最终会传入扩展中,在扩展中可以通过 settings.{key} 读取该值。
[settings]
[[settings.fields]]
key = "title"
type = "single_line_text_field"
name = "标题"
description = "标题描述"
[[settings.fields]]
key = "title2"
type = "single_line_text_field"
name = "标题2"
description = "标题描述2"
| 属性 | 必填 | 描述 | 例子 |
|---|---|---|---|
key | 是 | 该配置的 key | "title" |
type | 是 | 配置的数据类型 | "single_line_text_field" |
name | 是 | 配置的名称,其会向商家展示 | "标题" |
description | 否 | 设置的描述,其会向商家展示 | "标题描述" |
validations | 否 | 配置值的校验规则 | |
支持的数据类型
| 类型 | 描述 | 例子 |
|---|---|---|
boolean | 布尔值,true 或 false | true |
date | ISO 8601 格式的日期 | 1997-01-01 |
date_time | ISO 8601 格式的日期和时间 | 1997-01-01T00:00:00 |
single_line_text_field | 单行文本 | Title |
multi_line_text_field | 多行文本 | |
number_integer | 整数 | 10 |
number_decimal | 小数 | 10.4 |
数据校验选项
| 选项 | 描述 | 支持的数据类型 | 例子 |
|---|---|---|---|
| Minimum length | 文本值的最小长度 |
| [[settings.fields.validations]] name = "min" value = "1" |
| Maximum length | 文本值的最大长度 |
| [[settings.fields.validations]] name = "max" value = "20" |
| Regular expression | 正则表达式 |
| [[settings.fields.validations]] name = "regex" value = "^[0-9]*$" |
| Choices | 预定义选项的列表,用于限制配置项的值 |
| [[settings.fields.validations]] name = "choices" value = "["yellow", "green", "red"]" |
| Minimum date | 最小日期,格式为 ISO 8601 |
| [[settings.fields.validations]] name = "min" value = "1997-01-01" |
| Maximum date | 最大日期,格式为 ISO 8601 |
| [[settings.fields.validations]] name = "max" value = "1997-03-03" |
| Minimum datetime | 最小日期时间,格式为 ISO 8601 |
| [[settings.fields.validations]] name = "min" value = "1997-03-03T00:30:00" |
| Maximum datetime | 最大日期时间,格式为 ISO 8601 |
| [[settings.fields.validations]] name = "max" value = "1997-03-03T17:30:00" |
| Minimum integer | 最小整数 |
| [[settings.fields.validations]] name = "min" value = "10" |
| Maximum integer | 最大整数 |
| [[settings.fields.validations]] name = "max" value = "20" |
| Minimum decimal | 最小小数 |
| [[settings.fields.validations]] name = "min" value = "0.4" |
| Maximum decimal | 最大小数 |
| [[settings.fields.validations]] name = "max" value = "2.99" |
| Maximum precision | 存储小数的最大小数位数 |
| [[settings.fields.validations]] name = "max_precision" value = "3" |
流程阻断
何时需要流程阻断
如果扩展依赖于某些特定信息输入、元素交互,则需要阻断买家的结账流程,直到买家把所有必要的信息都补充。你可以通过 Interceptor 拦截器返回 { success: false } 的方式进行流程阻断。
例如:你希望买家点击某个勾选框,以确保他们已经知晓某些信息后,再进行结账流程;此时则需要将配置文件的 capabilities 配置项设置为 block_progress = true。
[capabilities]
block_progress = true
开启或关闭流程阻断
开启 block_progress 后,阻断流程不会立即生效,还需要商家在结账编辑器 应用行为 中勾选 允许应用阻止结账 来开启或关闭流程阻断。

这篇文章对你有帮助吗?