Piwik-Modul und -Plugin für MODx

von Thomas Jakobi am Montag, 22. September 2008 um 20:04 Uhr. Kommentare (19)

Auf einigen der von mir betreuten Seiten setze ich Piwik als Software für Webstatistiken ein. Mit dem folgendem MODx-Modul (Version 0.6.6a) und dem zugehörigen Plugin werden einige Widgets aus Piwik im MODx-Backend angezeigt und der passende Code für Piwik durch MODx am Ende der Seite eingefügt.

Basis ist eine funktionierende Installation von Piwik.

Zunächst lädt man sich die gepackten Dateien des Moduls herunter und kopiert sie in das Verzeichnis /assets/modules/piwikx der jeweiligen MODx-Installation.

Dann wird der Text aus der folgenden Datei in ein neues Plugin kopiert und dieses mit PiwikX benannt.

piwikx.plugin
/*
 * PiwikX simply integrates the <a href='http://www.piwik.org'>Piwik</a> statistic on your site.
 *
 * @package PiwikX
 * @subpackage modx_plugin
 * @link http://www.partout.info/piwik_modx.html
 *
 * @version 0.6.6a <17.05.2010>
 * @author Thomas Jakobi <Kontakt>
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 */
 
/* MODx event
 OnParseDocument
 */
 
$piwikURL = (isset($piwikURL)) ? $piwikURL : '';
$piwikSiteId = (isset($piwikSiteId)) ? $piwikSiteId : 0;
 
if (!isset($modx))
    die();
 
// invoke module
$class_file = MODX_BASE_PATH.'assets/modules/piwikx/piwikx.class.php';
if (!file_exists($class_file))
    $modx->messageQuit(sprintf('Classfile "%s" not found. Did you upload the module files?', $class_file));
require_once ($class_file);
 
// MODx event handling
$e = &$modx->Event;
switch ($e->name) {
    case "OnParseDocument":
        $piwikx_lang = array();
        $PiwikX = new PiwikX($piwikURL, $piwikSiteId, $piwikx_lang);
 
		$PiwikX->piwikUsername = (isset($piwikUsername)) ? $piwikUsername : '';
		$PiwikX->piwikPassword = (isset($piwikPassword)) ? $piwikPassword : '';
		$PiwikX->piwikActionName = (isset($piwikActionName)) ? $piwikActionName : '';
		$PiwikX->piwikJsName = (isset($piwikJsName)) ? $piwikJsName : 'piwik.js';
		$PiwikX->piwikGroupTrack = (isset($piwikGroupTrack)) ? explode(',', $piwikGroupTrack) : array();
		$PiwikX->piwikGroupExclude = (isset($piwikGroupExclude)) ? explode(',', $piwikGroupExclude) : array();
		$PiwikX->piwikUserTrack = (isset($piwikUserTrack)) ? explode(',', $piwikUserTrack) : array();
		$PiwikX->piwikUserExclude = (isset($piwikUserExclude)) ? explode(',', $piwikUserExclude) : array();
 
		$includeChunk = $PiwikX->includeChunk();
		$modx->regClientHTMLBlock($includeChunk);
	break;
 
	default :
		return; // stop here - this is very important. 
	break;
}

Nun wird in der Modul-Verwaltung unter dem Namen PiwikX ein neues Modul angelegt und der Text aus der folgenden Datei eingefügt:

piwikx.module
/*
 * PiwikX simply integrates the <a href='http://www.piwik.org'>Piwik</a> statistic on your site.
 *
 * @package PiwikX
 * @subpackage modx_module
 * @link http://www.partout.info/piwik_modx.html
 *
 * @version 0.6.6a <17.05.2010>
 * @author Thomas Jakobi <Kontakt>
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 */
 
if (!isset($modx))
    die();
 
$piwikURL = (isset($piwikURL)) ? $piwikURL : '';
$piwikSiteId = (isset($piwikSiteId)) ? $piwikSiteId : 0;
 
// manager language setting
$language = $modx->config['manager_language'];
 
// individual user language setting (if set)
$query = 'SELECT setting_name, setting_value FROM '.$modx->getFullTableName('user_settings').' WHERE setting_name=\'manager_language\' AND user='.$modx->getLoginUserID();
$records = $modx->db->query($query);
if ($modx->db->getRecordCount($records) > 0) {
    $record = $modx->db->getRow($records);
    $language = $record['setting_value'];
}
 
// load classfile
$class_file = MODX_BASE_PATH.'assets/modules/piwikx/piwikx.class.php';
if (!file_exists($class_file))
    $modx->messageQuit(sprintf('Classfile "%s" not found. Did you upload the module files?', $class_file));
require_once ($class_file);
 
// load localization
$piwikx_lang = array();
include_once MODX_BASE_PATH.'assets/modules/piwikx/lang/english.inc.php';
 
if ($language != 'english') {
    $lang_file = MODX_BASE_PATH.'assets/modules/piwikx/lang/'.$language.'.inc.php';
    if (file_exists($lang_file)) {
        include_once $lang_file;
    }
}
 
// invoke module
$PiwikX = new PiwikX($piwikURL, $piwikSiteId, $piwikx_lang);
 
$PiwikX->piwikUsername = (isset($piwikUsername)) ? $piwikUsername : '';
$PiwikX->piwikPassword = (isset($piwikPassword)) ? $piwikPassword : '';
$PiwikX->piwikTokenAuth = (isset($piwikTokenAuth)) ? $piwikTokenAuth : '';
$PiwikX->piwikActionName = (isset($piwikActionName)) ? $piwikActionName : '';
$PiwikX->piwikJsName = (isset($piwikJsName)) ? $piwikJsName : 'piwik.js';
$PiwikX->piwikGroupTrack = (isset($piwikGroupTrack)) ? explode(',', $piwikGroupTrack) : array();
$PiwikX->piwikGroupExclude = (isset($piwikGroupExclude)) ? explode(',', $piwikGroupExclude) : array();
$PiwikX->piwikUserTrack = (isset($piwikUserTrack)) ? explode(',', $piwikUserTrack) : array();
$PiwikX->piwikUserExclude = (isset($piwikUserExclude)) ? explode(',', $piwikUserExclude) : array();
echo $PiwikX->displayModule();
return;
 

Modulkonfiguration

Das Modul kann nun nach dem erneuten Laden des MODx-Managers aufgerufen werden. Da das Modul noch nicht konfiguriert ist, wird eine Übersichtsseite mit der Minimalkonfiguration und der vollständigen Konfiguration angezeigt. Eine dieser Konfigurationen muss im Reiter Konfiguration unter Modul Konfiguration eingefügt und an die jeweilige Piwik-Installation angepasst werden. Als Beispiel wird hier die Minimalkonfiguration aufgeführt: 

&piwikURL=URL Ihrer Piwik-Installation;text;http://ihre.piwik.installation
&piwikSiteId=Piwik Site-ID;text;1
&piwikUsername=Username für Piwik-Widgets;text;
&piwikPassword=md5-verschlüsseltes Passwort für Piwik-Widgets;text

Screenshot des Piwik Moduls piwikURL enthält die URL unter der die Piwik-Installation erreichbar ist.

piwikSiteId ist die ID der Website, die nach dem Anlegen einer neuen zu überwachenden Website (Admin Settings -> Webseiten) in Piwik angezeigt wird.

piwikUsername ist der Benutzername eines neuen in Piwik angelegten Benutzers (Admin Settings -> Benutzer). Diesem Benutzer muss der Ansichts-Zugriff für die zu überwachende Website erlaubt werden. Der Benutzer darf nicht der Piwik-Super-User sein.

piwikPassword ist das md5-verschlüsselte Passwort dieses Benutzers.

piwikActionName enthält den Namen einer Template-Variablen. Der Inhalt dieser Template-Variable wird geparst d.h. es werden darin enthaltene Snippet-Aufrufe ausgeführt und Dokument- bzw. Template-Variablen ersetzt (Snippets müssen gecached '' und Template-Variablen wie im Seitentemplate aufgerufen werden '') und als Tracking-Titel an Piwik übergeben. Wenn diese Option nicht gesetzt ist, wird der kurze Seitentitel als Tracking-Titel benutzt.

piwikUserExclude und piwikGroupExclude können eine kommaseparierte Liste von Benutzernamen bzw. Webgruppen enthalten. Diese MODx-Benutzer/Webgruppen werden (sobald sie im Backend oder Frontend angemeldet sind) vom Piwik-Tracking ausgeschlossen.

Schließlich muss noch in der Modul-Konfiguration die Option gemeinsame Parameter aktiviert werden und unter Abhängigkeiten das PiwikX-Plugin per Plugin hinzufügen zu den Abhängigkeiten hinzu gefügt werden.

Widgets im Backend

Durch das Modul werden nun einige Widgets aus Piwik im MODx-Backend angezeigt. Welche Widgets im Backend dargestellt werden, kann in der Datei <sprache>.managerwidgets.php eingestellt werden.

Die Angaben unter moduleToWidgetize und actionToWidgetize in dieser Datei holt man sich, indem man sich in das Backend von Piwik einloggt und sich unter Widgets ein eigenes Widget zurechtklickt. Aus dem dabei ausgegebenen iframe-Code fügt man dann den Wert für moduleToWidgetize (im folgenden Beispiel VisitorInterest) unter moduleToWidgetize und den Wert für actionToWidgetize (im Beispiel: getNumberOfVisitsPerVisitDuration) unter actionToWidgetize ein.

Für Besuchsdauer sieht das dann so aus:

$piwikWidgets ['Dauer'] = array (
'position' => 'left',
'title' => 'Besuchsdauer im letzten Monat',
'height' => '100',
'module' => 'Widgetize',
'action' => 'iframe',
'columns' => 'nb_visits',
'moduleToWidgetize' => 'VisitorInterest',
'actionToWidgetize' => 'getNumberOfVisitsPerVisitDuration',
'period' => 'month',
'date' => 'today' );

Dank an Mithrandir aus dem deutschen MODx-Forum für den Text zur Widget-Erstellung.

Der Parameter period kann u.a. auf year, month, week oder day eingestellt werden. Der Parameter date u.a. auf today und yesterday. Weitere mögliche Werte kann man der API-Referenz von Piwik entnehmen.

In der nächsten Version von PiwikX wird die Konfiguration des Moduls komplett über das Backend machbar sein.

Konfiguration des Plugins

Zum Schluss muss in der Konfiguration des Plugins unter Importieren von gemeinsamen Parametern die Einstellung PiwikX gewählt werden (eine eigene Pluginkonfiguration muss nicht angelegt werden). Unter Systemereignisse des Plugins wird der Eintrag OnParseDocument aktiviert und das Plugin gespeichert. Nun wird der Piwik-Abschnitt vor dem abschließenden Body-Tag im generierten Quelltext ausgegeben. Da der admin vom Plugin in der Standardkonfiguration vom Tracken ausgeschlossen wird, muss man sich zur Kontrolle aus dem Backend ausloggen oder die Seite kurzfristig in einem anderen Browser (d.h. in einer neuen Session) anzeigen.

Der Piwik-Abschnitt ist in einem DIV mit der Klasse piwik eingeschlossen und kann mit der CSS-Angabe .piwik { display: none } ausgeblendet werden.

Viel Erfolg!


Speichern auf digg Speichern auf slashdot Speichern auf del.icio.us Speichern auf technorati Speichern auf furl Speichern auf Google Speichern auf Mister Wong
Kommentare 1 bis 10 von 19 | Nächste | Letzte
Ramon
Modul anlegen MODX Revolution 2.2.6
am 21. Februar. 2013, 12:35:18 Uhr
Wie kann ich unter MODX Revolution 2.2.6 das beschriebene Piwik Modul integrieren?
Thomas Jakobi
Re: Version für Modx Revolution?
am 11. Juni. 2011, 13:41:37 Uhr
@Vladox: Ist zur Zeit nicht geplant.
Thomas Jakobi
Re: Fehlermeldung
am 11. Juni. 2011, 13:39:43 Uhr
Nach einem kurzen Mailkontakt mit slope ist folgendes klar geworden: PiwikX läuft nicht mit MODx 0.9.6.1p2
slope
Re: Piwik-Modul und -Plugin für MODx
am 6. Juni. 2011, 21:08:21 Uhr
Hallo Zusammen!

Ich versuche gerade das Script zum Laufen zu bekommen, habe aber im Bereich "Modul" bei Klick auf "PiwikX" folgende Fehlermeldung:

Warning: displaymodule(lang/.managerwidgets.php) [function.displaymodule]: failed to open stream: No such file or directory in /homepages/37/d24392003/htdocs/modx/assets/modules/piwikx/piwikx.class.php on line 234

Warning: displaymodule() [function.include]: Failed opening 'lang/.managerwidgets.php' for inclusion (include_path='/homepages/37/d24392003/htdocs/modx/manager/includes/') in /homepages/37/d24392003/htdocs/modx/assets/modules/piwikx/piwikx.class.php on line 234

Fatal error: Cannot instantiate non-existent class: cchunkie in /homepages/37/d24392003/htdocs/modx/assets/modules/piwikx/piwikx.class.php on line 270

Weiss jemand Rat für mich?

In Line 234 wird auf die Language-Datei wverwiesen, wenn ich das richtig "lese"...die Dateien sind aber alle auf dem Server, wo sie hingehören...

include 'lang/'.$this->piwikLanguage['languagefile'].'.managerwidgets.php';

Gruß

slope
Vladox
Version für Modx Revolution?
am 3. Juni. 2011, 15:16:46 Uhr
Hallo
Hast du eine Version, die in Revo funktioniert?
Danke und Gruss
Vladox
Thomas Jakobi
PiwikX 0.6.6 ist online
am 7. Mai. 2010, 23:41:15 Uhr
Änderungen: Der Javascript-Code wurde an die Version 0.6 von Piwik angepasst.
Thomas Jakobi
Re: Soweit ganz cool, wa sist mit MODx 1.0.3?
am 7. Mai. 2010, 18:19:45 Uhr
Das Template für den Piwik Call habe ich in der letzten Zeit nicht angepasst - kann sein dass es sich verändert hat. In meinen Installationen wird auch mit dem alten Javascriptcode fleißig gezählt. Du kannst es aber auch in der Datei piwikx.templates.php ändern.

Mit dem Caching hatte ich hier bislang keine Probleme.
Alexander Leisentritt
Cache-Problem (Lösung)
am 25. April. 2010, 03:42:22 Uhr
Ok ok... Es ist spät, ich bastel rum, hab keine Ahnung von dem was ich tue, aber es geht!

Ich habe dein Plugin deaktivier un den Code modifiziert und als Snippent eingefügt. Dazu bahe ich nur die case Anweisung gelöscht, da ja keine Events bei einem Snippet vorhanden sind. Das Snippet binde ich dann mit in mein Template vor dem Body-End-Tag ein und jetzt klappt es, dass wenn ich als Admin drin bin Piwik nicht eingefügt wird und bei anderen Benutzern schon, egal ob das Dokument gecachet ist oder nicht...
Alexander Leisentritt
Cache-Problem
am 25. April. 2010, 03:24:45 Uhr
Nachdem ih das erste Problem mit dem Cache beseitigt habe, habe ich nun ein zweites.

Ist die Datei einmal gecachet ist es egal mit welchem user ich mich anmelde, es wird immer Piwik integriert auch wenn der benutzer auf der Asschlussliste steht.

Kann man da irgendwas machen?

Mir fällt da so adhoc nichts ein und so drin bin ich auch nicht in MODx oder PHP.
Alexander Leisentritt
Fehler in MODx gefunden!
am 25. April. 2010, 02:54:28 Uhr
Das mit dem Cache hat sich soweit erledigt.
Das ist ein Bug in MODx selber.
In der Datei document.parser.class.inc.php in der Zeile 411 steht '__MODXJScripts__'. Aber an allen anderen Stellen im Code steht '__MODxJScripts__'. Man beachte das kleine "x". Wenn man nun das "X" duchr ein "x" ersetzt werden in den gecachten Dokumenten auch die Scripts wieder eingefügt. Vorher passierte das nicht.
Kommentare 1 bis 10 von 19 | Nächste | Letzte

Kommentar schreiben

  • Benötigte Felder sind mit einem Stern (*) markiert.
  • Es ist nicht möglich im Kommentar URLs und Links zu hinterlassen.