Warenkorb- & Checkout-Attribute: Technik
Architektur, Entscheidungs-Flow, Plugin-Struktur, Migrationen und das CheckoutVisibility-Enum des Sylius-Plugins.
Warenkorb- & Checkout-Attribute: Technik
Entscheidungs-Flow
graph TD
A["Order-Item in Warenkorb/Checkout/Uebersicht"] --> B{"Kill-Switch aktiv?"}
B -->|Nein| C["Nichts gerendert"]
B -->|Ja| D{"Attribut hat Wert am Order-Item?"}
D -->|Nein| C
D -->|Ja| E{"Anzeige-Konfiguration vorhanden?"}
E -->|Nein| C
E -->|Ja| F{"visibleInCart / checkoutVisibility gesetzt?"}
F -->|Nein| C
F -->|Ja| G["Rendern ueber SyliusAttribute-Partial"]
Plugin-Struktur
src/
Entity/ ProductAttributeDisplayConfig, Settings/CartCheckoutAttributesSettings
Enum/ CheckoutVisibility
Api/ State Provider für beide API-Ressourcen
Form/ Type- und Extension-Klasse für das Admin-Formular
Command/ SetupCommand
Controller/Admin/ CartCheckoutAttributesSettingsController
Menu/ AdminMenuListener, MenuGroup
Migrations/ 3 Doctrine-Migrationen
Twig/ CartCheckoutAttributeValuesExtension
config/
routes/ admin.yaml (Pflicht-Import), shop.yaml (leer, API via API Platform)
twig_hooks/ admin.yaml, shop.yaml
services.php
templates/
admin/product_attribute/form/
shop/cart/, shop/checkout/, shop/shared/order/
Entities & Migrationen
| Entity | Tabelle | Zweck |
|---|---|---|
ProductAttributeDisplayConfig |
mmd_sylius_cart_checkout_attributes_display_config |
Eine optionale Zeile pro Produktattribut, trägt visibleInCart und checkoutVisibility |
CartCheckoutAttributesSettings |
mmd_sylius_cart_checkout_attributes_settings |
Singleton-Zeile (id=1) mit dem Kill-Switch-Flag active |
| Migration | Zweck | |
| ----------- | ------- | |
Version20260917090000 |
Legt die Haupttabelle an, inklusive CHECK-Constraint "mandatory impliziert visible_in_checkout" | |
Version20260917130000 |
Legt die Einstellungstabelle an, befüllt die Singleton-Zeile (active = 1) |
|
Version20260918090000 |
Vereinigt visible_in_checkout und mandatory zum neuen Feld checkout_visibility, entfernt die beiden alten Spalten und den CHECK-Constraint |
Alle drei Migrationen sind reines MySQL-DDL und überspringen sich selbst auf jeder anderen Datenbank.
CheckoutVisibility-Enum
enum CheckoutVisibility: string
{
case NotVisible = 'not_visible';
case Visible = 'visible';
case Mandatory = 'mandatory';
}
Mandatory ist durch diese Konstruktion checkout-sichtbar - es gibt keine Kombination, die „Pflicht, aber verborgen“ bedeuten könnte. visibleInCart ist ein davon unabhängiges, eigenes Boolean-Feld.