Skip to content

MelisCmsPageAnalytics

Grundlegende Analyse der Seitenaufrufe für CMS-Sites — erfasst Seitenaufrufe und ermöglicht es einer Site, einen externen Analytics-Anbieter (z. B. Google Analytics) einzubinden, jetzt gesteuert über ein natives React-Backoffice. Paket melisplatform/melis-cms-page-analytics.

Zweck

MelisCmsPageAnalytics ist der integrierte Seitenaufruf-Tracker der Plattform. Bei jedem Seitenrendering im Frontoffice erfasst er einen entdeduplizierten Besuch (einmal pro Sitzung, pro Seite, pro Tag) in melis_cms_page_analytics und stellt die Daten im Backoffice als Site-Werkzeug Page Analytics sowie als Registerkarte Page Analytics auf jeder CMS-Seite bereit. Pro Site können Sie außerdem einen Analytics-Anbieterschlüssel und ein JavaScript-Snippet speichern, das das Modul beim Rendern in den <head> der Seite einfügt — der Hook, den Zusatz-Anbieter wie Google Analytics nutzen.

In v6 ist das Backoffice ein natives Voll-React-Modul (Brick): eine schreibgeschützte Besuchstabelle sowie ein Einstellungsbereich, die eine react-api-JSON-Schicht aufrufen. Tracking, der Anbieter-Vertrag und die Persistenz der Einstellungen bleiben unverändert — v6 ersetzt lediglich die Darstellungsschicht.

Aktivierung

Fügen Sie Folgendes zu config/melis.module.load.php hinzu:

php
return [
    'MelisCmsPageAnalytics',
];

Erforderliche Composer-Abhängigkeiten: melisplatform/melis-core und melisplatform/melis-cms. Das Modul ist zur Laufzeit außerdem auf die Dienste melis-engine und melis-front angewiesen (Baum, Seitentabellen, Front-Dispatch-Ereignisse). Die Datenbanktabellen werden über MelisSetupController aus install/sql/ installiert. Das React-Modul (Brick) erscheint nur dann im Menü, wenn das Modul in melis.module.load.php aufgeführt ist (modulare Brick-Erkennung).

Zentrale Dienste

Als service_manager-Aliase in config/module.config.php registriert:

Dienst-AliasRolle
MelisCmsPageAnalyticsServiceHauptdienst, der den Anbieter-Vertrag implementiert. getAnalytics($siteId) liest den aktiven Anbieterschlüssel aus melis_cms_page_analytics_data und die passende Einstellungszeile aus melis_cms_page_analytics_data_settings.
MelisCmsDefaultPageAnalyticsServiceIntegrierter Rekorder. saveAnalyticsData($pageId) ermittelt die Site, bestätigt, dass die Seite aktiv/veröffentlicht ist, und fügt eine entdeduplizierte Zeile in melis_cms_page_analytics ein — es sei denn, eine Google-Analytics-View-ID und ein Token sind konfiguriert; in diesem Fall tritt der integrierte Zähler zurück.
MelisCmsPageAnalyticsTableTable-Gateway für das Besuchsprotokoll.
MelisCmsPageAnalyticsDataTableTable-Gateway für die Anbieterauswahl je Site.
MelisCmsPageAnalyticsDataSettingsTableTable-Gateway für Einstellungen je (Site, Anbieter).

Beide Hauptdienste lösen Start-/Ende-Ereignisse aus: melis_cms_default_page_analytics_save_start / melis_cms_default_page_analytics_save_end.

Frontoffice

Es gibt weder einen View-Helper noch ein Templating-Plugin. Tracking und Skript-Injektion werden von MelisCmsPageAnalyticsListener (in Module.php angebunden) übernommen, der zwei Ereignisse in der Front-Render-Pipeline abfängt:

EreignisPrioritätAktion
melisfront_site_dispatch_ready-10000Nur Front-Renderings — ruft MelisCmsDefaultPageAnalyticsService::saveAnalyticsData($pageId) auf, um den entdeduplizierten Besuch zu erfassen.
melis_front_layoutStandardLiest das für die Site konfigurierte pads_js_analytics-Snippet und fügt es vor </head> des gerenderten HTML ein.

Datenbanktabellen

TabellePKEnthält
melis_cms_page_analyticsph_idBesuchsprotokoll (entdeduplizierte Treffer): ph_page_id, ph_session_id, ph_date_visit, ph_site_id. Es wird keine IP-Adresse gespeichert.
melis_cms_page_analytics_datapad_idAnbieterauswahl je Site: pad_site_id, pad_analytics_key.
melis_cms_page_analytics_data_settingspads_idEinstellungen je (Site, Anbieter): pads_site_id, pads_analytics_key, pads_js_analytics, pads_settings (z. B. google_analytics_view_id).

React-Backoffice

Das Werkzeug ist ein natives Voll-React-Modul (Brick) mit einem Umschalter New / Old, der auf das Legacy-Werkzeug in einem iframe zurückgreifen kann. Es befindet sich in der Seitenleiste unter Marketing / Site Tools → Page Analytics und öffnet sich mit zwei internen Registerkarten, Analytics und Settings.

Brick-EigenschaftWert
Brick-IDpageanalytics
Manifest-route/melis-marketing/meliscms-page-analytics
forwardKeyMelisCmsPageAnalytics/MelisCmsPageAnalyticsTool
melisKey (iframe-Ziel der Old-Ansicht)meliscms_page_analytics_display
Zugriffsschutz-Knoten (Controller)meliscms_page_analytics_tools_section
API-Basis/melis/react-api/page-analytics
  • Registerkarte Analytics — eine schreibgeschützte Besuchstabelle, pro Seite aggregiert (Seiten-ID, Seitenname, Besuchsanzahl, letzter Besuch), mit KPI-Karten (Treffer / Seiten / Sites / letzter Besuch), einem Site-Filter, Suche, einem Spaltenmanager, unendlichem Scrollen, serverseitiger Sortierung und Export. Gelöschte Seiten zeigen ein kursives Label (deleted). Wenn der ausgewählten Site ein Drittanbieter zugewiesen ist, der eine eigene React-Darstellung mitbringt, hostet die Registerkarte das Dashboard dieses Moduls anstelle der integrierten Tabelle.
  • Registerkarte Settings — wählen Sie eine Site und dann ein Analytics module (die integrierte Option „no analytics“ sowie jeden aktiven Anbieter). Die eigenen Felder des gewählten Moduls werden datengesteuert gerendert (Text / Textarea / Auswahl / Passwort / Datei, z. B. ein privater Google-Analytics-Schlüssel). Plattformadministratoren können außerdem das benutzerdefinierte <head>-JS-Snippet bearbeiten; Nicht-Administratoren sehen es schreibgeschützt.

React-Screenshots dieser Ansichten sind noch nicht verfügbar.

React-API

Die Routen sind in config/react-api.php definiert und werden in die Modulkonfiguration eingebunden. Der Vertrag lautet { success, data, error }; jede Anfrage sendet X-Requested-With: XMLHttpRequest und credentials: 'include'. Zwei Controller stützen die Benutzeroberfläche: MelisReactApiPageAnalyticsController (das Werkzeug) und MelisReactApiPageAnalyticsTabController (die Registerkarte im CMS-Seiteneditor).

Methode & URLZweck
GET /melis/react-api/page-analyticsBesuche pro Seite aggregiert (Keyset: limit, search, site, sort, dir, after) → {items,total,nextCursor}, jedes Element {pageId,pageName,count,lastVisit}.
GET /melis/react-api/page-analytics/statsKPI {hits, pages, sites, lastVisit} (berücksichtigt search/site).
GET /melis/react-api/page-analytics/sitesSite-Optionen {sites:[{id,name}]} für die Auswahl.
GET /melis/react-api/page-analytics/settingsZustand der Settings-Registerkarte (Modulliste + datengesteuertes Formularschema + aktuelle Werte).
GET /melis/react-api/cms-page/analyticsBesuche einer einzelnen Seite (idPage, page, perPage) → {visits, sessions, lastVisit, recent, page, perPage, recentTotal}.

Der Werkzeug-Controller liest die Tabellen direkt über parametrisiertes SQL (melis_cms_page_analytics verknüpft mit melis_cms_page_published für die Namen und melis_cms_site für die Auswahl, opaker Keyset-Cursor). Er schützt den Zugriff über den rechteführenden Knoten meliscms_page_analytics_tools_sectionnicht über den Manifest-melisKey (meliscms_page_analytics_display), der lediglich der iframe-Zonenschlüssel der Old-Ansicht ist.

Das Schreiben der Einstellungen ist keine react-api-Route — der Settings-Bereich sendet per POST eine FormData-Payload an die Legacy-Werkzeugaktion, sodass die gesamte serverseitige Logik (Laminas-Validierung, GA-Schlüssel-Upload, pads_settings-Serialisierung, Admin-Schutz für das rohe JS, Flash Messenger) wortwörtlich wiederverwendet wird:

ts
const LEGACY_SAVE_URL = '/melis/MelisCmsPageAnalytics/MelisCmsPageAnalyticsTool/save'
await fetch(LEGACY_SAVE_URL, {
  method: 'POST',
  headers: { 'X-Requested-With': 'XMLHttpRequest' },
  credentials: 'include',
  body: formData,
}) // → { success, textTitle, textMessage, errors }

CMS-Seitenregisterkarte und Fähigkeiten

Das Modul steuert eine Registerkarte Page Analytics zum CMS-Seiteneditor bei, gestützt auf GET /melis/react-api/cms-page/analytics (Gesamtbesuche, eindeutige Sitzungen, letzter Besuch und eine seitenweise Liste der letzten Besuchsdaten für diese Seite). Die Registerkarte wird in config/react.capabilities.php unter dem gemeinsamen Knoten meliscms_page deklariert, und der Schlüssel meliscms_page_analytics_tab ist die Capability-Zeichenkette, mit der der Zugriff in Users → Rights gesteuert wird:

php
'melisReactToolCapabilities' => [
  'meliscms_page' => [
    'tabs' => [
      ['key' => 'meliscms_page_analytics_tab', 'label' => 'tr_melis_cms_page_analytics_title'],
    ],
  ],
],

Modulare Darstellung auf Site-Ebene

Wenn einer Site ein Drittanbieter-Analytics-Modul zugewiesen ist, das eine React-Darstellung deklariert (z. B. MelisCmsGoogleAnalytics über react_display_key), hostet die Registerkarte Analytics die eigene React-Darstellung dieses Moduls anstelle der nativen Besuchstabelle. Der Brick nutzt eine globale Registry, window.__melisAnalyticsSiteDisplays[<analyticsKey>]; er prüft beim Fenster-Ereignis melis:analytics-site-display-registered erneut (Bundles werden asynchron geladen) und greift, falls nichts registriert ist, auf ein iframe /melis/react-tool-page?key=<displayKey>&siteId=<site> zurück.

Beispiel

php
// Read the active analytics provider config for a site
$analytics = $serviceManager->get('MelisCmsPageAnalyticsService')->getAnalytics($siteId);

// Read recorded visits for a specific page (used by the Page Analytics tab)
$visits = $serviceManager->get('MelisCmsPageAnalyticsTable')->getDataByPageId($pageId);

Die Erfassung der Besuche erfolgt beim Front-Rendering automatisch über den Listener; der direkte Aufruf von saveAnalyticsData() ist normalerweise nicht erforderlich.

Zentrale Dateien

ThemenbereichPfad
Modul-Bootstrap / Listener-Registrierungvendor/melisplatform/melis-cms-page-analytics/src/Module.php
Routen, Dienste, Table-Aliase, Controllervendor/melisplatform/melis-cms-page-analytics/config/module.config.php
React-API-Routenvendor/melisplatform/melis-cms-page-analytics/config/react-api.php
React-Registerkarten-Capabilityvendor/melisplatform/melis-cms-page-analytics/config/react.capabilities.php
React-Brick + Manifestvendor/melisplatform/melis-cms-page-analytics/public/ui-react/
React-Quellenvendor/melisplatform/melis-cms-page-analytics/ui-react/src/
React-API-Controllervendor/melisplatform/melis-cms-page-analytics/src/Controller/MelisReactApiPageAnalyticsController.php, MelisReactApiPageAnalyticsTabController.php
Anbieter-Vertragvendor/melisplatform/melis-cms-page-analytics/src/Service/MelisCmsPageAnalyticsServiceInterface.php
Haupt-Analytics-Dienstvendor/melisplatform/melis-cms-page-analytics/src/Service/MelisCmsPageAnalyticsService.php
Integrierter Rekordervendor/melisplatform/melis-cms-page-analytics/src/Service/MelisCmsDefaultPageAnalyticsService.php
Front-Listener (Tracking + Injektion)vendor/melisplatform/melis-cms-page-analytics/src/Listener/MelisCmsPageAnalyticsListener.php
Table-Gatewaysvendor/melisplatform/melis-cms-page-analytics/src/Model/Tables/
DB-Installations-SQLvendor/melisplatform/melis-cms-page-analytics/install/sql/

Siehe auch: melis-cms, melis-core