Live Demo: Teste dieses und weitere Plugins live — ohne Installation, ohne Risiko: demo.markus-michalski.net
Ablauf: ViewConfigExtension liest die Einstellungen über MatomoConfigFactory als unveränderliches MatomoConfig, fragt den ConsentChecker und rendert über TrackingCodeRenderer bzw. EcommerceTracker das JavaScript. Beim Speichern einer Bestellung baut der OrderSubscriber ein MatomoEcommerceData-Objekt und legt es in der Session ab. Die ThankYouControllerExtension liest es auf der Bestätigungsseite aus der Session und erzeugt mit dem EcommerceTracker das JavaScript.
├── metadata.php
├── services.yaml
├── composer.json
├── src/
│ ├── Config/
│ │ ├── MatomoConfig.php
│ │ └── MatomoConfigFactory.php
│ ├── Controller/
│ │ └── MatomoOptOutController.php
│ ├── DataTransfer/
│ │ └── MatomoEcommerceData.php
│ ├── EventSubscriber/
│ │ └── OrderSubscriber.php
│ ├── Extension/
│ │ ├── Application/Controller/ThankYouControllerExtension.php
│ │ └── Core/ViewConfigExtension.php
│ └── Service/
│ ├── ConsentChecker.php
│ ├── EcommerceTracker.php
│ └── TrackingCodeRenderer.php
└── views/
├── admin_twig/{de,en}/mmd_matomo_analytics_lang.php
└── twig/
├── {de,en}/mmd_matomo_analytics_lang.php
├── page/matomo_optout.html.twig
├── widget/matomo_optout.html.twig
└── extensions/themes/apex/
├── layout/base.html.twig
└── page/checkout/thankyou.html.twig
| Eintrag | Wert |
|---|---|
| Modul-ID | mmd_matomo_analytics |
| Erweiterte Klassen | ViewConfig (ViewConfigExtension), ThankYouController (ThankYouControllerExtension) |
| Controller | matomo_optout (MatomoOptOutController) |
| Templates | @mmd_matomo_analytics/page/matomo_optout.html.twig, @mmd_matomo_analytics/widget/matomo_optout.html.twig |
| Einstellungsgruppen | mmd_matomo_basic, mmd_matomo_privacy, mmd_matomo_ecommerce, mmd_matomo_advanced |
| PHP-Namespace | Mmd\MatomoAnalytics\ |
| Klasse | Aufgabe |
|---|---|
MatomoConfigFactory |
Liest die Einstellungen des aktuellen Shops und erzeugt MatomoConfig |
MatomoConfig |
Unveränderliches Wertobjekt, prüft isValid() und die HTTPS-URL |
ConsentChecker |
Serverseitige Prüfung von DNT-Header und Consent-Cookies |
TrackingCodeRenderer |
Erzeugt den Tracking-Code |
EcommerceTracker |
Erzeugt die E-Commerce-Aufrufe für Produktansicht, Warenkorb und Bestellung |
MatomoEcommerceData |
Datenobjekt für Produktansicht, Warenkorb-Update und Bestellung |
OrderSubscriber |
Reagiert auf AfterModelUpdateEvent; verarbeitet nur Order-Modelle mit Bestellnummer (oxordernr) und legt die Bestelldaten in der Session ab |
ViewConfigExtension |
Erweitert ViewConfig um die Template-Methoden (siehe Storefront und Templates) |
ThankYouControllerExtension |
Erweitert den ThankYouController um getMatomoOrderTracking() |
MatomoOptOutController |
Opt-Out-Seite, Controller-ID matomo_optout |
Mit den Standardwerten (Tracking an, Matomo-URL und Site-ID gesetzt) entsteht dieser Code. Die Reihenfolge ist fest: Datenschutz-Aufrufe, Heartbeat, trackPageView, Link-Tracking, Tracker-Initialisierung.
var _paq = window._paq = window._paq || [];
_paq.push(["disableCookies"]);
_paq.push(["setDoNotTrack", true]);
_paq.push(["trackPageView"]);
_paq.push(["enableLinkTracking"]);
(function() {
var u="https://analytics.example.com/";
_paq.push(["setTrackerUrl", u+"matomo.php"]);
_paq.push(["setSiteId", 1]);
var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0];
g.async=true; g.src=u+"matomo.js"; s.parentNode.insertBefore(g,s);
})();
Je nach Einstellung kommen requireConsent (nach den anderen Datenschutz-Aufrufen) und enableHeartBeatTimer (vor trackPageView) dazu.
| Typ | Aufrufe |
|---|---|
| Produktansicht | setEcommerceView(sku, name, category, price) |
| Warenkorb | addEcommerceItem(sku, name, "", price, quantity) je Position, dann trackEcommerceCartUpdate(total) |
| Bestellung | addEcommerceItem(...) je Position, dann trackEcommerceOrder(orderId, revenue, subTotal, tax, shipping) |
Preise werden mit zwei Nachkommastellen und Punkt als Dezimaltrennzeichen ausgegeben. Der Kategoriepfad der Produktansicht wird aus den Kategorietiteln mit > zusammengesetzt. Die Positionen von Warenkorb und Bestellung übergeben als Kategorie einen leeren String.
| Variable | Inhalt |
|---|---|
matomoOrderTracking |
Bestelldaten bis zur Ausgabe auf der Bestätigungsseite, danach gelöscht |
matomoTrackedOrders |
Liste bereits vorgemerkter Bestellnummern, verhindert doppelte Vormerkung in einer Session |
Die Einstellungen werden pro Shop gelesen. Die Site-ID und das Heartbeat-Intervall liegen als Text vor und werden in Zahlen umgewandelt. Ein leerer Klaro Service-Name wird zu matomo, ein Heartbeat-Intervall von 0 zu 15.