Varianten-Preisaufschlag: Erweiterbarkeit
Varianten-Preisaufschlag erweitern: dekorierte Preisrechner, Service-IDs und Repository, Sylius-Ressource, Twig-Hook des Variantenformulars, Setup-Befehl, Routen und Zusammenspiel mit anderen Preis-Decoratoren.
Varianten-Preisaufschlag: Erweiterbarkeit
Das Plugin definiert keine eigenen Service-Tags und keine Konfigurationsoptionen. Die Erweiterungspunkte sind die Sylius-Mechanismen, über die es eingebunden ist.
Preisrechner
Die Klasse Mmd\SyliusVariantPriceSurchargePlugin\Calculator\SurchargeAwareProductVariantPriceCalculator dekoriert den Service sylius.calculator.product_variant_price (Interface ProductVariantPricesCalculatorInterface).
| Methode | Verhalten |
|---|---|
calculate() |
Preis mit Aufschlag |
calculateOriginal() |
Ursprünglicher Preis mit Aufschlag |
calculateLowestPriceBeforeDiscount() |
Wird unverändert an den dekorierten Rechner weitergereicht |
Ab Sylius 2.3 gibt es zusätzlich den Service sylius.calculator.product_variant_catalog_price (Interface CatalogPricesCalculatorInterface). Ihn dekoriert die Klasse SurchargeAwareCatalogPricesCalculator, eine Unterklasse des Rechners oben ohne eigene Logik. Das erledigt der Compiler-Pass DecorateCatalogPricesCalculatorPass, den das Bundle registriert. Existiert der Service nicht, etwa unter Sylius 2.2, tut der Pass nichts.
Dekoriert ein anderes Plugin oder dein Projekt denselben Service, bestimmt die Decorator-Priorität die Reihenfolge. Das Plugin setzt für seine Decorator keine eigene Priorität, es gilt der Standard. Es ruft den jeweils darunterliegenden Rechner für Variante und Basisvariante auf.
Den Channel für die Überschreibungen liest der Rechner aus dem Kontext ($context['channel']). Fehlt er, gelten die globalen Werte.
Repository und Ressource
| Zweck | Bezeichner |
|---|---|
| Ressource | mmd_sylius_variant_price_surcharge.product_variant_price_surcharge |
| Repository-Service | mmd_sylius_variant_price_surcharge.repository.product_variant_price_surcharge, als Alias auch über das Interface ProductVariantPriceSurchargeRepositoryInterface erreichbar |
| Entity | Mmd\SyliusVariantPriceSurchargePlugin\Entity\ProductVariantPriceSurcharge mit dem Interface ProductVariantPriceSurchargeInterface |
| Überschreibung pro Channel | Mmd\SyliusVariantPriceSurchargePlugin\Entity\Channel\ProductVariantPriceSurchargeChannel, eine einfache Doctrine-Entity ohne eigene Ressource, Grid und Repository |
| Einstellungen | VariantPriceSurchargeSettingsRepository mit der Methode getSettings(), liefert ohne gespeicherte Zeile ein Objekt mit aktivem Schalter |
Das Repository-Interface bietet zwei Methoden:
findOneByProductVariant()liefert den Aufschlag einer Variante samt den Überschreibungen pro Channel.findBaseVariantForProduct()liefert die Basisvariante eines Produkts.
Am Interface ProductVariantPriceSurchargeInterface erreichst du die Überschreibungen mit getChannelOverrides() (Collection, Schlüssel ist der Channel-Code), getChannelOverride(string $channelCode), addChannelOverride() und removeChannelOverride(). Auf der Überschreibung stehen isEnabled(), getPercentage() und getFixedSurcharge(), jeweils null, wenn der globale Wert gelten soll.
Admin-Oberfläche
| Punkt | Bezeichner |
|---|---|
| Twig-Hook des Formularbereichs | sylius_admin.product_variant.update.content.form.sections, Eintrag mmd_sylius_variant_price_surcharge |
| Template des Formularbereichs | @MmdSyliusVariantPriceSurchargePlugin/admin/product_variant/form/sections/price_surcharge.html.twig |
| Form-Erweiterung | ProductVariantTypeExtension am Formulartyp ProductVariantType |
| Formulartypen | ProductVariantPriceSurchargeType (globale Felder, Sammlung der Channels) und ProductVariantPriceSurchargeChannelType (ein Channel) |
| Grid der Übersicht | mmd_sylius_variant_price_surcharge_admin_product_variant_price_surcharge |
| Routen | mmd_variant_price_surcharge_admin_settings für die Einstellungen, die Ressourcen-Routen der Übersicht ohne Anlegen, Bearbeiten und Anzeigen |
| Menü-Ereignis | sylius.menu.admin.main |
Konsolenbefehl
mmd:variant-price-surcharge:setup (Klasse Mmd\SyliusVariantPriceSurchargePlugin\Command\SetupCommand) ist als Service mmd_sylius_variant_price_surcharge.command.setup mit dem Tag console.command registriert. Was er tut, steht unter Installation und Betrieb.
Grenzen
- Die Formularerweiterung speichert den Aufschlag über Formular-Ereignisse, nicht über eine Eigenschaft an
ProductVariant. Der Aufschlag lässt sich deshalb nur über das Variantenformular und die Löschaktion der Übersicht pflegen. Das Plugin bringt weder eine Admin-API noch einen Import dafür mit. - Ein Konfigurationsbaum
mmd_sylius_variant_price_surchargeist vorhanden, enthält aber keine Optionen.