Skip to main content
Actions lesen und ändern den Warenkorb. Sie liegen unter window.aftersell.cart.actions.
Actions laufen, nachdem der Warenkorb bereit ist — innerhalb von ready() oder eines Event-Handlers.
Bevor der Warenkorb lädt, sind Actions Stubs. Jede protokolliert eine Konsolenwarnung mit dem Namen der Action, zum Beispiel cart.actions.addItem() called before the cart loaded, und tut nichts. Die asynchronen Actions lösen trotzdem ein Promise auf, sodass eine .then()-Kette normal läuft, statt zu werfen; getCart() gibt null zurück und formatMoney() einen leeren String.Nichts geht kaputt, wenn du eine zu früh aufrufst, aber es passiert auch nichts. Achte auf diese Warnung in der Konsole, wenn eine Action scheinbar nichts tut.

Jede Action

Eine Action aus einem cart_updated-Handler aufzurufen kann eine Schleife erzeugen. Lies zuerst die zwei Regeln.

Drawer

open und close

Öffnet oder schließt den Cart-Drawer. Beide sind synchron und nehmen keine Argumente.

Lesen

getCart()

Gibt das aktuelle Cart-Objekt zurück, oder null, bevor es geladen wurde. Das Ergebnis ist eine Kopie, das Mutieren ändert also nicht den echten Warenkorb.
Da es ein Snapshot ist, halte das Ergebnis nicht fest; lies es jedes Mal neu, wenn du aktuelle Daten brauchst. In einem Event-Handler hast du den frischen Warenkorb bereits als Payload, dort ist getCart() also redundant.

formatMoney(cents)

Formatiert einen Betrag in kleinster Einheit mit dem Geldformat deines Shops. Jeder Preis im SDK ist in Cents — so machst du daraus etwas Anzeigbares.
Überschreibe das Format mit configure({ money_format }).

Den Warenkorb ändern

Die Item-Actions identifizieren eine Zeile über ihren Shopify-key, nicht über die Varianten-ID, weil ein Warenkorb dieselbe Variante in mehreren Zeilen mit unterschiedlichen Properties enthalten kann. Lies ihn aus getCart().items[n].key.

addItem(variantId, quantity?)

Fügt dem Warenkorb eine Variante hinzu. quantity ist standardmäßig 1. Wird aufgelöst, sobald sich der Warenkorb eingependelt hat.
Das Hinzufügen einer bereits im Warenkorb vorhandenen Variante erhöht die Menge dieser Zeile, statt eine zweite Zeile zu erstellen, solange die bestehende Zeile keine Line-Item-Properties hat. Eine Zeile mit Properties ist eine eigenständige Zeile, du bekommst also eine neue.

removeItem(key)

Entfernt eine Zeile vollständig.

updateItemQuantity(key, quantity)

Setzt die Menge einer Zeile. Die Übergabe von 0 entfernt die Zeile.
Das zweite Beispiel kann sicher aus cart_updated laufen, weil die > 1-Prüfung beim zweiten Durchlauf false ist. Siehe die zwei Regeln.

replaceLineVariant(key, variantId)

Tauscht die Variante einer Zeile und behält dabei Menge und Properties. Nützlich für einen Größen- oder Geschmacks-Umschalter im Warenkorb.
Der Selling Plan der Zeile wird beim Tausch zurückgesetzt. Eine Abo-Zeile wird zu einem Einmalkauf, es sei denn, du wendest einen Plan erneut an.
Der Tausch ist ein Hinzufügen gefolgt von einem Entfernen, keine Bearbeitung an Ort und Stelle — das Ergebnis ist also eine neue Zeile: Sie bekommt einen neuen key und landet am Ende des Warenkorbs. Lies getCart() danach neu, statt den übergebenen Key wiederzuverwenden.

Aktualisieren

refresh()

Lädt den Warenkorb neu von Shopify. Verwende es, nachdem etwas außerhalb des SDK den Warenkorb geändert hat und der Drawer es nicht bemerkt hat.
Meistens brauchst du das nicht, da Aftersell bereits auf Shopifys Standard-Warenkorb-Events lauscht und von selbst neu lädt. Greif dazu, wenn eine benutzerdefinierte Integration diese umgeht.

visualRefresh()

Führt die Render-Transformationen erneut aus, ohne den Warenkorb von Shopify neu zu laden. Du brauchst es selten: Das Registrieren (oder Deregistrieren) einer Line-Transformation, eines Comparators, eines Enrichers oder eines der beiden Subscription-Hooks löst eines für dich aus. Nur die zwei Add-to-cart-Hooks tun das nicht, da sie nichts ändern, was bereits auf dem Bildschirm ist. Greif dazu, wenn sich etwas ändert, wovon eine Transformation abhängt, der Warenkorb selbst aber nicht:

Hinweise und Randfälle

  • Asynchrone Actions werden aufgelöst, wenn die Änderung abgeschlossen ist. Eine abzuwarten lässt dich Arbeit sequenzieren, nachdem der Warenkorb sich tatsächlich aktualisiert hat.
  • getCart() gibt eine Kopie zurück. Sie zu mutieren tut dem echten Warenkorb nichts.
  • Es gibt keine Action für Rabattcodes. Angewendete Codes sind auf dem Warenkorb (discountCodes, totalDiscount) und pro Zeile (discountAllocations) lesbar; Käufer wenden sie über den Discount code-Block an.
  • Es gibt keine Action für Warenkorb-Attribute oder Notizen. Attribute sind auf dem Cart-Objekt lesbar; Käufer schreiben Notizen über den Notes-Block.
  • Um eine Zeile auszublenden statt zu entfernen, verwende registerLineTransform. Entfernen ändert die Gesamtsumme des Käufers; Ausblenden nicht.

Nächste Schritte

  • Cart-Objekt: was getCart() zurückgibt.
  • Events: wann du diese Actions ausführen solltest.
  • Hooks: ändere, wie eine Zeile gerendert wird, statt den Warenkorb zu ändern.
  • Use Cases: vollständige Lösungen für häufige Anforderungen.