Szablon niestandardowy vs blok Custom code
- Szablon niestandardowy zastępuje renderowanie istniejącego bloku twoją własną strukturą i przekazuje ci dane tego bloku (tytuł i liczbę pozycji z Headera, sumy z Summary itd.). Nie dodaje niczego nowego; przestylizowuje jeden blok.
- Blok Custom code dodaje nowy blok dowolnego HTML lub Reacta w dowolnym miejscu koszyka.
Korzystanie z szablonu niestandardowego
- Zaznacz blok w edytorze i otwórz jego kartę Code.
- Edytuj domyślny szablon. Szablony niestandardowe to wyłącznie JSX (wybór HTML-albo-JSX jest zarezerwowany dla bloku Custom code).
- Kliknij Compile. Kompilacja usuwa typy i transpiluje JSX, więc wychwytuje błędy składni. Błędy typów nie zatrzymują kompilacji — edytor oznacza je w trakcie pisania, z tym samym IntelliSense, które autouzupełnia propsy bloku.
- Włącz szablon, aby koszyk używał go zamiast wbudowanego renderowania.
- Reset to default przywraca oryginalny szablon bloku w dowolnym momencie.
Pisanie szablonu z pomocą AI
- Zasady kompilacji (pojedyncze wyrażenie, brak
export default, brak importów) - Dokładne propsy, które otrzymuje blok, zgodne z tym, co pokazuje IntelliSense edytora
- Zablokowaną sygnaturę funkcji wymuszaną przez edytor
- Zasady specyficzne dla bloku (formaty pieniężne, które handlery podłączyć, wymagania dostępności)
- Sekcję do uzupełnienia, w którą wklejasz swój bieżący szablon i opisujesz zmianę, jakiej chcesz
Prompt jest specyficzny dla każdego bloku. Przycisk Copy AI prompt pojawia się tylko na blokach obsługujących szablony niestandardowe.
Co zastępuje twój szablon
Co zachowujesz: pozycję bloku w koszyku, jego przełącznik widoczności, jego ustawienia (które nadal zasilają otrzymywane propsy), panel Custom CSS koszyka oraz wbudowany szkielet ładowania.
To ostatnie zaskakuje ludzi. Blok sprawdza, czy koszyk wciąż się ładuje, zanim dotrze do twojego szablonu, więc wbudowany szkielet renderuje się podczas ładowania, a twój szablon uruchamia się dopiero, gdy koszyk jest gotowy. Nie musisz budować stanu ładowania.
Co jest dostępne wewnątrz szablonu
- Dostajesz pięć hooków:
useState,useEffect,useMemo,useRefiuseCallback. PlusFragment, dla<>…</>. - Nie ma importów. Nie możesz niczego
importować i nie ma obiektuReactw zakresie, więc żadnegoReact.useReducer, żadnegoReact.Children. Jeśli hooka nie ma na powyższej liście, nie jest dostępny. - Propsy są tylko do odczytu. Mutowanie propa nic użytecznego nie da. Aby zmienić koszyk, użyj propów-handlerów, które daje ci blok (
onClose,increment,selectPlanitd.), zamiast pisać bezpośrednio do propsów. windowjest osiągalne, więc szablon może wywołać Cart SDK przezwindow.aftersell.cart, gdy potrzebuje czegoś, czego propsy bloku nie pokrywają.
Konwencje wspólne dla wszystkich bloków
- Propsy
*Htmlto wstępnie oczyszczony rich text. Renderuj je przezdangerouslySetInnerHTML. Przeszły już przez sanitizer koszyka, a tokeny sprzedawcy jak{{total_price}}są już rozwiązane. - Ceny przychodzące jako
stringsą już sformatowane w formacie walutowym sklepu. Ceny jakonumbersą w centach. Blok daje ci jedno albo drugie, a tabela każdego bloku mówi które. isLoadingjest zawszefalsewewnątrz szablonu. Blok renderuje swój wbudowany szkielet i wywołuje twój szablon dopiero po załadowaniu koszyka, więc prop jest przekazywany dla kompletności, a nie po to, żebyś na nim rozgałęział logikę.
Kilka bloków w pewnych stanach nie zwraca w ogóle niczego, więc twój szablon nigdy nie jest wywoływany z pustymi danymi. Szablon Rewards nigdy nie widzi pustych
milestones, a szablon Subscription upgrade nigdy nie widzi view równego null. Dokumentacja każdego bloku odnotowuje, gdzie to obowiązuje, więc możesz pominąć gałąź stanu pustego.Stylizowanie szablonu niestandardowego
Dwie rodziny klas
Zatem
cart-internal-header__title sprawia, że tytuł wygląda jak wbudowany tytuł, a cart-external-header__title to uchwyt, za który masz chwycić, gdy chcesz zmienić jego wygląd.
Małe zmiany: zachowaj obie nazwy klas
cart-external-*.
Restrukturyzacja: porzuć obie nazwy klas
cart-internal-*, ponieważ wbudowany CSS był pisany dla wbudowanego DOM. Zachowaj te klasy na zrestrukturyzowanej strukturze, a odziedziczysz reguły układu zakładające elementy, których już nie masz: kontenery flex oczekujące innych dzieci, odstępy między elementami, które się przesunęły, pozycjonowanie względem czegoś, co usunąłeś. Zwykle objawia się to tym, że twój własny CSS „nie działa”, bo wygrywają reguły wbudowane.
Dwa sposoby na stylizację tego, co zbudujesz:
Opcja 1: własne nazwy klas plus Custom CSS
.header czy .title ryzykuje kolizję z własnymi klasami koszyka, szablonem innej aplikacji lub przyszłym blokiem.
Opcja 2: style inline
:hover i innych pseudoklas, brak media queries i brak ponownego użycia między blokami. Sięgnij po opcję 1, gdy potrzebujesz któregokolwiek z nich.
Wybór podejścia
Koszyk renderuje się w shadow root, więc arkusz stylów twojego motywu nie sięga do jego wnętrza. Style dla szablonu niestandardowego muszą pochodzić z własnego panelu Custom CSS koszyka lub ze stylów inline, nie z motywu. Zobacz Niestandardowy CSS.
Gdy szablon zawodzi
Ponieważ blok po cichu znika, zamiast widocznie zgłaszać błąd, zawsze sprawdzaj szablon w podglądzie przed publikacją. Jeśli blok zniknął, najpierw otwórz konsolę przeglądarki.
Dwie rzeczy warte zabezpieczenia, bo obie zawieszają szablon, który zakłada inaczej:
- Propsy dopuszczające null. Wiele propsów jest
nullw normalnych warunkach (logoUrlbez logo,imageUrlbez obrazu,variantTitlena produkcie z jednym wariantem). Sprawdzaj przed użyciem. - Tablice, które mogą być puste.
discountTagsidiscountCodessą[]znacznie częściej niż nie.
Ograniczenia
- Szablony niestandardowe to nadpisania wyświetlania. Aby uruchamiać logikę na koszyku (subskrybować zdarzenia, dodawać pozycje, reagować na zmiany), użyj Niestandardowych skryptów i Cart SDK.
- Obsługuje je prawie każdy blok. Wyjątkami są blok Express payments, który hostuje własne przyciski płatności Shopify, oraz sam kontener Cart items, choć wiersz Product wewnątrz niego szablon niestandardowy obsługuje.
- Szablon nie może zmienić tego, co blok fundamentalnie robi. Zmienia sposób prezentacji danych bloku, a nie dane czy zachowanie za nimi.
Propsy każdego bloku
Blok Custom code to jedyna powierzchnia, która dodaje strukturę zamiast zastępować renderowanie bloku, więc jego propsy są inne: cały koszyk plus akcja dodania do koszyka. Zobacz Bloki Custom code → Propsy.