Ukrywaj pozycje, których kupujący nie powinien widzieć, zmieniaj nazwy pozycji, które źle wyglądają, i kontroluj kolejność renderowania — wszystko bez dotykania rzeczywistej zawartości koszyka.
Zastępuje to starszy schemat ukrywania elementów koszyka przez CSS lub style.display = 'none'. Transformacja pozycji jest stosowana przy każdym renderze koszyka, więc przetrwa aktualizacje, ponowne rendery i ponowne otwarcia szuflady.
Ukrywanie to nie usuwanie. Ukryta pozycja pozostaje w koszyku kupującego, pozostaje w sumie i przechodzi do checkoutu; po prostu nie jest rysowana w szufladzie. Znika za to z getCart().items i itemCount, więc Twój własny kod również przestaje ją widzieć. Jeśli chcesz się jej pozbyć naprawdę, użyj removeItem.
Typowe rzeczy warte ukrycia:
Cztery settery dostępne na pozycji:
Komparator ma ten sam kształt, jakiego oczekuje Array.prototype.sort, i działa po ukrywaniu i zmianie nazw:
Zwracaj 0 dla par, które Cię nie interesują. Komparatory składają się jako tie-breakery, więc pierwszy, który zwróci wartość niezerową, decyduje o danej parze, a zwrócenie 0 przekazuje decyzję następnemu, zamiast wymuszać kolejność.
Ukryj cały blok, nie pozycję
Transformacja pozycji działa na pozycjach koszyka. Aby pokazywać różne ustawienia bloków według kraju, rynku lub waluty (na przykład różne progi Rewards), użyj warunków w edytorze koszyka. Kod nie jest potrzebny, a rozwiązanie przetrwa przeprojektowania koszyka. Suma i zawartość koszyka nie są typami warunków w edytorze.
Sięgaj po SDK, gdy Twojej reguły warunki nie potrafią wyrazić (ID produktów w koszyku, niestandardowa suma itd.). W takim przypadku odpytaj shadow root o publiczną klasę cart-external-*:
To działa po każdym renderze, więc blok może mignąć, zanim Twój kod go ukryje. Renderowanie warunkowe nie ma tego problemu, więc preferuj je wszędzie, gdzie pasuje.
Rzeczy, które trzeba zrobić dobrze
- Transformacje to wywołania konfiguracyjne. Rejestruj je na początku skryptu Initialization;
ready() nie jest potrzebne.
- Działają transformacje wszystkich. Twoja składa się z transformacjami zarejestrowanymi przez inne aplikacje. Nie możesz zastąpić ich transformacji, a one nie mogą odrzucić Twojej.
- Transformacja nie może zmienić ceny, ilości ani tożsamości. Zmienia tylko to, co się renderuje. Do prawdziwych zmian używaj akcji.
- Transformacja, która rzuci błąd, jest pomijana po cichu. Pozostałe nadal działają. Podczas rozwoju sprawdzaj
aftersellCartDebugEvents.
registerLineTransform zwraca funkcję wyrejestrowującą, jeśli będziesz chciał później to cofnąć.