<script>. On cart update ha un’azione Reset to default che ripristina il suo template iniziale; Initialization no, quindi conserva una copia del tuo codice prima di cancellarlo.
Molto di ciò che i merchant scrivevano come script è ora un’impostazione integrata. Controlla prima Prima di scrivere uno script: un’impostazione continua a funzionare attraverso i redesign del carrello, mentre il tuo script potrebbe no.
Quale slot usare
Initialization
window.aftersell.cart.
Le chiamate di setup che fai qui (configure(...), events.on(...), hooks.*) possono essere chiamate in sicurezza all’inizio dello script anche prima che il carrello sia completamente avviato; vengono messe in buffer e applicate una volta pronto. Le azioni che leggono o modificano il carrello (come addItem o getCart) dovrebbero essere eseguite dentro ready() o un handler di eventi.
Lo slot parte con tre esempi commentati — aprire il drawer a ogni aggiunta, reagire a cart_loaded e nascondere le righe degli omaggi — quindi uno script Initialization non modificato non fa nulla. Rimuovi il commento da uno per provarlo, oppure sostituiscili.
La forma naturale per questo slot è una registrazione una tantum senza eventi coinvolti: registra il comportamento una volta e lascia che il carrello lo applichi da quel momento in poi. Nascondere le righe degli omaggi dal drawer, senza cambiare il totale, è l’esempio fornito di questo:
registerLineTransform viene eseguito per ogni riga durante il render, e setHidden riguarda solo la visualizzazione, quindi la riga resta nel carrello e conta comunque nel totale, semplicemente non appare nel drawer. Consulta Nascondere e rietichettare le righe del carrello per altre possibilità di un transform.
Le azioni che leggono il carrello vanno dentro ready():
shadowRoot: il carrello viene renderizzato dentro uno shadow root, quindi document.querySelector non può vedere nulla nel drawer.
On cart update
cart_updated, quindi modifichi solo il corpo, e il tuo codice riceve il cart aggiornato.
Questo slot è per le regole che devono essere rivalutate a ogni modifica del carrello. Una soglia per l’omaggio è il caso classico (spendi $75, ricevi una tote gratis) perché la risposta dipende dal contenuto corrente e nient’altro può dirti quando cambia:
Mantenere il carrello in uno stato desiderato
if (shouldHaveGift === hasGift) return; è ciò che rende tutto questo sicuro, e si generalizza a ogni script che mantiene il carrello in uno stato desiderato. Questo slot sia reagisce alle modifiche del carrello sia le provoca, quindi ogni addItem o removeItem vi rientra. Descrivi lo stato che vuoi, confrontalo con lo stato che hai e termina subito quando già coincidono, così l’handler converge dopo un solo passaggio invece di andare in loop. Consulta le due regole per la versione senza protezione da evitare e per il motivo per cui il payload è in sola lettura.
Su un negozio più lento vale anche la pena mantenere un flag di operazione in corso a livello di modulo, così due modifiche rapide non possono entrambe avviare un’aggiunta prima che la prima sia completata.
cart_updated scatta solo per le modifiche dopo il primo caricamento (tempistiche degli eventi), quindi uno script in questo slot non riconcilierà un carrello che è già idoneo al caricamento della pagina. Per una versione che gestisce entrambi i casi, iscriviti a cart_loaded e cart_updated con la stessa funzione dallo slot Initialization. Consulta Aggiungere automaticamente un omaggio a una soglia.Quando uno script si rompe
configure, events.on o hooks.register* più in basso non viene mai registrato. È la spiegazione più comune di “il mio handler non scatta mai” quando il codice sembra corretto.
Il carrello indica la riga che fallisce nella console del browser, e ogni slot viene eseguito con il proprio nome di file (aftersell-cart-init.js e aftersell-cart-cart-update.js), così puoi aprirne uno dal pannello Sources dei DevTools e impostare breakpoint. Consulta Debugging per i messaggi esatti e per il canale di debug che cattura gli errori degli hook tenuti fuori dalla console.
Poiché cart_loaded viene riproposto agli iscritti in ritardo, l’ordine di registrazione non conta mai. La struttura più sicura è registrare tutto prima e fare il lavoro rischioso dentro gli handler, dove un errore resta isolato a quell’handler.
Dove andare dopo
- Cart SDK: gli script personalizzati sono il modo in cui esegui il codice dell’SDK. Consulta i riferimenti di configure, eventi, azioni e hook per l’intera superficie, l’oggetto carrello per la forma di ciò che gli handler ricevono, e i casi d’uso per snippet pronti all’uso.
- Blocchi Custom code: per aggiungere markup al carrello. Nota che la modalità HTML del blocco Custom code non esegue JavaScript; usa gli script personalizzati (o la modalità React del blocco) per la logica.