Template personalizzato vs. blocco Custom code
- Un template personalizzato sostituisce il rendering di un blocco esistente con il tuo markup, e ti passa i dati di quel blocco (il titolo e il conteggio articoli dell’Header, i totali del Summary e così via). Non aggiunge nulla di nuovo; ristilizza un blocco.
- Il blocco Custom code aggiunge un nuovo blocco di HTML o React arbitrario ovunque nel carrello.
Usare un template personalizzato
- Seleziona un blocco nell’editor e apri la sua scheda Code.
- Modifica il template predefinito. I template personalizzati sono solo JSX (la scelta tra HTML e JSX è esclusiva del blocco Custom code).
- Fai clic su Compile. La compilazione rimuove i tipi e transpila il JSX, quindi cattura gli errori di sintassi. Gli errori di tipo non bloccano una compilazione — l’editor li segnala inline mentre digiti, con lo stesso IntelliSense che completa automaticamente le prop del blocco.
- Attiva il template per far sì che il carrello lo usi al posto del rendering integrato.
- Reset to default ripristina il template originale del blocco in qualsiasi momento.
Scrivere un template con l’AI
- Le regole di compilazione (singola espressione, niente
export default, niente import) - Le prop esatte che il blocco riceve, corrispondenti a ciò che mostra l’IntelliSense dell’editor
- La firma di funzione bloccata che l’editor impone
- Regole specifiche del blocco (formati di denaro, quali handler collegare, requisiti di accessibilità)
- Una sezione da compilare dove incolli il tuo template attuale e descrivi la modifica che vuoi
Il prompt è specifico per ogni blocco. Il pulsante Copy AI prompt appare solo sui blocchi che supportano i template personalizzati.
Cosa sostituisce il tuo template
Cosa mantieni: la posizione del blocco nel carrello, il suo interruttore di visibilità, le sue impostazioni (che continuano ad alimentare le prop che ricevi), il pannello Custom CSS del carrello e lo skeleton di caricamento integrato.
Quest’ultimo sorprende molti. Il blocco verifica se il carrello sta ancora caricando prima di raggiungere il tuo template, quindi lo skeleton integrato viene renderizzato durante il caricamento e il tuo template viene eseguito solo quando il carrello è pronto. Non devi costruire uno stato di caricamento.
Cosa è disponibile dentro un template
- Hai cinque hook:
useState,useEffect,useMemo,useRefeuseCallback. PiùFragment, per<>…</>. - Non ci sono import. Non puoi fare
importdi nulla, e non c’è un oggettoReactdisponibile, quindi nienteReact.useReducer, nienteReact.Children. Se un hook non è nell’elenco qui sopra, non è disponibile. - Le prop sono in sola lettura. Mutare una prop non farà nulla di utile. Per modificare il carrello, usa le prop handler che il blocco ti dà (
onClose,increment,selectPlane così via) invece di scrivere direttamente sulle prop. windowè raggiungibile, quindi un template può chiamare il Cart SDK tramitewindow.aftersell.cartquando gli serve qualcosa che le prop del blocco non coprono.
Convenzioni comuni a tutti i blocchi
- Le prop
*Htmlsono rich text pre-sanificato. Renderizzale condangerouslySetInnerHTML. Sono già passate attraverso il sanificatore del carrello, e i token del merchant come{{total_price}}sono già risolti. - I prezzi che arrivano come
stringsono già formattati nel formato di denaro del negozio. I prezzi comenumbersono in centesimi. Un blocco ti dà l’uno o l’altro, e la tabella di ogni blocco indica quale. isLoadingè semprefalsedentro un template. Il blocco renderizza il suo skeleton integrato e chiama il tuo template solo quando il carrello è stato caricato, quindi la prop viene passata per completezza, non perché tu debba ramificare su di essa.
Alcuni blocchi non restituiscono nulla in certi stati, quindi il tuo template non viene mai chiamato con dati vuoti. Il template di Rewards non vede mai
milestones vuoto, e il template di Subscription upgrade non vede mai una view null. Il riferimento di ogni blocco indica dove questo si applica, così puoi saltare il ramo dello stato vuoto.Stilizzare un template personalizzato
Le due famiglie di classi
Quindi
cart-internal-header__title è ciò che fa sembrare il titolo come il titolo integrato, e cart-external-header__title è la maniglia che dovresti afferrare quando vuoi cambiarne l’aspetto.
Piccole modifiche: mantieni entrambi i nomi di classe
cart-external-*.
Ristrutturazione: elimina entrambi i nomi di classe
cart-internal-* perché il CSS integrato è stato scritto per il DOM integrato. Mantieni quelle classi su markup ristrutturato ed erediti regole di layout che presuppongono elementi che non hai più: contenitori flex che si aspettano figli diversi, spaziature tra elementi spostati, posizionamento relativo a qualcosa che hai rimosso. Questo di solito si manifesta come il tuo CSS che “non funziona” quando in realtà sono le regole integrate a vincere.
Due modi per stilizzare ciò che hai costruito:
Opzione 1: i tuoi nomi di classe più Custom CSS
.header o .title rischia di entrare in conflitto con le classi del carrello, con il template di un’altra app o con un blocco futuro.
Opzione 2: stili inline
:hover o altre pseudo-classi, niente media query e nessun riuso tra blocchi. Passa all’Opzione 1 quando ti serve una di queste cose.
Scegliere un approccio
Il carrello viene renderizzato in uno shadow root, quindi il foglio di stile del tuo tema non può raggiungerne l’interno. Gli stili per un template personalizzato devono arrivare dal pannello Custom CSS del carrello o da stili inline, non dal tuo tema. Consulta CSS personalizzato.
Quando un template fallisce
Poiché il blocco scompare silenziosamente invece di mostrare un errore visibile, controlla sempre un template in anteprima prima di pubblicare. Se un blocco è sparito, apri prima la console del browser.
Due cose da cui proteggersi, dato che entrambe fanno crashare un template che presume il contrario:
- Prop nullable. Molte prop sono
nullin condizioni normali (logoUrlsenza logo,imageUrlsenza immagine,variantTitlesu un prodotto a variante singola). Verificale prima di usarle. - Array che possono essere vuoti.
discountTagsediscountCodessono[]molto più spesso di quanto pensi.
Limitazioni
- I template personalizzati sono override di visualizzazione. Per eseguire logica sul carrello (iscriverti agli eventi, aggiungere articoli, reagire alle modifiche), usa gli script personalizzati e il Cart SDK.
- Quasi tutti i blocchi ne supportano uno. Le eccezioni sono il blocco Express payments, che ospita i pulsanti di pagamento di Shopify, e il contenitore Cart items stesso, anche se la riga Product al suo interno supporta un template personalizzato.
- Un template non può cambiare ciò che un blocco fa fondamentalmente. Cambia come i dati del blocco vengono presentati, non i dati o il comportamento sottostante.
Prop per ogni blocco
Il blocco Custom code è l’unica superficie che aggiunge markup invece di sostituire il rendering di un blocco, quindi le sue prop sono diverse: l’intero carrello, più un’azione di aggiunta al carrello. Consulta Blocchi Custom code → Prop.