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

# Otwieraj szufladę z page buildera

> Przypadek użycia Cart SDK: jak sprawić, by przyciski dodawania do koszyka w Replo, PageFly, GemPages i niestandardowe otwierały szufladę Aftersell Cart.

Aftersell przechwytuje dodawanie do koszyka na standardowych formularzach produktowych Shopify. Buildery stron docelowych często dodają do koszyka po swojemu, używając wywołania JavaScript zamiast przesłania formularza, więc produkt ląduje w koszyku, ale szuflada pozostaje zamknięta, albo kupujący jest przekierowywany na `/cart`.

<div id="the-fix-in-one-line">
  ## Rozwiązanie w jednej linii
</div>

Po zakończeniu dodawania do koszyka przez builder każ koszykowi ponownie pobrać dane i się otworzyć:

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
window.aftersell.cart.actions.refresh().then(() => {
  window.aftersell.cart.actions.open();
});
```

Dodaj to jako **drugą akcję** na przycisku, po własnym „add to cart” buildera, i wyłącz opcję buildera „go to cart” lub „redirect after add”.

<Note>
  Najpierw wypróbuj [`open_on_background_add`](#the-no-code-option-first), ponieważ często rozwiązuje to problem bez dotykania przycisku.
</Note>

<div id="the-no-code-option-first">
  ## Najpierw opcja bez kodu
</div>

Aftersell wykrywa dodania, których samo nie obsłużyło, na dwa sposoby. Oba działają cały czas — są podłączane razem przy starcie i żaden nie tłumi drugiego, więc jedno dodanie może być zgłoszone przez oba — a każde zgłoszenie stosuje regułę otwierania niezależnie:

* **Na łączu.** Aftersell obserwuje żądania do endpointów koszyka Shopify. Jeśli dodanie nastąpiło po prawdziwym kliknięciu lub naciśnięciu klawisza w ciągu około trzech sekund, liczy się jako inicjowane przez kupującego, a szuflada otwiera się zgodnie z Twoim zwykłym ustawieniem **Open cart when an item is added**. Każdy builder dodający przez Ajax cart API Shopify (`/cart/add.js`) trafia tutaj, co jest częstym przypadkiem — więc najpierw wypróbuj swój przycisk, może już działać bez żadnych zmian.
* **[Standardowe zdarzenia koszyka Shopify](https://shopify.dev/docs/storefronts/themes/best-practices/standard-events).** Dodanie zgłoszone w ten sposób jest zawsze traktowane jako dodanie *w tle*, niezależnie od tego, czy kupujący kliknął. Dodania w tle nie otwierają szuflady, chyba że się na to zdecydujesz:

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

Wklej to w **Cart settings → Custom script → Initialization**. Jeśli szuflada otwiera się teraz po przycisku dodawania Twojego buildera, to koniec — bez pracy per przycisk i z pokryciem każdej strony.

<Note>
  `open_on_background_add` obejmuje też dodania bez żadnego gestu kupującego — inną aplikację lub skrypt zapisujący do koszyka. Włącz to tylko wtedy, gdy chcesz, aby one również otwierały szufladę.
</Note>

Jeśli żadna ze ścieżek nie otwiera szuflady, wróć do jawnego wywołania poniżej.

<div id="per-builder-setup">
  ## Konfiguracja per builder
</div>

<div id="replo">
  ### Replo
</div>

1. Otwórz swoją stronę w edytorze Replo i zaznacz przycisk **Add to Cart**.

2. W prawym pasku bocznym otwórz zakładkę **Interactions**.

3. W sekcji **On Click** kliknij `+` i wybierz **Run JavaScript**.

4. Wklej:

   ```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
   window.aftersell.cart.actions.refresh().then(() => {
     window.aftersell.cart.actions.open();
   });
   ```

5. Zaznacz ponownie interakcję **Add Product to Cart** i wyłącz **Go to cart after?**.

6. Zobacz podgląd, potwierdź, że szuflada się otwiera, a następnie opublikuj.

Powtórz na każdej stronie, która ma przycisk dodawania do koszyka.

<div id="pagefly-and-gempages">
  ### PageFly i GemPages
</div>

Oba pozwalają podpiąć niestandardowy JavaScript do kliknięcia przycisku lub dodać element niestandardowego kodu na stronę. Użyj tego samego fragmentu, podpiętego tak, aby uruchamiał się po akcji dodania do koszyka buildera, i wyłącz każde ustawienie „redirect to cart” na przycisku.

<div id="your-own-button">
  ### Twój własny przycisk
</div>

Jeśli sam dodajesz do koszyka, pomiń podróż w obie strony i użyj własnej akcji SDK, która aktualizuje koszyk i może otworzyć szufladę w jednym kroku:

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
document.querySelector('#my-add-button').addEventListener('click', () => {
  window.aftersell.cart.actions.addItem(VARIANT_ID, 1).then(() => {
    window.aftersell.cart.actions.open();
  });
});
```

Używaj `refresh()` tylko wtedy, gdy coś *innego* zmieniło koszyk i potrzebujesz, aby Aftersell to nadrobił:

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
fetch('/cart/add.js', { method: 'POST', /* … */ })
  .then(() => window.aftersell.cart.actions.refresh())
  .then(() => { window.aftersell.cart.actions.open(); });
```

<div id="when-the-builders-button-should-bypass-aftersell-entirely">
  ## Gdy przycisk buildera powinien całkowicie omijać Aftersell
</div>

Czasem jest odwrotnie: formularz potrzebuje własnego przepływu, a przechwytywanie przez Aftersell przeszkadza. Wyłącz tylko ten formularz:

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
window.aftersell.cart.hooks.registerSkipAddToCartRule((form) =>
  form.hasAttribute('data-skip-aftersell')
);
```

Następnie dodaj `data-skip-aftersell` do formularza. To lepsze niż [`skip_add_to_cart_interceptor`](/pl/aftersell/cart/sdk-configure#skip_add_to_cart_interceptor), które wyłącza przechwytywanie dla każdego formularza na stronie.

Jeszcze prościej, jeśli możesz edytować znaczniki formularza: dodaj klasę **`aftersell-cart-skip-atc`** do `<form>`, a Aftersell go pominie, bez żadnego skryptu.

```html theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
<form action="/cart/add" method="post" class="aftersell-cart-skip-atc">
```

<div id="troubleshooting">
  ## Rozwiązywanie problemów
</div>

| Objaw                                                    | Prawdopodobna przyczyna                                                                                                                                                           |
| -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Produkt dodany, szuflada pozostaje zamknięta             | Builder nie emituje standardowych zdarzeń koszyka Shopify. Użyj jawnego wywołania `refresh()` + `open()`.                                                                         |
| Kupujący jest przekierowywany na `/cart`                 | Opcja buildera „go to cart after add” jest nadal włączona. Wyłącz ją.                                                                                                             |
| Szuflada otwiera się, ale pokazuje nieaktualną zawartość | `open()` uruchomiło się, zanim `refresh()` się rozwiązało. Połącz je łańcuchem `.then()`, jak wyżej.                                                                              |
| Nic się nie dzieje                                       | Akcje wywołane przed załadowaniem koszyka ostrzegają w konsoli i nic nie robią. Opakuj w `window.aftersell.cart.ready().then(…)`, jeśli przycisk może być kliknięty tak wcześnie. |
| Działa na jednej stronie, na innej nie                   | Większość builderów stosuje interakcje per strona. Powtórz konfigurację na każdej.                                                                                                |

Sprawdź [`window.aftersellCartDebugEvents`](/pl/aftersell/cart/sdk-overview#debugging), jeśli wywołanie zdaje się nic nie robić, ponieważ błędy SDK są połykane, a nie rzucane.

<div id="where-to-go-next">
  ## Co dalej
</div>

* **[Configure](/pl/aftersell/cart/sdk-configure#open_on_background_add)**: `open_on_background_add` i inne opcje szuflady.
* **[Actions](/pl/aftersell/cart/sdk-actions)**: `refresh`, `open` i `addItem`.
* **[Hooks](/pl/aftersell/cart/sdk-hooks#registerskipaddtocartrule)**: wyłączanie pojedynczego formularza.
