Varianten-Preisaufschlag: Shop API und Headless
Varianten-Preisaufschlag in der Sylius Shop API: keine eigenen Endpunkte, aber berechnete Preise in price und originalPrice der Variante und in den Warenkorbpositionen, plus Grenzen bei lowestPriceBeforeDiscount.
Varianten-Preisaufschlag: Shop API und Headless
Das Plugin ist dual-mode: Storefront und Shop API liefern denselben Preis, weil beide über die Preisrechner von Sylius gehen, die das Plugin dekoriert (ab Sylius 2.3 auch den Katalog-Preisrechner, siehe Storefront und Warenkorb). Du musst für Headless-Betrieb nichts konfigurieren.
Das Plugin registriert keine eigenen API-Endpunkte, keine API-Ressourcen und keine Serializer.
graph LR
A["Storefront (Twig)"] --> C["Preisrechner (Decorator)"]
B["Shop API"] --> C
C --> D["Preis der Basisvariante"]
D --> E["Preis mit Aufschlag"]
Welche Felder sich ändern
| Feld | Verhalten |
|---|---|
price einer Produktvariante |
Preis mit Aufschlag in der kleinsten Währungseinheit |
originalPrice einer Produktvariante |
Nach derselben Formel aus dem ursprünglichen Preis der Basisvariante berechnet |
lowestPriceBeforeDiscount einer Produktvariante |
Unverändert, der Wert der Variante selbst |
appliedPromotions einer Produktvariante |
Zeigt die Katalog-Promotionen der Variante selbst, nicht die der Basisvariante |
| Preise der Warenkorbpositionen | Mit Aufschlag, weil Sylius sie bei jeder Neuberechnung des Warenkorbs über den Rechner setzt |
Die Preisfelder erscheinen nur, wenn der Channel bekannt ist. Fehlt für die Variante oder die Basisvariante der Preis im Channel, lässt Sylius price, originalPrice und lowestPriceBeforeDiscount in der Antwort weg.
Welcher Aufschlag gilt, richtet sich nach dem Channel der Anfrage: Hat der Channel eine eigene Einstellung, nutzt die API sie, sonst die globalen Werte.
Beispiel
Basisvariante mit price 2000, Variante mit Prozentsatz 150 und festem Aufschlag 0:
{
"code": "TSHIRT_XL",
"price": 3000,
"originalPrice": 3000
}
Die Antwort zeigt nur die betroffenen Felder, der Rest des Variantendokuments entspricht dem Standard von Sylius.
Hinweise für Frontends
- Nutze
priceundoriginalPriceder Variante. Ein eigenes Nachrechnen im Frontend ist nicht nötig und wäre fehleranfällig. - Das Plugin legt über die API keine Konfiguration offen. Aufschläge pflegst du ausschließlich im Admin.
- Ist der globale Schalter aus, liefert die API wieder die gespeicherten Channel-Preise.