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

> Todas las opciones de configure del Cart SDK de Aftersell: apertura del drawer, intercepción de agregar al carrito, validación de formularios y formato de dinero.

`configure(config)` establece cómo se comporta el carrito. Es una **llamada de configuración**, así que es segura al principio de tu script, antes de que el carrito se haya cargado.

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

Puedes llamarla más de una vez y los valores se fusionan. Una llamada posterior anula solo las claves que nombra, dejando el resto intacto.

<Warning>
  **Pasar `undefined` borra una clave en lugar de omitirla.** `configure({ open_on_add_to_cart: undefined })` restablece esa opción a su valor predeterminado, descartando lo que una llamada anterior haya establecido. Para dejar una opción intacta, omite la clave por completo.
</Warning>

<div id="options">
  ## Opciones
</div>

| Opción                                                          | Valores                            | Predeterminado       | Propósito                                                                   |
| --------------------------------------------------------------- | ---------------------------------- | -------------------- | --------------------------------------------------------------------------- |
| [`open_on_add_to_cart`](#open_on_add_to_cart)                   | `'always'`, `'never'`, `'default'` | `'default'`          | Si el drawer se abre cuando se agrega un artículo.                          |
| [`open_on_background_add`](#open_on_background_add)             | `boolean`                          | `false`              | Abrir también cuando algo *más* agrega al carrito.                          |
| [`validate_form_on_add_to_cart`](#validate_form_on_add_to_cart) | `boolean`                          | `false`              | Bloquear el agregado si el formulario del producto es inválido.             |
| [`skip_add_to_cart_interceptor`](#skip_add_to_cart_interceptor) | `boolean`                          | `false`              | Desactivar por completo la intercepción de agregar al carrito de Aftersell. |
| [`skip_open_cart_interceptor`](#skip_open_cart_interceptor)     | `boolean`                          | `false`              | Deja que un clic en el icono del carrito llegue a tus otros scripts.        |
| [`money_format`](#money_format)                                 | string                             | formato de la tienda | Anular el formato que usa `formatMoney`.                                    |

***

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

Controla si el drawer se abre cuando un comprador agrega un producto.

| Valor       | Comportamiento                                                                      |
| ----------- | ----------------------------------------------------------------------------------- |
| `'always'`  | Abrir siempre el drawer al agregar.                                                 |
| `'never'`   | No abrirlo nunca; el artículo se agrega silenciosamente.                            |
| `'default'` | Seguir la configuración **Open cart when an item is added** del editor del carrito. |

```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' });
```

Un uso común es mantener el drawer cerrado en una página específica dejando la configuración del comerciante intacta en el resto:

```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>
  Si solo quieres esto activado para toda la tienda, ya es una configuración: **Cart settings → Content → Behavior → Open cart when an item is added**. Usa `configure` cuando la respuesta dependa de la página, el comprador o algo que solo tu código sabe.
</Note>

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

Establece esto en `true` para abrir el drawer también en agregados **en segundo plano**: aquellos que Aftersell detectó pero no manejó por sí mismo.

Un agregado cuenta como en segundo plano cuando ocurre cualquiera de estas dos cosas:

* llegó a través de los [eventos estándar de carrito de Shopify](https://shopify.dev/docs/storefronts/themes/best-practices/standard-events) (siempre se trata como en segundo plano, sin importar qué lo haya disparado), o
* Aftersell vio la petición al carrito en la red **sin** ningún clic o pulsación de tecla confiable en los \~3 segundos anteriores; por ejemplo, otra app o script escribiendo en el carrito.

Un agregado que Aftersell vio en la red y que *sí* siguió a un clic del comprador no es un agregado en segundo plano: ya abre el drawer según `open_on_add_to_cart`, sin necesidad de esta opción.

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

Esta es una **compuerta adicional, no una anulación**: un agregado en segundo plano abre el drawer solo si `open_on_add_to_cart` también lo hubiera permitido. Con `open_on_add_to_cart: 'never'`, esta opción no hace nada.

<Tip>
  Recurre a esto cuando un botón de agregar de terceros agrega el artículo correctamente pero deja el drawer cerrado. Si el artículo nunca llega al carrito, ese es un problema de intercepción. Consulta [`skip_add_to_cart_interceptor`](#skip_add_to_cart_interceptor) y el [caso de uso del constructor de páginas](/es/aftersell/cart/sdk-use-case-page-builder).
</Tip>

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

Ejecuta la validación nativa de formularios del navegador (`reportValidity()`) antes de agregar, y cancela el agregado si el formulario es inválido. Úsalo cuando tu formulario de producto tiene campos obligatorios (un mensaje de grabado, una nota de regalo, una casilla obligatoria) que los compradores actualmente pueden omitir.

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

El navegador muestra su propio mensaje de validación en el campo problemático. Desactivado de forma predeterminada, porque un tema con un atributo `required` extraviado en algún lugar del formulario de producto empezaría, de lo contrario, a bloquear silenciosamente el agregar al carrito.

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

Desactiva por completo la intercepción de agregar al carrito de Aftersell. Para saber qué hace la intercepción y todas las formas de excluirse de ella, consulta [Intercepción de agregar al carrito](/es/aftersell/cart/add-to-cart-interception).

El tema entonces realiza el agregado por sí mismo, y cada script que escuche ese envío vuelve a ejecutarse. Aftersell sigue vigilando la petición al carrito en la red, así que el drawer se abre como siempre. No lo pierdes al optar por salir. En los temas que Aftersell reconoce, el propio carrito del tema permanece inerte, así que no obtendrás dos carritos. En un tema que no reconoce, el tema puede abrir su propio carrito junto al tuyo; consulta [¿Se abrirá también el carrito del tema?](/es/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>
  Esta se lee **una vez, al arrancar**. Solo funciona desde una llamada de configuración que se ejecuta antes de que el carrito se cargue: el script de **Initialization** de tu carrito. Establecerla después (dentro de `ready()`, o desde un handler de eventos) no tiene efecto, y falla silenciosamente.
</Warning>

Este es un instrumento contundente que deshabilita la intercepción para todos los formularios de la página. Para eximir solo un formulario, usa el hook [`registerSkipAddToCartRule`](/es/aftersell/cart/sdk-hooks#registerskipaddtocartrule) en su lugar:

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

Al hacer clic en el icono del carrito, se abre el drawer de Aftersell. Para hacerlo de forma confiable, Aftersell detiene el clic para que nada más en la página lo maneje, lo que también impide que **tus** scripts lo vean. Si un evento de analíticas o de pixel se dispara en todas partes excepto en el icono del carrito, esta es la razón.

Establece esto en `true` para dejar de silenciar el clic:

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

Tus listeners se ejecutan entonces, y el drawer sigue abriéndose exactamente como antes. El clic tampoco navega a `/cart`.

<Warning>
  **Esto hace menos de lo que sugiere su nombre.** No omite el interceptor del icono del carrito. Solo evita que silencie a otros listeners. Aftersell sigue manejando el clic y sigue abriendo tu carrito. Para un control que Aftersell deba ignorar por completo, usa la clase `aftersell-cart-wont-open-cart` en su lugar; consulta [Intercepción de agregar al carrito](/es/aftersell/cart/add-to-cart-interception#the-cart-icon-is-separate).
</Warning>

A diferencia de [`skip_add_to_cart_interceptor`](#skip_add_to_cart_interceptor), esta se lee **en cada clic**, así que puedes establecerla en cualquier momento y surte efecto de inmediato: desde `ready()`, un handler de eventos o condicionalmente por página.

<Note>
  Algunos temas también responden por sí mismos al clic en el icono del carrito. Una vez que Aftersell deja de silenciarlo, un tema que abre su propio drawer lo hará junto al tuyo. Si ves dos carritos después de activar esto, agrega la clase `aftersell-cart-wont-open-cart` al icono del tema y abre el carrito desde tu propio handler con [`actions.open()`](/es/aftersell/cart/sdk-actions#open-and-close).
</Note>

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

Anula el [formato de dinero de Shopify](https://shopify.dev/docs/api/liquid/filters/money) que [`formatMoney`](/es/aftersell/cart/sdk-actions#formatmoneycents) usa. El valor predeterminado es el formato propio de tu tienda; si no está disponible, los precios recurren a `$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"
```

Como `configure` fusiona y `formatMoney` lee el valor en vivo, puedes cambiar el formato en tiempo de ejecución, por ejemplo cuando se dispara un selector de moneda:

```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>
  Esto cambia cómo el SDK y el carrito *muestran* los precios. No cambia la moneda que se le cobra al comprador; eso es Shopify Markets.
</Note>

<div id="where-to-go-next">
  ## Adónde ir después
</div>

* **[Acciones](/es/aftersell/cart/sdk-actions)**: lee y cambia el carrito.
* **[Hooks](/es/aftersell/cart/sdk-hooks)**: control por formulario y por línea, donde `configure` es demasiado amplio.
* **[Casos de uso](/es/aftersell/cart/sdk-use-cases)**: soluciones completas a solicitudes comunes.
