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
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.