Neues Admin-Tool: BCStats (Arbeitsname)
Verfasst: Mi 1. Apr 2015, 15:45
Weil Piwik oversized ist und WBStats mir persönlich nicht reicht, versuche ich mich an einem eigenen Besucherstatistik-Modul.
Ziel des ganzen ist, sich irgendwo zwischen WBStats und Piwik zu positionieren.
https://github.com/webbird/bcstats_for_BlackCatCMS
Einbindung im Frontend
Die Einbindung erfolgt wahlweise über ein Droplet oder durch Aufnahme eine Codeschnipsels im Template oder Seitenkopf/-fuß. Hierbei kann bestimmt werden, ob im Frontend eine kleine Statistik ausgegeben werden soll oder nicht. (Parameter 'stats') Außerdem gibt es zwei Darstellungsvarianten, nämlich vertikal oder horizontal (siehe Screenshots weiter unten).
Derzeitiger Droplet-Code (kann sich noch ändern):
Codeschnipsel, z.B. in die index.tpl des Frontend-Templates einbauen:
Der erste Parameter bestimmt, daß im Frontend eine Statistik ausgegeben werden soll, der zweite, ob horizontal oder vertikal. Ist der erste Parameter false hat der zweite keine Auswirkungen. Mit der Funktion addCSS() wird die frontend.css aus dem BCStats-Verzeichnis geladen, um den Counter zu formatieren; in BlackCat 1.2 sorgt der Core dafür, daß das CSS in den Header geladen wird. Alternativ könnte man die Zeile auch vor den Templateinhalt setzen. Oder in die headers.inc.php des Templates. Oder man macht ein @import() im CSS des Templates. Oder man macht komplett eigenes CSS für den Counter. Viele Möglichkeiten.
Um einen "stillen" Counter einzubauen, folgenden Code verwenden:
Erfassung von Daten bzw. was nicht erfaßt wird
Da es in vielen Ländern - auch in Deutschland - nicht so ganz legal ist, die IP zu speichern (das ist umstritten, lassen wir es an dieser Stelle bitte einfach dabei), verwendet das Modul eine Session als Reload-Sperre. Der Weg des Besuchers - also welche Seiten er aufgerufen hat - wird ebenfalls nicht verfolgt. Das heißt, nur der erste Zugriff wird registriert, mitsamt der aufgerufenen Seite, und das war's.
Da die IP-Adresse nicht gespeichert wird, wird mit Hilfe von GeoLite2 versucht, Land, Provinz und Stadt zu ermitteln, bevor der Zugriff protokolliert wird. Informationen zum Browser werden erst später aus den Protokolldaten extrahiert, beim Zugriff selbst wird nur der User Agent String ausgelesen und gespeichert. Anmerkung: Derzeit tendiere ich dazu, nur das Land zu ermitteln und zu speichern, siehe unten.
Wichtige Info dazu: Alle diese Informationen können vom Benutzer verfälscht werden, sind also nicht zuverlässig. Das Problem haben aber alle einschlägigen Tools.
Aus dem User Agent lassen sich bei der Auswertung des Protokolls auch Suchmaschinen, Spider etc. identifizieren, auch dies aber wiederum nicht wirklich zuverlässig. Vor allem Spambots oder andere Schädlinge werden sich in der Regel nicht als solche zu erkennen geben. Seriöse Suchmaschinen lassen sich aber gewöhnlich auch als solche erkennen. (Wobei sich natürlich ein Spambot auch wieder als seriöse Suchmaschine tarnen kann...)
Derzeit gibt es zwei Varianten der Frontend-Ausgabe: Vertikal und horizontal. Die Darstellung ist erst mal nur ganz rudimentär, über die Templates und das CSS kann man sich das später ohnehin so anpassen, wie man es mag. Admin Tool
Beim Aufruf des Admin-Tools oder wahlweise auch per Cronjob wird das Protokoll ausgewertet und für die Erstellung von Statistiken aufbereitet. Welche Ansichten es genau geben wird, weiß ich noch nicht; für Vorschläge bin ich da offen, soweit die erfaßten Daten das hergeben. Ein paar erste Beispiele weiter unten. Da die Darstellung auf Widgets basieren wird, ist es später möglich, eigene Erweiterungen zu bauen bzw. die Ansichten so zu ändern, wie man es haben möchte.
Bibliotheken
Bisher kommen folgende Bibliotheken zum Einsatz:
GeoLite2 - zum Ermitteln der Herkunft des Besuchers (Land) aus der IP-Adresse
Browscap - zum Auslesen von Informationen aus dem UserAgent
Kartograph (JS) - zur Darstellung der Verteilung der Besucherzahlen auf eine Weltkarte
ChartJS - zur Darstellung von Charts
jQuery UI - Accordion Plugin zur Darstellung der Details (z.B. Browser ist Firefox, Gesamtzahl steht auf dem Panel, per Accordion kann man dann das Panel öffnen und die Verteilung auf die FF-Versionen ansehen)
Für ChartJS plane ich ein eigenes Modul (und einen Helper), da es sicherlich auch außerhalb dieses Statistik-Moduls interessant ist. Die anderen werden vermutlich mit dem Statistikmodul geliefert. Wer sowas dann für eigene Module benutzen will, muß sie halt selbst mitliefern oder CDN benutzen.
Ziel des ganzen ist, sich irgendwo zwischen WBStats und Piwik zu positionieren.
https://github.com/webbird/bcstats_for_BlackCatCMS
Einbindung im Frontend
Die Einbindung erfolgt wahlweise über ein Droplet oder durch Aufnahme eine Codeschnipsels im Template oder Seitenkopf/-fuß. Hierbei kann bestimmt werden, ob im Frontend eine kleine Statistik ausgegeben werden soll oder nicht. (Parameter 'stats') Außerdem gibt es zwei Darstellungsvarianten, nämlich vertikal oder horizontal (siehe Screenshots weiter unten).
Derzeitiger Droplet-Code (kann sich noch ändern):
Code: Alles auswählen
[[cat_counter?stats=1&display=horizontal]]
Code: Alles auswählen
<?php
require CAT_PATH.'/modules/BCStats/inc/Tracker.php';
CAT_Helper_Page::addCSS(CAT_URL.'/modules/BCStats/css/frontend.css');
echo BCStats_Tracker::track(true,'horizontal');
?>
Um einen "stillen" Counter einzubauen, folgenden Code verwenden:
Code: Alles auswählen
<?php
require CAT_PATH.'/modules/BCStats/inc/Tracker.php';
BCStats_Tracker::track();
?>
Da es in vielen Ländern - auch in Deutschland - nicht so ganz legal ist, die IP zu speichern (das ist umstritten, lassen wir es an dieser Stelle bitte einfach dabei), verwendet das Modul eine Session als Reload-Sperre. Der Weg des Besuchers - also welche Seiten er aufgerufen hat - wird ebenfalls nicht verfolgt. Das heißt, nur der erste Zugriff wird registriert, mitsamt der aufgerufenen Seite, und das war's.
Da die IP-Adresse nicht gespeichert wird, wird mit Hilfe von GeoLite2 versucht, Land, Provinz und Stadt zu ermitteln, bevor der Zugriff protokolliert wird. Informationen zum Browser werden erst später aus den Protokolldaten extrahiert, beim Zugriff selbst wird nur der User Agent String ausgelesen und gespeichert. Anmerkung: Derzeit tendiere ich dazu, nur das Land zu ermitteln und zu speichern, siehe unten.
Wichtige Info dazu: Alle diese Informationen können vom Benutzer verfälscht werden, sind also nicht zuverlässig. Das Problem haben aber alle einschlägigen Tools.
Aus dem User Agent lassen sich bei der Auswertung des Protokolls auch Suchmaschinen, Spider etc. identifizieren, auch dies aber wiederum nicht wirklich zuverlässig. Vor allem Spambots oder andere Schädlinge werden sich in der Regel nicht als solche zu erkennen geben. Seriöse Suchmaschinen lassen sich aber gewöhnlich auch als solche erkennen. (Wobei sich natürlich ein Spambot auch wieder als seriöse Suchmaschine tarnen kann...)
Derzeit gibt es zwei Varianten der Frontend-Ausgabe: Vertikal und horizontal. Die Darstellung ist erst mal nur ganz rudimentär, über die Templates und das CSS kann man sich das später ohnehin so anpassen, wie man es mag. Admin Tool
Beim Aufruf des Admin-Tools oder wahlweise auch per Cronjob wird das Protokoll ausgewertet und für die Erstellung von Statistiken aufbereitet. Welche Ansichten es genau geben wird, weiß ich noch nicht; für Vorschläge bin ich da offen, soweit die erfaßten Daten das hergeben. Ein paar erste Beispiele weiter unten. Da die Darstellung auf Widgets basieren wird, ist es später möglich, eigene Erweiterungen zu bauen bzw. die Ansichten so zu ändern, wie man es haben möchte.
Bibliotheken
Bisher kommen folgende Bibliotheken zum Einsatz:
GeoLite2 - zum Ermitteln der Herkunft des Besuchers (Land) aus der IP-Adresse
Browscap - zum Auslesen von Informationen aus dem UserAgent
Kartograph (JS) - zur Darstellung der Verteilung der Besucherzahlen auf eine Weltkarte
ChartJS - zur Darstellung von Charts
jQuery UI - Accordion Plugin zur Darstellung der Details (z.B. Browser ist Firefox, Gesamtzahl steht auf dem Panel, per Accordion kann man dann das Panel öffnen und die Verteilung auf die FF-Versionen ansehen)
Für ChartJS plane ich ein eigenes Modul (und einen Helper), da es sicherlich auch außerhalb dieses Statistik-Moduls interessant ist. Die anderen werden vermutlich mit dem Statistikmodul geliefert. Wer sowas dann für eigene Module benutzen will, muß sie halt selbst mitliefern oder CDN benutzen.