setInternalProperties est la façon d’indiquer au panier qu’elles ne font qu’un.
Comment fonctionne le regroupement
Elles passent par
setInternalProperties, pas par Shopify. C’est une surcouche d’affichage uniquement : elles n’atteignent jamais properties, ne sont jamais persistées vers Shopify et n’apparaissent jamais sur la commande.
Étape 1 : découvrez ce que votre application écrit
_) contenant un ID, une référence ou le nom du bundle. Quelque chose comme _bundle_id, _bundle_ref ou _parent_id est typique. Notez la clé exacte, et si une ligne est marquée comme produit principal.
Étape 2 : mappez-la sur les propriétés canoniques
Si votre application ne marque pas de produit principal, omettez complètement
_aftersell_cart_bundle_role. Le panier choisit une ancre pour vous.Ce que vous obtenez
bundle et le tiroir affiche le bundle comme un seul article :
- Les enfants s’imbriquent sous l’ancre au lieu d’apparaître comme des lignes séparées.
- La quantité est atomique. Changer la quantité du bundle met à l’échelle chaque membre ensemble, en utilisant le ratio
perAnchorQtyde chaque enfant, de sorte qu’un bundle avec deux exemplaires d’un composant conserve cette relation de deux pour un. - La suppression est atomique. Supprimer le bundle supprime chaque ligne membre en une seule requête, plutôt que de laisser des composants orphelins.
- Une seule ligne de prix. Ce qu’elle affiche suit le paramètre bundle price du bloc Cart items : le total de tous les membres, ou le prix du produit principal seul.
Comment l’ancre est choisie
- La ligne avec
_aftersell_cart_bundle_roledéfinie àparent. - Sinon, le membre au prix le plus élevé.
- Sinon, le premier membre dans le panier.
Règles à connaître
- Un bundle a besoin d’au moins deux lignes. Une ligne seule portant un ID de bundle est laissée telle quelle et s’affiche normalement.
- Les bundles natifs Shopify sont déjà gérés. Les lignes que Shopify lui-même marque comme componentisées sont ignorées par ce regroupement et adaptées automatiquement. Vous n’en avez besoin que pour les applications qui ajoutent des lignes séparées.
- La transformation s’exécute à chaque rendu. Gardez-la légère et sans effets de bord. N’appelez pas d’actions et ne faites pas de fetch depuis son intérieur.
- La fusion est additive. Vos propriétés fusionnent avec celles définies par une autre transformation. En cas de véritable conflit sur la même clé, la dernière transformation enregistrée l’emporte.
- Le regroupement s’exécute après le masquage et le renommage, et avant le tri. Ainsi, une ligne que vous masquez avec
setHiddenne devient jamais partie d’un bundle, et un comparateur voit l’ancre, pas les enfants.
Relire un bundle
bundle.memberKeys, qui contient la key de chaque membre, y compris l’ancre.
L’utiliser pour d’autres choses
setInternalProperties a été conçu, mais la surcouche est un canal général pour des données d’affichage uniquement que vous dérivez d’une ligne. Tout ce que vous y placez est lisible dans line.internalProperties et dans un bloc Custom code, sans toucher au vrai panier :
properties[...] sur le formulaire produit pour qu’elle parvienne à Shopify quel que soit celui qui effectue l’ajout.
Pour aller plus loin
registerLineTransform: le hook par lequel tout cela passe.- Objet cart : la forme de
bundleet de ses enfants. - Bloc Cart items : le paramètre de prix de bundle.