# Zmiana Wariantu w Koszyku PrestaShop: instalacja i konfiguracja

> Przegląd Moduł pozwala klientowi zmienić kombinację produktu (rozmiar, kolor lub inny atrybut) bezpośrednio na stronie koszyka, bez usuwania wiersza. Nowa kombinacja zachowuje ilość, adres dostawy i pozycję wiersza. Stan magazynowy…

- Strona: <https://www.datafirefly.com/pl/documentation/dfcartcombination/>
- Język: pl
- Zaktualizowano: 2026-10-13
- Inne języki: [fr](https://www.datafirefly.com/documentation/dfcartcombination/index.md), [en](https://www.datafirefly.com/en/documentation/dfcartcombination/index.md), [es](https://www.datafirefly.com/es/documentation/dfcartcombination/index.md), [de](https://www.datafirefly.com/de/documentation/dfcartcombination/index.md), [it](https://www.datafirefly.com/it/documentation/dfcartcombination/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfcartcombination/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfcartcombination/index.md)
- Indeks: <https://www.datafirefly.com/pl/documentation/llms.txt>

## Przegląd

Moduł pozwala klientowi zmienić kombinację produktu (rozmiar, kolor lub inny atrybut) bezpośrednio na stronie koszyka, bez usuwania wiersza. Nowa kombinacja zachowuje ilość, adres dostawy i pozycję wiersza. Stan magazynowy i minimalna ilość są sprawdzane przez serwer przed zamianą.

## Instalacja

1. W **Moduły > Menedżer modułów** kliknij **Załaduj moduł** i wyślij plik `dfcartcombination-1.0.0.zip`.
2. Moduł podpina się pod hooki `displayCartExtraProductActions` i `actionFrontControllerSetMedia` oraz tworzy tabelę `ps_dfcartcombination_log` na potrzeby historii.
3. Otwórz konfigurację modułu. Domyślnie wszystko jest włączone, w trybie przycisku z oknem.
4. Dodaj do koszyka produkt z co najmniej dwiema kombinacjami i otwórz stronę koszyka, aby sprawdzić wyświetlanie. Jeśli nic się nie pojawia, wyczyść pamięć podręczną w **Zaawansowane > Wydajność**.

## Ustawienia

- **Włącz moduł**: po wyłączeniu na stronie koszyka nic nie jest ładowane.
- **Tryb wyświetlania**: _Przycisk z oknem wyboru_ (jeden link „Zmień” na wiersz) lub _Listy rozwijane w wierszu koszyka_ (jedna lista na grupę atrybutów, zmiana stosowana od razu po wyborze).
- **Umieść pod atrybutami produktu**: przenosi selektor pod atrybuty wiersza. Wyłącz, aby zostawić go tam, gdzie motyw wywołuje hook, zwykle w kolumnie akcji obok kosza.
- **Pokaż cenę dla każdej kombinacji**: cena wybranej kombinacji, przekreślona cena przy rabacie i różnica względem bieżącego wiersza. Cena jest zgodna z wyświetlaniem brutto lub netto dla grupy klienta.
- **Pokaż stan magazynowy**: W magazynie, Zostało tylko X, Dostępne na zamówienie lub Brak w magazynie. Komunikat „Zostało tylko X” korzysta z progu pozostałej ilości ustawionego w PrestaShop. Nic nie jest wyświetlane, gdy zarządzanie stanami jest wyłączone.
- **Pokaż zdjęcie kombinacji**: pierwsze zdjęcie przypisane do kombinacji, w przeciwnym razie zdjęcie główne produktu.
- **Niedostępne kombinacje**: _Pokaż jako nieaktywne_ lub _Ukryj_. Wartość bieżącego wiersza jest zawsze widoczna.
- **Wykluczone produkty**: ID produktów oddzielone przecinkami. Selektor nie pojawia się dla tych produktów, a serwer odrzuca każdą zmianę.
- **Kolor akcentu**: kolor głównego przycisku i wybranych wartości.
- **Zapisuj historię zmian**: zasila statystyki widoczne pod formularzem.

## Po stronie klienta

### Tryb okna

Przycisk **Zmień** otwiera okno ze zdjęciem kombinacji, nazwą produktu i ilością z wiersza. Grupy atrybutów są w kolejności z katalogu:

- grupy typu kolor: próbki, z teksturą atrybutu, jeśli istnieje;
- grupy typu radio lub lista: przyciski, a powyżej 8 wartości lista rozwijana.

Na dole cena, różnica ceny i stan magazynowy wyboru aktualizują się przy każdym kliknięciu. Przycisk **Zaktualizuj koszyk** pozostaje nieaktywny, dopóki wybór jest taki sam jak w wierszu lub niedostępny. Okno zamyka się klawiszem Escape, krzyżykiem lub kliknięciem poza nim, a obsługa z klawiatury działa strzałkami między wartościami grupy. Na telefonie okno wysuwa się od dołu ekranu.

### Tryb list rozwijanych

Każda grupa atrybutów staje się listą w wierszu. Zmiana jest wysyłana od razu po wyborze wartości. Wiersze atrybutów, które motyw już wyświetla (na przykład „Rozmiar: S”), są ukrywane, aby nie dublować informacji. Komunikat pod listami pokazuje trwającą aktualizację lub ewentualny błąd.

### Nieistniejąca kombinacja

Jeśli wybrana wartość nie istnieje z pozostałymi wybranymi atrybutami (np. brak M Niebieski w katalogu), moduł przechodzi na istniejącą kombinację zawierającą tę wartość, która zachowuje najwięcej obecnych atrybutów, w pierwszej kolejności taką, którą można zamówić.

## Kontrole przed zamianą

Przeglądarka wysyła produkt, bieżącą kombinację i wybraną kombinację. Serwer sprawdza następnie:

- token sesji;
- czy produkt jest aktywny i dostępny do zamówienia oraz czy tryb katalogu jest wyłączony;
- czy wybrana kombinacja należy do produktu i sklepu;
- czy pierwotny wiersz nadal jest w koszyku, bez personalizacji;
- czy produkt nie jest powiązany z regułą koszyka z prezentem w tym koszyku;
- czy ilość końcowa osiąga minimalną ilość kombinacji;
- czy stan magazynowy pokrywa ilość końcową, chyba że sprzedaż przy braku towaru jest dozwolona dla produktu.

Nowa kombinacja jest dodawana natywną metodą `updateQty`, a następnie stara jest usuwana metodą `deleteProduct`. Jeśli usunięcie się nie powiedzie, dodanie zostaje cofnięte. Jeśli wybrana kombinacja jest już w koszyku, ilości są sumowane w jednym wierszu. W przeciwnym razie nowy wiersz przejmuje datę dodania starego, aby zachować swoje miejsce w koszyku.

Po zamianie moduł wywołuje zdarzenie `updateCart` PrestaShop. Motyw przeładowuje wtedy listę, sumy i mini koszyk. Jeśli motyw nie zareaguje w ciągu 3 sekund, strona zostanie przeładowana.

## Wiersze, których to nie dotyczy

- produkty bez kombinacji lub z jedną kombinacją;
- wiersze z personalizacją (tekst, plik);
- produkty dodane gratis przez regułę koszyka;
- produkty wykluczone w konfiguracji.

## Historia i statystyki

Pod formularzem konfiguracji blok **Historia zmian** pokazuje:

- liczbę zmian i koszyków objętych zmianą w ciągu 30 dni;
- liczbę zmienionych koszyków zamienionych w zamówienia, wraz z odsetkiem;
- 10 najczęściej zmienianych produktów;
- 20 ostatnich zmian, z kombinacją początkową i wybraną.

Przycisk **Wyczyść historię** usuwa dane bieżącego sklepu. Produkt często zmieniany na większy rozmiar wskazuje na tabelę rozmiarów lub kartę produktu do poprawy.

## Motywy i dostosowanie

Motyw Classic i większość motywów od niego pochodnych wywołuje `displayCartExtraProductActions` w każdym wierszu koszyka. Jeśli Twój motyw go nie wywołuje, skrypt tworzy selektor na podstawie linków usuwania wierszy (`data-id-product` i `data-id-product-attribute`). Plik JavaScript jest ładowany tylko na stronie koszyka.

Aby dostosować wygląd, nadpisz w CSS motywu zmienne `--dfcc-accent`, `--dfcc-text` i `--dfcc-border` albo klasy `.dfcc-edit`, `.dfcc-modal__dialog` i `.dfcc-option`.

Przy mocno zmodyfikowanym motywie lub module koszyka bocznego przetestuj zmianę kombinacji na kopii sklepu, jako gość i jako zalogowany klient.

## Dla programistów

Po każdej udanej zmianie moduł wykonuje hook `actionDfCartCombinationChange` z parametrami `cart`, `id_product`, `id_product_attribute_from`, `id_product_attribute_to` i `quantity`. Moduł zewnętrzny może się do niego podpiąć, aby synchronizować CRM lub narzędzie analityczne.

## Znane ograniczenia

- W wersji 1.0.0 wiersze z personalizacją zachowują swoją kombinację.
- Zmiana odbywa się na stronie koszyka, nie w podsumowaniu procesu zamówienia ani w mini koszyku.
- Moduł koszyka bocznego, który nie korzysta ze zdarzenia `updateCart`, aktualizuje się dopiero po przeładowaniu strony.
