setInternalProperties è il modo in cui dici al carrello che sono una cosa sola.
Come funziona il raggruppamento
Queste passano per
setInternalProperties, non per Shopify. Sono un overlay solo di rendering: non raggiungono mai properties, non vengono mai persistite su Shopify e non appaiono mai sull’ordine.
Passo 1: scopri cosa scrive la tua app
_) che contiene un ID, un riferimento o il nome del bundle. Qualcosa come _bundle_id, _bundle_ref o _parent_id è tipico. Annota la chiave esatta, e se una riga è marcata come prodotto principale.
Passo 2: mappala sulle proprietà canoniche
Se la tua app non marca un prodotto principale, ometti del tutto
_aftersell_cart_bundle_role. Il carrello sceglie un anchor per te.Cosa ottieni
bundle e il drawer renderizza il bundle come un singolo articolo:
- I figli si annidano sotto l’anchor invece di apparire come righe separate.
- La quantità è atomica. Cambiare la quantità del bundle scala ogni membro insieme, usando il rapporto
perAnchorQtydi ciascun figlio, quindi un bundle con due unità di un componente mantiene quella relazione due a uno. - La rimozione è atomica. Rimuovere il bundle rimuove ogni riga membro in una sola richiesta, invece di lasciare componenti orfani.
- Una sola riga di prezzo. Ciò che mostra segue l’impostazione bundle price sul blocco Cart items: il totale di tutti i membri, o solo il prezzo del prodotto principale.
Come viene scelto l’anchor
- La riga con
_aftersell_cart_bundle_roleimpostato aparent. - Altrimenti, il membro con il prezzo più alto.
- Altrimenti, il primo membro nel carrello.
Regole che vale la pena conoscere
- Un bundle richiede almeno due righe. Una singola riga che porta un bundle ID viene lasciata stare e renderizza normalmente.
- I bundle nativi di Shopify sono già gestiti. Le righe che Shopify stesso marca come componentizzate vengono saltate da questo raggruppamento e adattate automaticamente. Ti serve solo per le app che aggiungono righe separate.
- Il transform viene eseguito a ogni render. Mantienilo leggero e privo di effetti collaterali. Non chiamare azioni né fare fetch al suo interno.
- Il merge è additivo. Le tue proprietà si fondono con quelle impostate da un altro transform. In caso di conflitto reale sulla stessa chiave, vince l’ultimo transform registrato.
- Il raggruppamento avviene dopo il nascondere e il rinominare, e prima dell’ordinamento. Quindi una riga che nascondi con
setHiddennon diventa mai parte di un bundle, e un comparator vede l’anchor, non i figli.
Rileggere un bundle
bundle.memberKeys, che contiene la key di ogni membro incluso l’anchor.
Usarlo per altre cose
setInternalProperties è stato costruito, ma l’overlay è un canale generale per dati solo di rendering che derivi da una riga. Qualsiasi cosa metti lì è leggibile in line.internalProperties e in un blocco Custom code, senza toccare il carrello reale:
properties[...] nascosto nel form del prodotto in modo che raggiunga Shopify indipendentemente da chi esegue l’aggiunta.
Dove andare adesso
registerLineTransform: l’hook attraverso cui questo viene eseguito.- Cart object: la struttura di
bundlee dei suoi figli. - Cart items block: l’impostazione del prezzo del bundle.