Bitte beachte, dass sich diese Dokumentation auf die neuste Version dieser Erweiterung bezieht. Wenn eine ältere Version eingesetzt wird, kann diese abweichen. Die jeweils passende Dokumentation befindet sich im Dokumentation-Verzeichnis der Erweiterung.
Lagerverwaltung
Die Shop-Erweiterung bietet eine einfache Lagerlogik für Produkte.
Zunächst musst du die Lagerfelder für dein Produkt aktivieren, indem du den Produkttyp konfigurierst. Anschließend findest du in allen Produkten dieses Typs folgende neue Felder:
- Auf Lager
- Lagermenge.
- Überverkäufe zulassen
Wenn du das Feld Auf Lager aktivierst, wird die Logik zum Verringern der Lagermenge aktiviert. Das Feld Lagermenge legt fest, wie viele Stück dieses Produkts noch bestellbar sind.Mit der Einstellung Überverkäufe zulassen kannst du festlegen, dass die Lagermenge auch negativ werden kann. Du lässt somit Überverkäufe zu und teilst deinem Käufer ggf. eine längere Versandzeit mit.
Verwendung in Fluid
In Fluid können folgende Eigenschaften am Produkt verwendet werden:
-
{product.inStock}gibttruezurück, wenn die Lager-Logik für das Produkt aktiviert ist. -
{product.stockAmount}gibt die aktuelle Lagermenge des Produktes als Integer zurück. -
{product.stockAmountAsString}gibt die aktuelle Lagermenge des Produktes als String zurück. -
{product.stockAllowBackorders}gibttruezurück, wenn Überverkäufe für dieses Produkt zulässig sind. -
{product.isBuyable}gibttruezurück, wenn das Produkt bestellt werden kann.flowchart TD A(["{product.isBuyable}"]) --> B{isDigitalProduct} B -- Yes --> T1([return true<br/>Digital product: always buyable]) B -- No --> C{isStockAllowBackorders} C -- No --> D{getStockAmount > 0} D -- Yes --> T2([return true<br/>Stock available]) D -- No --> E{isInStock} E -- No --> T3([return true<br/>Stock logic disabled]) E -- Yes --> F([return false<br/>No stock & stock logic enabled]) C -- Yes --> T4([return true<br/>Backorders enabled: always buyable])
Lagerverwaltung im Warenkorb-Checkout
Wenn du den Standard-Warenkorb und -Checkout nutzt, wird die Lagermenge zuerst in der Warenkorbansicht überprüft. Versucht der Nutzer, eine Menge zu bestellen, die nicht verfügbar ist, reduziert die Warenkorbansicht die Bestellung automatisch auf die maximal verfügbare Menge. Diese Prüfung und ggf. Reduzierung passiert in jedem Step des Checkouts.
Beim Abschluss des Checkouts (in dem Moment, wo der Käufer auf "Bestätigen und Bestellen" klickt) wird via BasketOrderController->orderAction der DecreaseStockAmountsEventListener ausgeführt.
Er prüft zunächst, ob es sich um ein digitales Produkt handelt – digitale Produkte werden übersprungen, da sie keine Lagermenge haben. Anschließend überprüft er, ob die Einstellung Auf Lager aktiviert ist; ist dies der Fall, verringert der Event Listener die Lagermenge des Produktes entsprechend der Bestellmenge.
Lagerverwaltung bei Stripe-Abonnements
Die Lagerverwaltung bei Stripe-Abonnements funktioniert etwas anders. Sie greift nur, wenn du einem Produkt eine Stripe-Preis-ID zugewiesen hast.
Anwendungsfall: Du legst reguläre Produkte mit zugewiesener Stripe-Preis-ID an, aktivierst die Abonnement-Buttons und deaktivierst den Warenkorb-Button. So kannst du deine Produkte als Abonnement-Artikel verwenden.
Die Logik hört auf das StripeSubscriptionCreatedEvent und fängt es im StripeSubscriptionCreatedDecreaseStockAmountsEventListener auf. Dieses Event verwendet das Stripe-Abonnement-Objekt, um alle Abonnement-Artikel zu identifizieren. Jeder Abonnement-Artikel enthält die Preis-ID und die zu verringernde Menge.Bei einem neuen Abonnement durchläuft der Listener alle Abonnement-Artikel, ermittelt den zugehörigen Produkt-Datensatz und – falls dieser das Feld Auf Lager aktiviert hat – verringert die Menge des Abonnement-Artikels.
