Das Ergebnis wird einmal pro Request und Channel-Code zwischengespeichert (WidgetConfigResolver, kernel.reset), da mehrere Storefront-Templates auf derselben Seite denselben Channel abfragen.
src/
├── Api/
│ ├── AccessibilitySettingsProvider.php # API Platform State Provider
│ └── Resource/AccessibilitySettings.php # API-Resource (GET /shop/accessibility-settings)
├── DependencyInjection/
│ ├── Configuration.php
│ └── MmdSyliusAccessibilityExtension.php # Bundle-Extension, Doctrine-/Grid-/Hook-Prepend
├── Command/SetupCommand.php # mmd:accessibility:setup
├── Entity/
│ ├── ChannelSettings.php # einzige eigene Tabelle
│ ├── ChannelSettingsInterface.php
│ └── WidgetPosition.php # Enum: bottom_right, bottom_left
├── Form/Type/ChannelSettingsFormType.php # @internal
├── Menu/
│ ├── AdminMenuListener.php # @internal
│ └── MenuGroup.php # "MMKreativ Plugins"-Sidebar-Gruppe
├── Migrations/Version20261003140000.php
├── Settings/
│ ├── ChannelSettingsRepository.php
│ └── ChannelSettingsRepositoryInterface.php
├── Twig/AccessibilityTwigExtension.php
└── Widget/
├── WidgetConfig.php
├── WidgetConfigResolver.php
└── WidgetConfigResolverInterface.php
Eine einzige Tabelle, mmd_sylius_accessibility_channel_settings, geschlüsselt über channel_code statt über einen Fremdschlüssel - das Plugin braucht dafür keine Sylius-Core-Tabelle im eigenen Mapping.
| Spalte | Typ | Bedeutung |
|---|---|---|
channel_code |
string, unique |
Channel-Code, kein Fremdschlüssel |
enabled |
boolean |
Widget an/aus |
position |
string(16) |
bottom_right / bottom_left |
skip_link_enabled |
boolean |
Skip-Link an/aus |
show_font_size |
boolean |
Werkzeug Schriftgröße |
show_contrast |
boolean |
Werkzeug Kontrast |
show_color_filter |
boolean |
Werkzeug Farbfilter |
show_blue_light |
boolean |
Werkzeug Blaulichtfilter |
show_animations |
boolean |
Werkzeug reduzierte Bewegung |