Klaro Cookie Consent: Technische Details
Technische Details von Klaro Cookie Consent für Sylius 2 - Architektur, Plugin-Struktur, Tabellen, Admin-Twig-Hooks und Erweiterbarkeit.
Klaro Cookie Consent: Technische Details
Diese Dokumentation bezieht sich immer auf die aktuellste veröffentlichte Version.
Architektur
graph LR
A["Admin CRUD: ConsentService"] --> C["KlaroConfigBuilder"]
B["Admin CRUD: ChannelConfiguration"] --> C
C --> D["window.klaroConfig (JSON)"]
D --> E["klaro.js (vendored)"]
C --> F["Google Consent Mode Bruecke"]
F --> G["gtag consent update"]
Die gesamte Fachlogik liegt in KlaroConfigBuilder und den beiden Repositories, unabhängig von der Rendering-Ebene. Die Admin-CRUD-Oberflächen (ConsentService, ChannelConfiguration) sind reine Backoffice-Features; die Storefront-Banner greifen nur lesend auf das Ergebnis zu.
Plugin-Struktur
src/Entity ConsentService(+Translation), ChannelConfiguration, Enums
src/Repository Doctrine-Repositories hinter Interfaces
src/Factory Übersetzbare Factory für im Admin erstellte ConsentService
src/Form/Type Admin-Formulartypen
src/Klaro KlaroConfigBuilder (window.klaroConfig), PrivacyPolicyLinkResolver, NoticeExemptPages
src/Twig Storefront-Twig-Funktionen + Asset-URLs
src/Menu Gemeinsame "MMKreativ Plugins"-Admin-Sidebar-Gruppe
src/Command Setup-Command
src/Migrations Drei Doctrine-Migrationen
templates/shop Twig-Hook-Templates (Stylesheets, Scripts, Footer-Link)
templates/admin Titel-Blöcke der Admin-Seiten
Resources/public Vendorte klaro.js/klaro.css + KLARO-LICENSE.txt
Tabellen
graph TD
A["mmd_sylius_klaro_consent_service"] --> B["mmd_sylius_klaro_consent_service_translation"]
A --> C["mmd_sylius_klaro_consent_service_channel (Pivot)"]
D["sylius_channel"] --> C
D --> E["mmd_sylius_klaro_channel_configuration"]
Vier eigene Tabellen, angelegt über drei Migrationen: die Haupttabelle für Dienste, deren Übersetzungstabelle, die Many-to-Many-Zuordnung zu Channels, und eine Tabelle mit genau einer Konfigurationszeile pro Channel.
Admin Twig Hooks
Zusätzlich zu den drei Storefront-Hooks (siehe Storefront-Integration) hängt sich das Plugin mit vier Hooks in die eigenen Admin-Grid-Seiten ein, um Titel und Navigationsbuttons zwischen den beiden Grids zu setzen:
| Hook | Wirkung |
|---|---|
sylius_admin.klaro_channel_configuration.index.content.header.title_block |
Titel der Channel-Konfigurationen-Seite |
sylius_admin.klaro_consent_service.index.content.header.title_block |
Titel der Consent-Services-Seite |
sylius_admin.klaro_channel_configuration.index.content.header.title_block.actions |
Button zu "Consent services" |
sylius_admin.klaro_consent_service.index.content.header.title_block.actions |
Button zu "Klaro settings" |
Erweiterbarkeit
Das Plugin bringt bewusst keine eigenen Events oder Service-Tags für Dritte mit. Was sich anpassen lässt:
KlaroConfigBuilderInterfacedekorieren: Der Service ist als Interface mit Alias registriert und damit über den üblichen Symfony-Decorator-Mechanismus austauschbar, wenn du die erzeugteklaroConfig-Struktur verändern willst.- Resource-Klassen überschreiben:
ConsentService,ChannelConfigurationund ihre Repositories sind als normale Sylius-Resources registriert und lassen sich mit dem üblichen Sylius-Override-Mechanismus ersetzen, wie bei jeder anderen Sylius-Resource.
Darüber hinaus gibt es keine plugin-eigenen Erweiterungspunkte: keine PSR-14-Events, keine eigenen Service-Tags.
Qualitätssicherung
Behat deckt in drei Suiten das Anlegen/Bearbeiten/Löschen von Diensten, das Konfigurieren eines Channels und das Storefront-Rendering (Banner, klaro.js, Footer-Link, Google-Consent-Mode-Skript) für aktivierte, deaktivierte und unkonfigurierte Channels ab, über Minks Symfony-Session ohne Chrome. PHPStan läuft auf Level max, der Codestil folgt dem sylius-labs/coding-standard.