Markus Michalski FAQ

Klaro Cookie Consent: Technik

Technische Details zu Klaro Cookie Consent für Shopware 6.7 - Architektur, Plugin-Struktur, Datenbank-Tabellen, überschriebene Template-Blöcke und Snippet-Namensräume.

English Version

Zurück zur Übersicht

Klaro Cookie Consent: Technik

Diese Dokumentation bezieht sich immer auf die aktuellste veröffentlichte Version.

Architektur

graph TD
    A["StorefrontRenderEvent"] --> B["StorefrontRenderSubscriber"]
    B --> C["KlaroConfigService"]
    C --> D["Cookie-Services aus der Datenbank laden"]
    C --> E["Snippet-Texte über den Translator laden"]
    C --> F["Plugin-Konfiguration über SystemConfig"]
    D --> G["Klaro-JS-Konfiguration erzeugen"]
    E --> G
    F --> G
    G --> H["Twig-Template gibt die Konfiguration aus"]
    H --> I["Klaro-JS initialisiert"]

Der Subscriber lauscht auf das StorefrontRenderEvent und stellt dem Template die Parameter mmdKlaroActive, mmdKlaroConfig, mmdKlaroPrimaryColor, mmdKlaroSecondaryColor, mmdKlaroDeclineColor, mmdKlaroGoogleConsentMode, mmdKlaroGoogleConsentModeWaitForUpdate und mmdKlaroShowFooterLink bereit. Der KlaroConfigService liest alle Einstellungen mit der ID des aktuellen Sales Channels, nur Services mit Zuordnung zu diesem Sales Channel kommen in die Konfiguration.

Sämtliche Texte landen im Klaro-Fallback-Schlüssel zz. Dadurch zeigt Klaro immer die Sprache des Shops und nicht die Sprache des Browsers.

Auswahlwerte (Kategorie, Position, Theme, Speichermethode) und Freitexte (Storage-Name, Datenschutz-URL, technischer Name) werden vor der Ausgabe gegen Allowlists beziehungsweise Zeichenmuster geprüft.

Plugin-Struktur

src/
├── MmdKlaroCookieConsent.php            Plugin-Klasse (Uninstall räumt Tabellen und Konfiguration auf)
├── Core/
│   ├── Content/CookieService/           Entity, Definition und Collection der Cookie-Services
│   │   └── Aggregate/                   Übersetzungs- und Sales-Channel-Zuordnung
│   └── Klaro/                           KlaroConfigService und KlaroConfigServiceInterface, baut die Klaro-Konfiguration
├── Storefront/Subscriber/               StorefrontRenderSubscriber
├── Migration/                           Datenbank-Migrationen
└── Resources/
    ├── app/administration/              Admin-Modul mmd-klaro-service
    ├── config/                          config.xml, services.xml
    ├── public/administration/           Vorkompilierte Admin-Assets
    ├── public/storefront/vendor/klaro/  klaro.js und klaro.css
    ├── snippet/                         Storefront-Snippets (de_DE, en_GB)
    └── views/storefront/                Template-Überschreibungen

Datenbank-Tabellen

Tabelle Inhalt
mmd_klaro_cookie_service Cookie-Services mit technischem Namen, Kategorie, Flags, Cookie-Regeln und Position
mmd_klaro_cookie_service_translation Titel und Beschreibung pro Sprache
mmd_klaro_cookie_service_sales_channel Zuordnung der Services zu Sales Channels

Das Plugin bringt vier Migrationen mit: Anlegen der Tabellen, Anlegen des Standard-Services session, Entfernen eines früheren Callback-Felds und Entfernen veralteter Konfigurationsfelder für Kategorie-Texte (ersetzt durch Snippets).

Template-Blöcke

Das Plugin erweitert drei Storefront-Templates über sw_extends. Diese Blöcke kann ein weiteres Plugin oder Theme ebenfalls erweitern:

Template Überschriebener Block Zweck
storefront/base.html.twig base_cookie_permission Unterdrückt den nativen Shopware-Cookie-Hinweis, wenn Klaro aktiv ist
storefront/base.html.twig base_body_script Gibt die Klaro-Konfiguration, den Google-Consent-Mode-Code, den Anchor-Handler und das Klaro-Skript aus
storefront/layout/footer/footer.html.twig layout_footer_service_menu_content Fügt den Footer-Link "Cookie-Einstellungen" an
storefront/layout/meta.html.twig layout_head_stylesheet Bindet klaro.css und die Farb-Variablen ein

Snippet-Namensräume

Namensraum Verwendung
mmd-klaro Storefront: Dialog-Texte und Kategorie-Texte
mmd-klaro-service Administration: Beschriftungen des Admin-Moduls

Erweiterungspunkte

Das Plugin löst keine eigenen Events aus, registriert keine Routen und keine Console-Befehle. Es abonniert ausschließlich das StorefrontRenderEvent.