> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aftersell.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 配置

> Aftersell Cart SDK 的所有 configure 选项：抽屉打开、加入购物车拦截、表单校验和货币格式化。

`configure(config)` 设定购物车的行为方式。它是一个**设置类调用**，所以可以安全地放在脚本最顶部，在购物车加载之前调用。

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
window.aftersell.cart.configure({
  open_on_add_to_cart: 'always',
  money_format: '${{amount}} USD',
});
```

你可以多次调用它，值会合并。后续调用只覆盖它指明的键，其余保持不变。

<Warning>
  **传入 `undefined` 会清除一个键，而不是跳过它。**`configure({ open_on_add_to_cart: undefined })` 会将该选项重置为默认值，丢弃之前调用设置的内容。要保持某个选项不变，请完全省略该键。
</Warning>

<div id="options">
  ## 选项
</div>

| 选项                                                              | 值                                | 默认值         | 用途                       |
| --------------------------------------------------------------- | -------------------------------- | ----------- | ------------------------ |
| [`open_on_add_to_cart`](#open_on_add_to_cart)                   | `'always'`、`'never'`、`'default'` | `'default'` | 添加商品时抽屉是否打开。             |
| [`open_on_background_add`](#open_on_background_add)             | `boolean`                        | `false`     | 当*其他*东西向购物车添加商品时也打开。     |
| [`validate_form_on_add_to_cart`](#validate_form_on_add_to_cart) | `boolean`                        | `false`     | 产品表单无效时阻止添加。             |
| [`skip_add_to_cart_interceptor`](#skip_add_to_cart_interceptor) | `boolean`                        | `false`     | 完全关闭 Aftersell 的加入购物车拦截。 |
| [`skip_open_cart_interceptor`](#skip_open_cart_interceptor)     | `boolean`                        | `false`     | 让购物车图标点击到达你的其他脚本。        |
| [`money_format`](#money_format)                                 | string                           | 商店的格式       | 覆盖 `formatMoney` 使用的格式。  |

***

<div id="open_on_add_to_cart">
  ## open\_on\_add\_to\_cart
</div>

控制购物者添加产品时抽屉是否打开。

| 值           | 行为                                                 |
| ----------- | -------------------------------------------------- |
| `'always'`  | 添加时始终打开抽屉。                                         |
| `'never'`   | 从不打开；商品被静默添加。                                      |
| `'default'` | 遵循购物车编辑器中的 **Open cart when an item is added** 设置。 |

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
// Always open, regardless of the merchant's cart setting.
window.aftersell.cart.configure({ open_on_add_to_cart: 'always' });
```

一个常见用法是在某个特定页面上保持抽屉关闭，而在其他所有地方保留商家设置：

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
if (window.location.pathname.startsWith('/collections/')) {
  window.aftersell.cart.configure({ open_on_add_to_cart: 'never' });
}
```

<Note>
  如果你只是想在整个商店启用它，它已经是一个设置：**Cart settings → Content → Behavior → Open cart when an item is added**。当答案取决于页面、购物者或只有你的代码才知道的东西时，才使用 `configure`。
</Note>

<div id="open_on_background_add">
  ## open\_on\_background\_add
</div>

将其设为 `true`，可以让抽屉在**后台**添加时也打开——即 Aftersell 检测到但并非由它自己处理的添加。

满足以下任一条件的添加算作后台添加：

* 它通过 [Shopify 的标准购物车事件](https://shopify.dev/docs/storefronts/themes/best-practices/standard-events)到达（无论由什么触发，始终视为后台），或
* Aftersell 在网络层看到了购物车请求，但在之前约 3 秒内**没有**可信的点击或按键——例如另一个应用或脚本正在写入购物车。

Aftersell 在网络层看到的、确实跟随购物者点击的添加不算后台添加：它已经按 `open_on_add_to_cart` 打开抽屉，不需要这个选项。

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
window.aftersell.cart.configure({ open_on_background_add: true });
```

这是一个**额外的闸门，不是覆盖**：只有当 `open_on_add_to_cart` 本来也允许时，后台添加才会打开抽屉。在 `open_on_add_to_cart: 'never'` 下，这个选项不起任何作用。

<Tip>
  当第三方添加按钮正确添加了商品但抽屉保持关闭时，使用这个选项。如果商品根本没有进入购物车，那是拦截问题。参阅 [`skip_add_to_cart_interceptor`](#skip_add_to_cart_interceptor) 和[页面构建器使用案例](/zh/aftersell/cart/sdk-use-case-page-builder)。
</Tip>

<div id="validate_form_on_add_to_cart">
  ## validate\_form\_on\_add\_to\_cart
</div>

在添加之前运行浏览器的原生表单校验（`reportValidity()`），并在表单无效时取消添加。当你的产品表单有必填字段（刻字留言、礼品备注、必选复选框）而购物者目前可以跳过时使用它。

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
window.aftersell.cart.configure({ validate_form_on_add_to_cart: true });
```

浏览器会在有问题的字段上显示自己的校验消息。默认关闭，因为如果主题的产品表单某处有一个多余的 `required` 属性，否则就会开始静默阻止加入购物车。

<div id="skip_add_to_cart_interceptor">
  ## skip\_add\_to\_cart\_interceptor
</div>

完全关闭 Aftersell 的加入购物车拦截。关于拦截具体做什么以及退出它的所有方式，请参阅[加入购物车拦截](/zh/aftersell/cart/add-to-cart-interception)。

之后主题会自己执行添加，每一个监听该提交的脚本都会重新运行。Aftersell 仍会在网络层监视购物车请求，所以抽屉照常打开。退出拦截并不会让你失去它。在 Aftersell 识别的主题上，主题自己的购物车保持惰性，所以你不会得到两个购物车。在它不识别的主题上，主题可能会打开自己的购物车与你的并存；参阅[主题自己的购物车会不会也打开？](/zh/aftersell/cart/add-to-cart-interception#will-the-themes-cart-open-too)。

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
window.aftersell.cart.configure({ skip_add_to_cart_interceptor: true });
```

<Warning>
  这个选项**只在启动时读取一次**。它只在购物车加载之前运行的设置类调用中生效：即你购物车的 **Initialization** 脚本。之后设置它（在 `ready()` 内部或从事件处理函数中）没有效果，并且会静默失败。
</Warning>

这是一个粗粒度工具，会禁用页面上每个表单的拦截。要只豁免某一个表单，请改用 [`registerSkipAddToCartRule`](/zh/aftersell/cart/sdk-hooks#registerskipaddtocartrule) hook：

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
// Preferred: exempt only the forms you own.
window.aftersell.cart.hooks.registerSkipAddToCartRule((form) =>
  form.hasAttribute('data-skip-aftersell')
);
```

<div id="skip_open_cart_interceptor">
  ## skip\_open\_cart\_interceptor
</div>

点击购物车图标会打开 Aftersell 抽屉。为了可靠地做到这一点，Aftersell 会阻止这次点击，让页面上没有其他任何东西处理它，这同时也让**你的**脚本看不到它。如果分析或像素事件在其他地方都触发，唯独在购物车图标上不触发，原因就在这里。

将其设为 `true` 可停止对点击的静音处理：

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
window.aftersell.cart.configure({ skip_open_cart_interceptor: true });
```

之后你的监听器会运行，抽屉仍然会像以前一样打开。点击也仍然不会跳转到 `/cart`。

<Warning>
  \*\*这个选项做的事情比名字暗示的要少。\*\*它不会跳过购物车图标拦截器。它只是让拦截器停止对其他监听器的静音处理。Aftersell 仍然处理这次点击，仍然会打开你的购物车。要让 Aftersell 完全忽略某个控件，请改用 `aftersell-cart-wont-open-cart` 类；参阅[加入购物车拦截](/zh/aftersell/cart/add-to-cart-interception#the-cart-icon-is-separate)。
</Warning>

与 [`skip_add_to_cart_interceptor`](#skip_add_to_cart_interceptor) 不同，这个选项**在每次点击时都会读取**，所以你可以在任何时候设置它并立即生效：在 `ready()` 中、在事件处理函数中，或按页面条件设置。

<Note>
  有些主题自身也会响应购物车图标的点击。一旦 Aftersell 停止对它的静音，会打开自己抽屉的主题就会与你的抽屉一起打开。如果开启后看到两个购物车，请在主题的图标上添加 `aftersell-cart-wont-open-cart` 类，并用 [`actions.open()`](/zh/aftersell/cart/sdk-actions#open-and-close) 从你自己的处理函数中打开购物车。
</Note>

<div id="money_format">
  ## money\_format
</div>

覆盖 [`formatMoney`](/zh/aftersell/cart/sdk-actions#formatmoneycents) 使用的 [Shopify 货币格式](https://shopify.dev/docs/api/liquid/filters/money)。默认为你商店自己的格式；如果不可用，价格回退为 `$X.XX`。

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
window.aftersell.cart.configure({ money_format: '${{amount}} USD' });

// Later:
window.aftersell.cart.actions.formatMoney(5779); // "$57.79 USD"
```

由于 `configure` 会合并且 `formatMoney` 读取实时值，你可以在运行时更改格式，例如在货币切换器触发时：

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
window.myTheme.onCurrencyChange((currency) => {
  window.aftersell.cart.configure({ money_format: FORMATS[currency] });
  window.aftersell.cart.actions.visualRefresh(); // repaint prices already on screen
});
```

<Note>
  这只改变 SDK 和购物车*显示*价格的方式。它不改变向购物者收费的货币；那是 Shopify Markets 的职责。
</Note>

<div id="where-to-go-next">
  ## 后续阅读
</div>

* **[操作](/zh/aftersell/cart/sdk-actions)**：读取和更改购物车。
* **[Hooks](/zh/aftersell/cart/sdk-hooks)**：按表单和按行的控制，适用于 `configure` 过于宽泛的场景。
* **[使用案例](/zh/aftersell/cart/sdk-use-cases)**：常见需求的完整解决方案。
