Markus Michalski FAQ

Warenkorb- & Checkout-Attribute: Technik

Architektur, Entscheidungs-Flow, Plugin-Struktur, Migrationen und das CheckoutVisibility-Enum des Sylius-Plugins.

English Version

Zurück zur Übersicht

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.