Skip to main content
Custom code 区块将你自己的 HTML 或 React 添加到购物车中。你可以将它放在抽屉的任意版块中,或作为子区块嵌套在 Cart items 内,使其按每行商品重复显示。与其他区块不同,它没有 Content 设置,也没有 Design 部分:该区块本身就是代码,因此你完全在其 Code 标签页中工作。
在 Aftersell Cart 编辑器中添加并开启 Custom code 区块的动画预览

添加并开启 Custom code 区块

  1. Custom code 区块添加到任意版块,或作为 Cart items 下的子区块。
  2. 选中它并打开 Code 标签页。
  3. 选择 HTMLReact component。新区块默认为 HTML。
  4. 编写你的代码。
  5. 如果你选择了 React,点击 Compile
  6. 开启 “Use custom template”(使用自定义模板)。对于此区块,该开关的含义是”显示我的自定义代码”,且默认关闭,因此在启用之前不会渲染任何内容。
  7. 保持侧边栏的眼睛开关处于开启状态,使区块对顾客保持可见。
眼睛开关和 “Use custom template” 都必须开启,区块才会显示。

行为

  • 在购物车加载完成之前,区块不渲染任何内容。
  • 当侧边栏眼睛关闭、“Use custom template” 关闭、代码为空,或 React 编译或渲染失败时,它同样不渲染任何内容。由于失败是静默的,请在发布前在预览中检查你的区块。

HTML 模式

HTML 模式会将一小组令牌替换到你的标记中。它适用于静态或由令牌驱动的内容,而不是运行逻辑。

令牌

令牌的值是格式化后的字符串(商店货币格式、带 % 的百分比或数量),可直接放入标记中:

示例

React 模式

React 模式会编译一个组件,并向其传递购物车数据和一个 add-to-cart 操作。
  • 编辑器将外层包裹固定为 function CustomCode(props: CustomCodeProps) { … },你只能编辑这两行之间的函数体。
  • 你必须先点击 Compile,然后开启 “Use custom template”,区块才会显示。
  • 你的组件可以使用 useStateuseEffectuseMemouseRefuseCallback
  • 与 HTML 模式不同,React 在页面上下文中运行,因此在可用时可以调用 windowCart SDK
  • 如果你的组件在运行时抛出错误,区块将不渲染任何内容,购物车的其余部分继续正常工作。

Props

总额和节省金额是以货币的最小单位(美元为美分)表示的整数,因此 $12.501250 而不是 12.50。它们不像 HTML 令牌那样是格式化后的货币字符串。

cart 和 line 的结构

cartline 与 SDK 在其他所有地方暴露的对象相同,因此它们在**购物车对象参考**中统一记录:购物车、商品行和捆绑上的每个字段。 你最常用的字段:cart.itemscart.itemCountcart.totalPriceline.titleline.quantityline.finalLinePrice 此区块特有的三点:
  • line 仅在 Cart items 子区块上设置,此时你的组件每行渲染一次。作为版块放置时,linenull,你应改为读取 cart.items
  • 捆绑的子商品不在 cart.items 中。 当商品行被组合成捆绑时,只有锚点行会出现;其子商品位于 line.bundle.children 中。
  • 行转换隐藏的行也不在其中,尽管它们仍计入 cart.totalPrice

示例

显示商品数量:
作为 Cart items 子区块时,使用 props.line 呈现按产品的内容。区块每行渲染一次,并带有该行的产品和变体标记:

读取增强元数据

cart.items 中的每个商品都带有一个 metadata 字段:在购物车增强器(cart enricher)填充之前是空对象 {}。填充后,它以增强器的 id 为键,包含该行产品或变体的 Storefront 数据:
metadata 始终存在,在增强器的异步获取完成之前默认为空对象 {}(“尚未增强”的判断是 Object.keys(item.metadata).length === 0)。读取特定增强器的键时请使用可选链(item.metadata?.enricherId),因为在增强完成之前该键不存在。

读取折扣码和行折扣

cart.discountCodes 列出应用于购物车的折扣码,每行的 discountAllocations 列出应用于该特定行的折扣:

位置与限制

  • 区域: 任意(顶部、主体或底部)。也可作为 Cart items 的子区块使用。
  • 最大数量: 无限制。
  • 状态: 有商品和空购物车均可(作为版块区块时)。作为 Cart items 子区块时,仅在购物车有商品行时渲染,每行一个实例。
  • 未锁定,因此你可以移除或隐藏它。
  • 没有按区块的 Design 部分。请通过你自己的标记、自定义 CSS 和全局设计设置来设置样式。

何时使用 Custom code 区块、自定义模板或自定义脚本