Markus Michalski FAQ

Matomo Analytics: Technische Details

Technische Details von Matomo Analytics für OXID eShop 7: Architektur, Klassen, erzeugter Tracking-Code, E-Commerce-Aufrufe, Session-Variablen und metadata.php.

English Version

Zurück zur Übersicht

Matomo Analytics: Technische Details

Live Demo: Teste dieses und weitere Plugins live — ohne Installation, ohne Risiko: demo.markus-michalski.net

Architektur

graph TD
    A["Template oViewConf"] --> B["ViewConfigExtension"]
    B --> C["MatomoConfigFactory"]
    C --> D["MatomoConfig"]
    B --> E["ConsentChecker"]
    B --> F["TrackingCodeRenderer"]
    B --> G["EcommerceTracker"]
    H["OrderSubscriber"] --> M["MatomoEcommerceData"]
    H --> I["Session matomoOrderTracking"]
    J["ThankYouControllerExtension"] --> I
    J --> G

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.

Modulstruktur (Auszug)

├── 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

metadata.php

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\

Klassen

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

Erzeugter Tracking-Code

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.

E-Commerce-Aufrufe

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.

Session-Variablen

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

Einstellungen im Code

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.