setInternalProperties teilst du dem Warenkorb mit, dass sie eine Einheit sind.
So funktioniert die Gruppierung
Diese laufen über
setInternalProperties, nicht über Shopify. Sie sind ein reines Render-Overlay: Sie erreichen nie properties, werden nie in Shopify gespeichert und erscheinen nie auf der Bestellung.
Schritt 1: Finde heraus, was deine App schreibt
_), die eine ID, eine Referenz oder den Namen des Bundles enthält. Typisch ist etwas wie _bundle_id, _bundle_ref oder _parent_id. Notiere dir den exakten Schlüssel und ob eine Position als Hauptprodukt markiert ist.
Schritt 2: Auf die kanonischen Properties abbilden
Wenn deine App kein Hauptprodukt markiert, lass
_aftersell_cart_bundle_role komplett weg. Der Warenkorb wählt dann einen Anker für dich.Was du bekommst
bundle-Objekt, und der Drawer rendert das Bundle als einen einzelnen Artikel:
- Kinder werden unter dem Anker verschachtelt, statt als separate Zeilen zu erscheinen.
- Die Menge ist atomar. Eine Änderung der Bundle-Menge skaliert alle Mitglieder gemeinsam, anhand des
perAnchorQty-Verhältnisses jedes Kindes — ein Bundle mit zwei Stück einer Komponente behält also dieses Zwei-zu-eins-Verhältnis. - Das Entfernen ist atomar. Das Entfernen des Bundles entfernt jede Mitgliedsposition in einem einzigen Request, statt verwaiste Komponenten zurückzulassen.
- Eine Preiszeile. Was sie zeigt, folgt der Bundle-Preis-Einstellung am Cart items-Block: die Summe aller Mitglieder oder nur der Preis des Hauptprodukts.
Wie der Anker gewählt wird
- Die Position mit
_aftersell_cart_bundle_roleaufparent. - Andernfalls das Mitglied mit dem höchsten Preis.
- Andernfalls das erste Mitglied im Warenkorb.
Regeln, die du kennen solltest
- Ein Bundle braucht mindestens zwei Positionen. Eine einzelne Position mit einer Bundle-ID bleibt unangetastet und rendert normal.
- Native Shopify-Bundles sind bereits abgedeckt. Positionen, die Shopify selbst als componentized markiert, werden von dieser Gruppierung übersprungen und automatisch angepasst. Du brauchst das nur für Apps, die separate Positionen hinzufügen.
- Die Transform läuft bei jedem Render. Halte sie günstig und frei von Nebeneffekten. Rufe darin keine Actions auf und mache keine Fetches.
- Das Mergen ist additiv. Deine Properties werden mit denen anderer Transforms zusammengeführt. Bei einem echten Konflikt um denselben Schlüssel gewinnt die zuletzt registrierte Transform.
- Die Gruppierung läuft nach dem Ausblenden und Umbenennen und vor dem Sortieren. Eine Position, die du mit
setHiddenausblendest, wird also nie Teil eines Bundles, und ein Comparator sieht den Anker, nicht die Kinder.
Ein Bundle wieder auslesen
bundle.memberKeys, das den key jedes Mitglieds inklusive des Ankers enthält.
Für andere Zwecke nutzen
setInternalProperties gebaut wurde, aber das Overlay ist ein allgemeiner Kanal für rein anzeigebezogene Daten, die du aus einer Position ableitest. Alles, was du dort ablegst, ist unter line.internalProperties und in einem Custom-Code-Block lesbar, ohne den echten Warenkorb anzufassen:
properties[...]-Input im Produktformular gesetzt wird, sodass sie Shopify erreichen, egal wer das Hinzufügen ausführt.
Nächste Schritte
registerLineTransform: der Hook, über den das läuft.- Cart-Objekt: die Struktur von
bundleund seinen Kindern. - Cart-items-Block: die Bundle-Preis-Einstellung.