> ## 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.

# Конфигурация

> Все опции configure в Aftersell Cart SDK: открытие drawer, перехват добавления в корзину, валидация формы и форматирование денег.

`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'`     | Открывается ли drawer при добавлении товара.                            |
| [`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)                                 | строка                             | формат магазина | Переопределить формат, используемый `formatMoney`.                      |

***

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

Управляет тем, открывается ли drawer, когда покупатель добавляет товар.

| Значение    | Поведение                                                                    |
| ----------- | ---------------------------------------------------------------------------- |
| `'always'`  | Всегда открывать drawer при добавлении.                                      |
| `'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' });
```

Типичное применение — держать drawer закрытым на одной конкретной странице, оставляя настройку продавца без изменений везде остальном:

```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`, чтобы также открывать drawer при **фоновых** добавлениях — тех, которые Aftersell обнаружил, но не обрабатывал сам.

Добавление считается фоновым, когда:

* оно пришло через [стандартные события корзины Shopify](https://shopify.dev/docs/storefronts/themes/best-practices/standard-events) (всегда считаются фоновыми, чем бы они ни были вызваны), или
* Aftersell увидел запрос к корзине в сети **без** доверенного клика или нажатия клавиши в предшествующие \~3 секунды — например, когда в корзину пишет другое приложение или скрипт.

Добавление, которое Aftersell увидел в сети и которое *последовало* за кликом покупателя, не является фоновым: оно уже открывает drawer согласно `open_on_add_to_cart`, без необходимости в этой опции.

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

Это **дополнительный фильтр, а не переопределение**: фоновое добавление открывает drawer только в том случае, если `open_on_add_to_cart` тоже это позволил бы. При `open_on_add_to_cart: 'never'` эта опция ничего не делает.

<Tip>
  Прибегайте к этому, когда сторонняя кнопка добавления корректно добавляет товар, но оставляет drawer закрытым. Если товар вообще никогда не попадает в корзину, это проблема перехвата. См. [`skip_add_to_cart_interceptor`](#skip_add_to_cart_interceptor) и [сценарий использования с page builder](/ru/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. О том, что делает перехват, и обо всех способах отказаться от него см. [Перехват добавления в корзину](/ru/aftersell/cart/add-to-cart-interception).

Тема тогда сама выполняет добавление, и каждый скрипт, слушающий этот submit, снова запускается. Aftersell по-прежнему следит за запросом корзины в сети, поэтому drawer открывается как обычно. Отказавшись от перехвата, вы его не теряете. На темах, которые Aftersell распознаёт, собственная корзина темы остаётся неактивной, поэтому вы не получите две корзины. На теме, которую он не распознаёт, тема может открыть свою корзину рядом с вашей; см. [Откроется ли также корзина темы?](/ru/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`](/ru/aftersell/cart/sdk-hooks#registerskipaddtocartrule):

```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>

Клик по иконке корзины открывает drawer Aftersell. Чтобы делать это надёжно, Aftersell останавливает клик, чтобы ничего другое на странице его не обработало, а это также мешает **вашим** скриптам его увидеть. Если событие аналитики или пикселя срабатывает везде, кроме иконки корзины, дело именно в этом.

Установите значение `true`, чтобы перестать заглушать клик:

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

Ваши слушатели тогда будут срабатывать, а drawer по-прежнему будет открываться ровно так же, как раньше. Клик также по-прежнему не будет переходить на `/cart`.

<Warning>
  **Эта опция делает меньше, чем следует из её названия.** Она не пропускает перехватчик иконки корзины. Она лишь мешает ему заглушать другие слушатели. Aftersell всё равно обрабатывает клик и всё равно открывает вашу корзину. Если нужно, чтобы Aftersell полностью игнорировал элемент управления, используйте вместо этого класс `aftersell-cart-wont-open-cart`; см. [Перехват добавления в корзину](/ru/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()`](/ru/aftersell/cart/sdk-actions#open-and-close).
</Note>

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

Переопределяет [денежный формат Shopify](https://shopify.dev/docs/api/liquid/filters/money), который использует [`formatMoney`](/ru/aftersell/cart/sdk-actions#formatmoneycents). По умолчанию используется собственный формат вашего магазина; если он недоступен, цены возвращаются к `$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>

* **[Действия](/ru/aftersell/cart/sdk-actions)**: чтение и изменение корзины.
* **[Хуки](/ru/aftersell/cart/sdk-hooks)**: контроль на уровне формы и позиции, где `configure` слишком широк.
* **[Сценарии использования](/ru/aftersell/cart/sdk-use-cases)**: полные решения распространённых запросов.
