Markus Michalski FAQ

Matomo Analytics: Erweiterbarkeit

Matomo Analytics für Sylius - austauschbare Interfaces, Service-IDs und Events, Beispiel für einen dekorierten Resolver und der Hinweis, welche Klassen nicht zur stabilen Erweiterungs-API gehören

English Version

Zurück zur Übersicht

Matomo Analytics: Erweiterbarkeit

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

Wovon du abhängen kannst

Das Plugin liefert wenige, gezielte Erweiterungspunkte. Als stabil gelten die Interfaces, Service-IDs und Events auf dieser Seite. Die Konstruktoren und Interna der konkreten Klassen sind ausdrücklich nicht Teil der Erweiterungs-API und können sich in einem Minor-Release ändern.

Leite nicht von den konkreten Klassen ab (Formulartyp, Listener, Twig-Erweiterung, Repository, Resolver). Dekoriere stattdessen die Interfaces unten oder setze eine eigene Implementierung ein.

Interfaces

Interface Aufgabe
Mmd\SyliusMatomoIntegrationPlugin\Tracking\TrackingConfigResolverInterface Löst die Tracking-Konfiguration eines Channels auf (forChannelCode(string): ?TrackingConfig). Storefront und Shop API greifen beide darüber zu, es ist deshalb der natürliche Punkt zum Dekorieren. Service-ID: mmd_sylius_matomo.tracking_config_resolver
Mmd\SyliusMatomoIntegrationPlugin\Settings\ChannelSettingsRepositoryInterface Liest die Einstellungen eines Channels aus der Datenbank (Service-ID mmd_sylius_matomo.channel_settings_repository)
Mmd\SyliusMatomoIntegrationPlugin\Entity\ChannelSettingsInterface Der Typ der Einstellungen in den Signaturen von Repository, Klaro-Anbindung und Tracking-Konfiguration. Das Modell selbst lässt sich nicht austauschen, siehe unten
Mmd\SyliusMatomoIntegrationPlugin\Klaro\KlaroAvailabilityInterface Entscheidet, ob das Klaro-Plugin verfügbar ist
Mmd\SyliusMatomoIntegrationPlugin\Klaro\ConsentServiceCatalogInterface Die Schnittstelle zum Klaro-Katalog. Eine eigene Implementierung kann einen anderen Consent-Manager anbinden

Das Einstellungs-Modell ist nicht austauschbar

Die Klasse ChannelSettings ist an mehreren Stellen fest eingetragen: im Repository, im Formular des Admins, im Grid und in der Registrierung als Sylius-Ressource. Eine eigene Implementierung von ChannelSettingsInterface würde deshalb von keiner dieser Stellen verwendet. Zusätzliche Felder kannst du mit diesem Plugin nicht ergänzen. Brauchst du zusätzliche Daten pro Channel, lege dafür eine eigene Entity in deinem Projekt an.

Events und Tags

Das Plugin löst keine eigenen Events aus. Es hört auf diese vorhandenen:

Event Wer reagiert Wirkung
sylius.menu.admin.main Plugin Ergänzt die Gruppe MMKreativ Plugins mit dem Eintrag Matomo Analytics
mmd_sylius_matomo_integration_plugin.channel_settings.post_create Plugin Legt bei aktivem Klaro-Gating den Klaro-Dienst an
mmd_sylius_matomo_integration_plugin.channel_settings.post_update Plugin Wie oben, beim Bearbeiten

Die beiden Ressourcen-Events sind die üblichen Lebenszyklus-Events von Sylius für die Ressource channel_settings. Du kannst eigene Listener darauf registrieren, etwa um nach dem Speichern einen Cache zu leeren.

Für Logs nutzt der Resolver den Monolog-Kanal mmd_matomo, den du in monolog.yaml getrennt routen kannst.

Beispiel: Resolver dekorieren

Du möchtest das Tracking für einen Test-Channel mit dem Code STAGING grundsätzlich unterdrücken, auch wenn dort ein Eintrag existiert:

services:
    App\Matomo\NoTrackingForStagingResolver:
        decorates: Mmd\SyliusMatomoIntegrationPlugin\Tracking\TrackingConfigResolverInterface
        arguments:
            - '@.inner'
final class NoTrackingForStagingResolver implements TrackingConfigResolverInterface
{
    public function __construct(private TrackingConfigResolverInterface $inner)
    {
    }

    public function forChannelCode(string $channelCode): ?TrackingConfig
    {
        return 'STAGING' === $channelCode ? null : $this->inner->forChannelCode($channelCode);
    }
}

Liefert der Resolver null, verhalten sich Storefront und Shop API wie bei einem Channel ohne Tracking.

Eine zweite MMKreativ-Erweiterung installieren

Die Sidebar-Gruppe MMKreativ Plugins ist in jedem MMKreativ-Plugin identisch angelegt und wird über den Code mmd_plugins zusammengeführt. Du musst dafür nichts konfigurieren.