Archiv des Intrexx Live! Forums

Hier sehen Sie die Foreneinträge aus dem Intrexx Live! Forum. Bis November 2016 war es das Forum für alle Fragen rund um die Software Intrexx von United Planet.
Seit November 2016 gibt es ein neues moderiertes Forum, das Intrexx Community Forum. Nutzen Sie bitte unbedingt dieses für aktuelle Fragen, Antworten und Informationen.

Wichtig: Dieses Forum dient als Archiv. Die Einträge beziehen sich oft auf ältere Versionen von Intrexx und entsprechen nicht mehr den aktuellen technischen Gegebenheiten.
Daher sollten alle Inhalte ausschließlich von Experten genutzt werden. Bei unsachgemäßer Anwendung kann es zu zeitaufwändigen Problemen oder Datenverlust kommen.
Übersicht > Intrexx Professional: Programming > Intrexx und Piwik Analytics

Intrexx und Piwik Analytics

Hallo!

Ich habe heute versucht in Intrexx den Piwik Java-Script Code einzubinden.

Hab mich dabei etwas an folgendes Thema für Google Analytics angelehnt:
https://www.unitedplanet.com/forum/index.php?page=Thread&postID=22406

Also hab ich den folgenden Code aus Piwik (Servernamen sind mit XXXXXXXXXX ersetzt) in die Datei \portal\internal\system\vm\custom\custom_fup_end.vm eingefügt


<!-- Piwik -->
<script type="text/javascript">
var _paq = _paq || [];

_paq.push(["setDomains",
["XXXXXXXXXX"]]);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="XXXXXXXXXX";
_paq.push(['setTrackerUrl', u+'piwik.php']);
_paq.push(['setSiteId', 2]);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<noscript><p><img
src="XXXXXXXXXX"
style="border:0;" alt="" /></p></noscript>
<!-- End Piwik Code -->


Leider kommt dann bei jeden Seitenaufruf eine JavaScipt Fehlermehldung:

Javascript Eval exception
Error detected while evaluating javascript code in evalResponse.js


cause:
s is undefined
(at)https://XXXXXXXXXX/portal/script/html/concat/all.js?usn=223379538
line 1 > eval:12:79
(at)https://XXXXXXXXXX/portal/script/html/concat/all.js?usn=223379538
line 1 > eval:7:4 Browser.eval .......

code:
var _paq = _paq || [];

_paq.push(["setDomains",
["XXXXXXXXXX"]]);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//XXXXXXXXXX/piwik/";
_paq.push(['setTrackerUrl', u+'piwik.php']);
_paq.push(['setSiteId', 2]);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
})();


Hat irgendjemand schon Erfahrungen mit der Einbindung von Piwik machen dürfen?
Außerdem wäre ich dankbar wenn jemand Ideen hätte die Analyse komfortabler zu machen.
Ich seh ja weitgehend nur GUIDs im Piwik (das Tracking funktioniert nämlich abgesehen vom JavaScript Fehler).
Wenn der Fehler weg ist könnte man vermutlich mit custom-variables auch Username und Applikation/Seitenname als Variablen übergeben.

Der Piwik Code an sich funktioniert auch, habe ja auch andere System die ich bereits mit Piwik auswerte, warum Intrexx meint, dass s nicht definiert ist ist mir unklar.

Vielen Dank im Voraus
18.02.2016 15:23 von thomas.firnschrott
Das s wird ja mit dem ersten script-Tag initialisiert.
Evtl. gibt es einfach keins?

Klingt unwahrscheinlich, zumal im Quelltext welche stehen, aber wenn ich die Methode document.getElementsByTagName("script") aufrufe erhalte ich eine leere Liste, also ist document.getElementsByTagName("script")[0] undefiniert und s somit leer.
Heisst: Das Script wird hinzugefügt und auch ausgeführt, aber eben nicht asynchron beim Laden der Seite.
19.02.2016 07:12 von MartinW
Vielleicht ist an der Fehlermeldung auch nur ein schnöder Bug in der evalResponse verantwortlich...

Vorneweg: Habe mit Piwik (oder auch Google Analytics) bisher noch keine Erfahrungen gemacht, könnte sich aber noch ändern, da Interesse geweckt. Bitte daher im Vorfeld schon mal um Nachsicht, falls ich hier nur Mist schreibe. whistling
Habe das Thema grob überflogen, muss aber eingestehen, dass es sich als sehr komplex herausstellen könnte.

Hier mal ein paar Punkte, die mir dazu gleich eingefallen sind:
[list=1]
  • Intrexx lädt keine vollständigen Seiten, wie etwa in Wordpress, sondern aktualisiert nur den Content per XML-HTTP-Request
  • Sollen wirklich ALLE Seiten getrackt werden, auch Ansichtsseiten, die z.Bsp. nur Zusatz-Infos zu einem Datensatz in einem Tooltip anzeigen (auch dies sind "Seiten")
  • Wenn eine Seite als modaler Tooltip geladen wird, bleibt die Ausgangsseite ja im Fenster stehen. Wie verhält es sich dann mit der Verweildauer und wie kann piwik das dann auswerten
    [/list] und noch so manches andere...
    Falls Interesse besteht, kann man das Thema ja diesbezüglich gerne noch etwas ausführlicher diskutieren.

    Zurück zum eigentlichen Punkt. rolleyes

    Zur Initialisierung (und zu meinem Verständnis):
    Piwik möchte möglichst unauffällig im Hintergrund arbeiten, daher das asynchrone Laden der piwik.js. Damit Methodenaufrufe nicht in einer Exception enden, falls das JS-File noch nicht vollständig geladen ist, wird mit dem "_paq"-Array gearbeitet. Alle "Aufrufe" werden so quasi zwischengespeichert, bis die Datei vollständig geladen ist. Dann werden diese abgearbeitet. Danach werden alle Aufrufe direkt ausgeführt (override der push-Methode).

    Da Intrexx alle Seiten (in der Regel) via HTTP-XML-Request dynamisch lädt, muss richtigerweise in der
    <portal>\internal\system\vm\custom\custom_fup_end.vm das Tracking gestartet werden.
    Allerdings sollte die
    piwik.js nur einmal geladen werden.

    Ich würde die Initialisierung daher auftrennen.
    Das Laden der
    piwik.js in die Datei
    <portal>\internal\system\vm\custom\custom_head.vm verschieben und dort auch nur die grundsätzlichen Einstellungen (URL, Benutzer-ID, etc.) vornehmen. Das asynchrone Laden überlasse ich der Einfachheit halber Intrexx.


    <portal>\internal\system\vm\custom\custom_head.vm
    [/color]
    [html]<!-- Piwik Initializing -->
    <script type="text/javascript">
    var piwikUrl = 'XXXXXXXXXX/';
    var _paq = _paq || [];
    _paq.push(["setDomains", ["XXXXXXXXXX"]]);
    _paq.push(['setTrackerUrl', piwikUrl + 'piwik.php']);
    _paq.push(['setSiteId', 2]);
    ## Aktuellen User ermitteln und ggf. ID an piwik mit übermitteln, hier Login-Name, da eindeutig und aussagekräftig
    #if( !$User.isAnonymous() && $User.getLoginName() !== "" )
    _paq.push(['setUserId', '$User.getLoginName()']);
    #end
    Loader.loadJsFileOnDemand( piwikUrl + 'piwik.js', true); // Parameter: fileName [, bAsync]
    </script>
    <!-- End Piwik Code -->


    Das eigentliche Tracking passiert dann in der
    <portal>\internal\system\vm\custom\custom_fup_end.vm


    <portal>\internal\system\vm\custom\custom_fup_end.vm
    [/color]
    [html]## ggf. piwik-Settings übernehmen
    #set( $l_pageProperties = $RtCache.getPage($Request.get("rq_TargetPageGuid")).getProperties() )
    #if( !$l_pageProperties["piwik.doNotTrack"] )
    #if( $l_pageProperties["piwik.title"] && $l_pageProperties["piwik.title"] != "" )
    #set( $l_piwikPageTitle = $l_pageProperties["piwik.title"] )
    #else
    #set( $l_piwikPageTitle = $strFuncPartName )
    #end
    <!-- Piwik Tracking -->
    <script type="text/javascript">
    _paq.push(['setDocumentTitle', '$l_piwikPageTitle']);
    _paq.push(['trackPageView']);
    _paq.push(['enableLinkTracking']);
    </script>
    <!-- End Piwik Code -->
    #end


    Ich habe hier auch gleich mal die Möglichkeit implementiert, eine Seite über die Settings (Expert-Reiter > Settings) bzgl. piwik zu konfigurieren.
    Im Moment mal mit zwei Parametern:

    Key Type Wert
    --------------------------------------------------------------------
    piwik.title string <eindeutiger Seitentitel>
    piwik.doNotTrack boolean <true|false>


    Etwas anders verhält es sich auf der "Portal"-Seite. Hier wird die
    custom_fup_end.vm nicht geladen, daher würde die Portalseite auch nicht getrackt werden. Um dies dennoch zu erreichen ist mir im Moment nur ein Weg eingefallen. Das Anlegen eines benutzerdefinierten, versteckten Portlets als Pflichtportlet für alle Benutzer mit HTML-Content, das die Scriptanweisung enthält.
    Über Portalseite (im Bowser) -> Einstellungen -> Portaleinstellungen -> Default-Einstellungen... -> Portlet erstellen


    Angehängte Datei:



    <!-- Piwik Tracking -->
    <script type="text/javascript">
    _paq.push(['setDocumentTitle', 'Portalseite']);
    _paq.push(['trackPageView']);
    _paq.push(['enableLinkTracking']);
    </script>
    <!-- End Piwik Code -->


    Wie gesagt, da gäbe es sicherlich noch 100 Dinge, die man beachten, anders lösen könnte. Kommt halt darauf an, was man haben möchte und wie tiefgründig es sein sollte oder muss.
    Werde mal schauen, ob ich im Laufe der Woche mal piwik aufsetze... attention

    Schöne Grüße,
    Thomas
  • 21.02.2016 15:56 von handw3rker
    Hey,

    also interessiert wäre ich an so einer Analyse Funktion auch, die Intrexx interne ist zwar schon OK aber ich bräuchte doch noch genauere Informationen.
    Wenn hier also jemand eine Lösung hat, bitte für uns dokumentieren :-)
    Danke
    22.02.2016 12:32 von falkh
    Hallo!

    (at)handw3rker: Danke für die tolle Analyse und Beschäftigung mit dem Thema.

    Ich hab es erst heute geschafft mir einen Überblick zu nverschaffen und die Änderungen auszuprobieren.

    Was hab ich zwischenzeitlich probiert:
    Ich hab den original Piwik Code in die custom_head.vm um zu sehen was passiert.
    Dann treten keine Ladefehler mehr auf, aber irgendwie wird auch nicht alles geloggt was vermutlich sowieso an dne XML-Requests liegt.
    Das war noch nciht wirklich zufiredenstellend.

    Heute hab ich versuch wie (at)handw3rker vorgeschalgen hat die Piwik Scripts auf beide Dateien aufzuteilen.

    In der Header war mir noch alles relativ klar, abgesehen von einem !== statt !=, die User-Informationen waren bei mir aber auch ohne die Zeilen ab dem Kommentar drin.
    Ich hab die Zeilen mit dem Login-Name trotzdem übernommen. Wir verwenden Kerberos, vermutlich liegt es daran, dass Piwik den User auch so kennt.

    Leider hab ich beim zweiten Teil meine Probleme:
    Ich hab den Code übernommen und dann relativ viele Seitentitel "$l_piwikPageTitle" in Piwik gehabt was darauf hin deutet, dass die nicht initialisiert sein (eventurell Probleme mit $strFuncPartName???)
    Da der Seitentitel auch schon bei Pwiik sonst bei mir im System war, ahbe ich das Mal so umgebaut, dass der Seitentitel bleibt wie er ist und hab zusätzlich in Benutzerdefinierten Variablen die Werte übergeben.

    Infos zu benutzerdefinierten Variablen gibts da: Piwik.org


    ## ggf. piwik-Settings übernehmen
    #set( $l_pageProperties = $RtCache.getPage($Request.get("rq_TargetPageGuid")).getProperties() )
    #if( !$l_pageProperties["piwik.doNotTrack"] )
    #if( $l_pageProperties["piwik.title"] && $l_pageProperties["piwik.title"] != "" )
    #set( $l_piwikPageTitle = $l_pageProperties["piwik.title"] )
    #else
    #set( $l_piwikPageTitle = $strFuncPartName )
    #end
    <!-- Piwik Tracking -->
    <script type="text/javascript">
    #if( !$User.isAnonymous() && $User.getLoginName() != "" )
    _paq.push(['setCustomVariable',
    1, // Index, the number from 1 to 5 where this custom variable name is stored
    "User", // Name, the name of the variable, for example: Gender, VisitorType
    "$User.getLoginName()", // Value, for example: "Male", "Female" or "new", "engaged", "customer"
    "visit" // Scope of the custom variable, "visit" means the custom variable applies to the current visit
    ]);
    #end
    #if( $l_pageProperties["piwik.title"] && $l_pageProperties["piwik.title"] != "" )
    #set($l_piwikPageTitle = $l_pageProperties["piwik.title"])
    _paq.push(['setCustomVariable',
    2, // Index, the number from 1 to 5 where this custom variable name is stored
    "PiwikTitle", // Name, the name of the variable, for example: Gender, VisitorType
    "$l_piwikPageTitle", // Value, for example: "Male", "Female" or "new", "engaged", "customer"
    "page" // Scope of the custom variable, "visit" means the custom variable applies to the current visit
    ]);
    #end
    _paq.push(['trackPageView']);
    _paq.push(['enableLinkTracking']);
    </script>
    <!-- End Piwik Code -->
    #end


    Dann hab ich einer Seite Mal ein so ein Expert-Attribut verpasst und diese ein paar Mal geladen. Leider konnte ich nur die User-Variable in Piwik finden nicht aber die PiwikTitle.
    Deutet darauf hin, dass ich schon beim
    #if( $l_pageProperties["piwik.title"] && $l_pageProperties["piwik.title"] != "" )
    Probleme haben könnte.

    Jedenfalls bin ich fast sicher nicht alle Zugriffe in Piwik zu bekommen. Damit zum Thema diskutieren was bei Intrexx alles speziell ist
    Ja gerne, weiter diskutieren...thumbsup

    Interessant wären bei den Auswertungen ja prinzipiell:


    • Welche App (von mir aus nur GUID)
    • Welche Seite (von mir aus wieder nur GUID)
    • Welcher Datensatz (bei einer Detailseite)

    Also etwa bei unserem internen Telefonbuch, wie oft ist die Applikation aufgerufen worden, wie oft darin die Übersichtsseite, Suchseite, und insgesamt die Detailseite (wobei da wieder welcher Eintrag wie oft).

    So wies jetzt ist seh ich in Piwik sogar hier und da diese Informationen unter Aktionen/Seiten:
    https://XXXXXX/portal/?rq_AppGuid=FD1488926D5ECDCAECC4B65DA18AD36A62E67B2C&rq_TargetPageGuid=FBF68EDBA3D7A6E317E4009C9607A97C52FC31B0&rq_RecId=3861336638623361336438653063306530313364613139396265633232616437

    Das liegt aber vermutlich darin, dass ich über Request-Parameter und Links die ich aus anderen Applikationen zusammenbastle ab und an direkt auf einen Datensatz in Intrexx einsteige oder auf einen verlinke, denn die Infos bekomm ich nicht wenn ich mit Intrexx-Navigation durch die Seiten klicke.

    Die Seitentitel scheinen auch nicht immer in Piwik aufzutauchen, vermutlich hab ich sie auch nicht wenn ich direkt einsteige (da hab ich ja dann einen vollen Request.

    Ich bin für jeden weiteren Denkanstoss und jede Idee dankbar.

    Liebe Grüße

    Thomas
    23.02.2016 16:57 von thomas.firnschrott
    Ich hab den original Piwik Code in die custom_head.vm um zu sehen was passiert.
    Dann treten keine Ladefehler mehr auf, aber irgendwie wird auch nicht alles geloggt was vermutlich sowieso an dne XML-Requests liegt.
    Genau. Wie gesagt werden viele Seiten einfach per XmlHttpRequest ins aktuelle Browser-Fenster geladen. Dadurch wird der Web-Seiten-Header, welchen du mit der
    custom_head.vm um eigene Definitionen erweiterst, nicht neu geladen und daher wird auch das Script mit dem Aufruf "trackPageView" nicht mehr ausgeführt.
    Deshalb muss dieser Tracking-Aufruf in die
    custom_fup_end.vm.


    In der Header war mir noch alles relativ klar, abgesehen von einem !== statt !=,
    Kommt vor, wenn man ständig zwischen Javascript und Velocity wechselt... attention (in Javascript solte man Vergleiche gegen leere Strings immer mit "!==" oder "===" ausführen)


    Ich hab den Code übernommen und dann relativ viele Seitentitel "$l_piwikPageTitle" in Piwik gehabt was darauf hin deutet, dass die nicht initialisiert sein (eventurell Probleme mit $strFuncPartName???)
    Da der Seitentitel auch schon bei Pwiik sonst bei mir im System war, ahbe ich das Mal so umgebaut, dass der Seitentitel bleibt wie er ist und hab zusätzlich in Benutzerdefinierten Variablen die Werte übergeben.
    Hmm... wir arbeiten ja noch auf 5.2. Hier wird, soweit ich das beurteilen und auch anwenden konnte, auf jeder Seite von Intrexx die vtl-Variable "$strFuncPartName" (z.Bsp. "editpage14AF2554") gesetzt. Kann sein, dass in Folgeversionen diese nicht mehr zur Verfügung steht. Alternativ kann man diesen Wert auch anders ermitteln:
    ## Modifikation
    #set( $l_piwikPageTitle = "" )
    #set( $l_doNotTrack = false )
    ## Page-Title ermitteln
    #if( $Request.containsKey("rq_TargetPageGuid") && $Unique.isGuid($Request.get("rq_TargetPageGuid", "")) )
    #set( $l_page = $RtCache.getPage($Request.get("rq_TargetPageGuid")) )
    #set( $l_pageProperties = $l_page.getProperties() )
    #set( $l_doNotTrack = $l_pageProperties["piwik.doNotTrack"] )
    #if( $l_pageProperties["piwik.title"] && $l_pageProperties["piwik.title"] != "" )
    #set( $l_piwikPageTitle = $l_pageProperties["piwik.title"] )
    #else
    #set( $l_piwikPageTitle = $l_page.getName() )
    #* alternativ auch
    #set( $l_piwikPageTitle = $l_page.getTitle("de") ) ## unabhängig von der Portalsprache immer den deutschen Titel verwenden
    ## oder auch in Verbindung mit dem App-Namen
    #set( $l_piwikPageTitle = "$RtCache.getApplication($l_page.getAppGuid()).getTitle('de'):$l_page.getTitle('de')" )
    *#
    #end
    #end
    #if( !$l_doNotTrack )
    <!-- Piwik Tracking -->
    <script type="text/javascript">
    #if( $l_piwikPageTitle != "" )_paq.push(['setDocumentTitle', '$l_piwikPageTitle']);#end
    _paq.push(['trackPageView']);
    ## _paq.push(['enableLinkTracking']); ## könnte man deaktivieren, da jede Seite ja manuell getrackt wird
    </script>
    <!-- End Piwik Code -->
    #end

    Dass du bisher die Seitennamen korrekt gesehen hast, liegt daran, dass piwik im Falle eines nicht manuell gesetzten Seitentitels den Titel aus dem Header-Tag <title> übernimmt. Dieser Wert wird von Intrexx immer dynamisch angepasst (weil ja nicht neu geladen wird).
    Diese Vorgehensweise ist einfach, hat aber auch Nachteile:
    [list=1]
  • der Seitename ist Sprachabhängig.
    Wenn also eine andere Sprache im Portal gewählt wird, wird es auch ein anderer Seitentitel sein. Folglich wird piwik diese auch als eigene Seite in der Statistik führen.
    Siehe auch Alternative in obigem Code.
  • Wenn der Seitentitel mal geändert wird, und sei es nur wegen eines Tipp-Fehlers, wird piwik die bisherhigen Trackingdaten nicht weiterführen, sondern für diese NEUE Seite neu beginnen.
    [/list]Daher denke ich, ist es sinnvoll, einen eindeutigen Seitentitel an piwik zu geben, der, ähnlich einer ID (z.Bsp. "editpage14AF2554"), unabhängig von Sprache oder sonstiger Änderungen des Intrexx-Titels ist. Klar würde sich hier die GUID anbieten, was aber nun mal schlecht leserlich ist. attention
    Denkbar wäre noch eine Kombi aus App-Name und Seitentitel wie "Benutzer:Telefonliste", wie auch in obigen Code als Alternative.


    Dann hab ich einer Seite Mal ein so ein Expert-Attribut verpasst und diese ein paar Mal geladen. Leider konnte ich nur die User-Variable in Piwik finden nicht aber die PiwikTitle.
    Du sprichst von einem Expert-Attribut. Nur um ganz sicher zu sein und um der genauen Definition Willen. Es ist kein Expert-"Attribut" sondern ein Parameter unter "Settings". In den Eigenschaften einer Seite im Tab "Expert" befinden sich unten zwei Button: [Attribute] und [Settings]. Unter Settings kannst du einen neuen eigenen Parameter erstellen: Key = piwik.title, Typ = string, Wert = <derSeitenname>.

    Noch kurz zu den piwik Custom Variables.
    piwik wird die Custom Variables in naher Zukunft als deprecated kennzeichnen. Stattdessen sollte man Custom Dimensions verwenden.

    Die Übergabe weiterer Infos wie Datensatz-ID oder ähnliches sollte kein Problem sein. Aber schauen wir erst mal, dass es bis hier hin mal zufriedenstellend läuft. attention

    Gruß
  • 24.02.2016 01:38 von handw3rker
    Hallo udn nochmals Danke!

    Also, erstens:
    Ich hab tatsächlich ein Attribut statt einem Setting erzeugt. mea culpa maxima.
    Immerhin kenn ich jetzt den Unterschied, bzw. zumindest die Tatsache, dass es beides gibt thumbsup

    Mit der neuen Variante bekomme ich tatsächlich die richtigen Seitentitel in die Übersicht von Piwik!
    Erfolg thumbup

    Erfolg motiviert und macht bekanntlich gierig... jetzt wär ich bereit für die DatensatzID
    Ich hab mir aus Deinem Script gleich die Variante mit App : Page genommen, wenn die Setting piwik.title nicht gesetzt ist:

    #set( $l_piwikPageTitle = "$RtCache.getApplication($l_page.getAppGuid()).getTitle('de'):$l_page.getTitle('de')" )


    Da muss wohl noch der Zugriff auf die DatensatzID (wenns eine gibt - ja nur bei Detailsseiten) dazu:
    Intrexx API Doc

    Das Kontextobjekt RtCache hab ich in der API noch gefunden, wie ich ihm die DatensatzID entlocke ist mir noch nicht aufgegangen wacko

    Danke für die tolle Unterstützung - um 02:38 kann ich meinem Hirn (noch) keine brauchbaren Velocity-Scripte entlocken attention

    Beste Grüße
    24.02.2016 13:36 von thomas.firnschrott
    Sehr interessantes Thema!

    Die aktuelle DatensatzID erhält man gewöhnlich mit $DC.getRecId(). Man muss aber noch abprüfen ob es sich um eine Übersichtsseite handelt.

    Auch muss man überlegen ob die vm auch aufgerufen wird, wenn die Seite bspw. als Portlet auf einer Portalseite angezeigt wird und ob dieses dann auch gezählt werden soll, bzw. ob der Code dann mehrfach erzeugt wird.
    Auch die Verwendung in einer freien Tabelle mus getestet werden, d wäre es dann $drRecord.getRecId()
    24.02.2016 13:53 von MartinW
    Hallo!

    Die Portlets werden jedenfalls mitgezählt, eventuell zu oft, das könnte sein, aber noch scheint mir die Anzahl relativ plausibel.
    Die Verwendung einer Seite in einer freien Tabelle dürfte nicht gewählt werden, sosnt hätte ich die "Zeilen" meines Telefonbuchs irrsinnig oft in der Statistik in Piwik, was aber ncith der Fall ist. Ich finde die Zeile dort gar nicht.

    Wie kann man prüfen ob es sich um eine Übersichtsseite handelt?
    Ich werd Mal versuchen den $DC.getRecId() einzubinden.

    Danke
    24.02.2016 14:10 von thomas.firnschrott
    Hallo nochmal!

    Also ich hab jetzt folgenden Code zur Bestimmung der Seitentiel:


    ## Page-Title ermitteln
    #if( $Request.containsKey("rq_TargetPageGuid") && $Unique.isGuid($Request.get("rq_TargetPageGuid", "")) )
    #set( $l_page = $RtCache.getPage($Request.get("rq_TargetPageGuid")) )
    #set( $l_pageProperties = $l_page.getProperties() )
    #set( $l_doNotTrack = $l_pageProperties["piwik.doNotTrack"] )
    #if( $l_pageProperties["piwik.title"] && $l_pageProperties["piwik.title"] != "" )
    #set( $l_piwikPageTitle = $l_pageProperties["piwik.title"] )
    #else
    #set( $l_piwikPageTitle = "$RtCache.getApplication($l_page.getAppGuid()).getTitle('de'):$l_page.getTitle('de')" )
    #if ($DC.getRecId()!=-1)
    #set ($l_piwikPageTitle = "${l_piwikPageTitle}:$DC.getRecId()")
    #end
    #end
    #end


    Mit dem Effekt, dass mir durch das $DC.getRecId() quasi APPName : SeitenName : DatensatzID in Piwik protokolliert wird.

    Anfangs hatte ich das Problem, dass bei Übersichtsseiten "-1" als DatensatzID ankam, daher das zusätzliche IF.

    Das funktioniert jetzt auch grundsätzlich, aber offenbar nicht ganz:

    Bei unserem internen Telefonbuch lade ich eine frei gestaltbare Tabelle als Übersicht und blende via Popup die Detailseite sein (also diesen Lightbox-ähnlichen Effekt)
    Hier werden keinerlei Datensätze protokolliert. Der Aufruf der Detailseite des Telefonbuchs, wohl, aber die Datensatz ID nicht (damit ich zB sehen würde wer im Telefonbuch wie oft aufgerufen wurde).

    Habt ihr dazu eine Idee?

    Liebe Grüße
    24.02.2016 15:00 von thomas.firnschrott
    Ist evtl. piwik.title gesetzt?
    Wenn ich das richtig sehe landet er dann nicht im else-Block
    24.02.2016 15:38 von MartinW
    Der Mann hat recht - hab da testweise ein piwik.title gesetzt...
    Danke Martin - auf das hätt ich selber kommen können.

    Hab jetzt die Datensatz Partie auch dort dazu.


    #set( $l_piwikPageTitle = "" )
    #set( $l_doNotTrack = false )
    ## Page-Title ermitteln
    #if( $Request.containsKey("rq_TargetPageGuid") && $Unique.isGuid($Request.get("rq_TargetPageGuid", "")) )
    #set( $l_page = $RtCache.getPage($Request.get("rq_TargetPageGuid")) )
    #set( $l_pageProperties = $l_page.getProperties() )
    #set( $l_doNotTrack = $l_pageProperties["piwik.doNotTrack"] )
    #if( $l_pageProperties["piwik.title"] && $l_pageProperties["piwik.title"] != "" )
    #set( $l_piwikPageTitle = $l_pageProperties["piwik.title"] )
    #if ($DC.getRecId()!=-1)
    #set ($l_piwikPageTitle = "${l_piwikPageTitle}:$DC.getRecId()")
    #end
    #else
    #set( $l_piwikPageTitle = "$RtCache.getApplication($l_page.getAppGuid()).getTitle('de'):$l_page.getTitle('de')" )
    #if ($DC.getRecId()!=-1)
    #set ($l_piwikPageTitle = "${l_piwikPageTitle}:$DC.getRecId()")
    #end
    #end
    #end

    #if( !$l_doNotTrack )
    <!-- Piwik Tracking -->
    <script type="text/javascript">
    #if( !$User.isAnonymous() && $User.getLoginName() != "" )
    _paq.push(['setCustomVariable',
    1, // Index, the number from 1 to 5 where this custom variable name is stored
    "User", // Name, the name of the variable, for example: Gender, VisitorType
    "$User.getLoginName()", // Value, for example: "Male", "Female" or "new", "engaged", "customer"
    "visit" // Scope of the custom variable, "visit" means the custom variable applies to the current visit
    ]);
    #end
    _paq.push(['setCustomVariable',
    2, // Index, the number from 1 to 5 where this custom variable name is stored
    "PiwikTitle", // Name, the name of the variable, for example: Gender, VisitorType
    "$l_piwikPageTitle", // Value, for example: "Male", "Female" or "new", "engaged", "customer"
    "page" // Scope of the custom variable, "visit" means the custom variable applies to the current visit
    ]);
    #if($l_piwikPageTitle != "")
    _paq.push(['setDocumentTitle', '$l_piwikPageTitle']);
    #end
    _paq.push(['trackPageView']);
    _paq.push(['enableLinkTracking']);
    </script>
    <!-- End Piwik Code -->
    #end

    25.02.2016 07:22 von thomas.firnschrott
    Was mit obigem Code funktioniert:


    • sämtliche Besucher Auswertungen wie Log, Geräte, Auflösung, Betriebssystem, Browser, Engines, Plugins, Orte
    • Seitentitel in Piwik mit App:Page:Record oder Setting piwik-title:Record (Hauptwerk dieses Artikels)
    • Ausgehende Verweise
    • Benutzerdefinierte Variable


    Was in Kombination Piwik-Intrexx wenig Sinn macht:

    • Ganzer Punkt Seiten, hier werden nur direkte Zugriffe auf App,Seite,Record geloggt wenn man diese mit rq Parametern aufruft daher relativ unbrauchbar, damit auch die Einstiegs-/Ausstiegsseiten...


    Ich kann jetzt relativ leicht feststellen, welche Seite wie oft aufgerufen wird, anhand des Seitentitels.
    Daher kann ich zB sehen, dass im Telefonbuch dir Übersicht 500x aufgerufen wurde, mein Detaileintrag 10x, der meines Chefs 12x.
    Was ich auf anhieb durch die Ergänzung des Titels mit der RecordID nicht mehr sehe ist die Summe wie oft überhaupt auf Detaileinträge geklickt wurde.
    Das heisst ich könnte das wohl händisch aufsummieren, find ich aber eher langweilig ;-)

    Mein nächstes Ziel daher:
    Der AppName, SeitenName muss zusätzlich in die Benutzerdefinierten Variablen oder (wegen Abkündigung derer) noch besser in die Custon Dimensions.
    Siehe: Piwik.org

    Ich erhoffe mir damit eben solche Fragestellungen beantworten zu können.

    Halte euch am Laufenden so bald ich die Custom Dimensions installiert und getestet habe.

    Liebe Grüße und nochmal ein grosses Danke
    25.02.2016 07:43 von thomas.firnschrott
    Ich kenne mich mit Piwik nicht aus, könnte man auch einfach zweimal Piwik aufrufen?
    Einmal mit RecId einmal ohne?
    25.02.2016 07:50 von MartinW
    Hallo zusammen,

    es nimmt ja langsam Gestalt an... attention

    nur würde ich ich Datensatz-ID nicht an den Page-Identifier dran hängen.
    Das Problem ist, dass piwik dann jeden einzelnen Datensatzwert als eigene
    Seite interpretiert und du dann nicht mehr auf einen Gesamtzähler einer
    bestimmten Seite kommst.
    Wie ich schon erwähnte, würde sich die Installation des Custom Dimensions-Plugins
    lohnen (kostenlos im piwik-App-Store).
    Denn gegenüber Custom Variables, welche man nur global auswerten kann,
    kann man mit Custom Dimensions auch auf eine bestimmte Seite bezogen
    die zusätzlich übermittelten Daten auswerten. Ein echter Vorteil gegenüber
    Custom Variables.
    Dann die Datensatz-ID über die Custom Dimensions übergeben und den Page-Title
    ohne Datensatz-ID. Gegebenenfalls könnte man noch die Datengruppe integrieren.
    Dann wäre der Identifier halbwegs eindeutig, denn eventuell gibt es ja Seiten,
    die den gleichen Namen haben. Wie zum Beispiel eine Übersichtsseite "Artikel"
    direkt unterhalb der Applikation und dazu noch eine Eingabeseite "Artikel" unterhalb
    der Datengruppe "Artikel".

    Außerdem noch die Überlegung, ob man App-Titel und Datengruppentitel nicht generell
    als Präfix einbindet.

    Das sähe dann so aus:
    #set( $l_piwikPageTitle = "" )
    #set( $l_doNotTrack = false )
    ## Page-Title ermitteln
    #if( $Request.containsKey("rq_TargetPageGuid") && $Unique.isGuid($Request.get("rq_TargetPageGuid", "")) )
    #set( $l_page = $RtCache.getPage($Request.get("rq_TargetPageGuid")) )

    ## App- und DataGroup-Title (Prefix) erstellen
    #set( $l_piwikPageTitle = "$!RtCache.getApplication($l_page.getAppGuid()).getTitle('de'):" )
    #if( $Unique.isGuid($l_page.getDataGroupGuid()) )
    #set( $l_piwikPageTitle = "$!{l_piwikPageTitle}$!RtCache.getDataGroup($l_page.getDataGroupGuid()).getTitle('de'):" )
    #end

    ## Properties abfragen und Identifier setzen
    #set( $l_pageProperties = $l_page.getProperties() )
    #set( $l_doNotTrack = $l_pageProperties["piwik.doNotTrack"] )
    #if( $l_pageProperties["piwik.title"] && $l_pageProperties["piwik.title"] != "" )
    #set( $l_piwikPageTitle = "$!{l_piwikPageTitle}$l_pageProperties['piwik.title']" )
    #else
    #set( $l_piwikPageTitle = "$!{l_piwikPageTitle}$l_page.getTitle('de')" )
    #end
    #end


    Ach ja, ich würde die Datensatz-ID "-1" nicht heraus filtern, da sie ja für einen NEUEN Datensatz steht,
    zumindest für die Absicht, diesen anzulegen. Kann man ja sicherlich auch später in piwik noch filtern...

    Gruß
    25.02.2016 08:46 von handw3rker
    Hallo!

    Ja ich bin auch begeistert wie die einst recht hoffnungslose Lage sich gewendet hat.
    Ich hatte nicht mehr wirklich damit gerechnet, dass Piwik vernünftige Statistiken zu Intrexx speichern könnte, da es ja keine verschiedenen Seiten gibt.

    Die Datensatz ID hab ich Mal an den Titel gehängt um zu experimentieren, auch obs geht und was geht.
    Genau das Problem mit dem Gesamtzähler für die Seite entsteht dadurch.

    CustomDimensions hab ich schon installiert und eingebunden.

    Leider kann ich
    Denn gegenüber Custom Variables, welche man nur global auswerten kann, kann man mit Custom Dimensions auch auf eine bestimmte Seite bezogen die zusätzlich übermittelten Daten auswerten. Ein echter Vorteil gegenüber Custom Variables.

    nicht nachvollziehen.

    Es sind in Piwik ja schon die Seiten nicht verwendbar, durch die Technik von Intrexx (immer index). Und wenn könnte ich keine Verbindung zu den CustomDimensions finden. Wir haben bis jetzt nur den Seitentitel gehabt den wir mit Infos gefüllt haben.

    Was aber geht, mit CustomDimensions, ist neue Punkte im Scope "Aktionen" zu erzeugen, für jede Dimension eine.

    Man kann also, was ich jetzt probiert habe, Applikation, Seite und Datensatz in eine eigene Custom Dimension speichern und in einem eigenen neuen Punkt den es dann gibt auswerten.

    Leider bekomm ich dann keine Verbindung zusammen zwischen den Dimensions.

    APPLIKATION
    Daher Applikation passt super, in der Seite in Piwik seh ich insgesamt wie viele Aktionen in der Applikation gemacht wurden, unabhängig von Seite und Datensatz.

    SEITE
    Seitenname ist eher doof, weil Applikation : Seite erst eindeutig wird, bei uns zumindest, darum hab ich das Prefix nachträglich rein weil ich in Piwik keinen Connex zwischen Applikation und Seite schaffe.
    Das geht dann auch gut, ich sehe pro Seite zB Telefonbuch : Übersicht, Telefonbuch : Detail, oder auch Schwarzes Brett : Übersicht - nur so konnte ich vermeiden, dass die beiden Übersicht zusammengezählt wurden.

    DATENSATZ
    Ähnlich wie oben ist das nicht recht sinnvoll allein, daher hab ich Mal Prefix Applikation : Seite : Datensatz gespeichert.
    So sehe ich schön, wie oft Telefonbuch : Detail : ID_Thomas verwendet wurde oder wie oft die Stellenausschreibung xxx im Detail angezeigt wurde Jobs : Detail : ID_Job

    Zusätzlich hab ich jetzt noch die Seitentitel, die aber eher als Zusatzinfo dienen.

    Dazu hab ich bisher folgenden Code:

    ##########################################################################
    ## Benutzerdefinierter Tracking Code für Piwik --- by Thomas FIRNSCHROTT #
    ##########################################################################
    ## Variable initialisieren
    #set( $l_piwikPageTitle = "" )
    #set( $l_piwikApplikation = "" )
    #set( $l_piwikSeite = "" )
    #set( $l_piwikDatensatz = "" )
    #set( $l_doNotTrack = false )

    ## Piwik-Daten ermitteln
    #if( $Request.containsKey("rq_TargetPageGuid") && $Unique.isGuid($Request.get("rq_TargetPageGuid", "")) )
    #set( $l_page = $RtCache.getPage($Request.get("rq_TargetPageGuid")) )
    #set( $l_pageProperties = $l_page.getProperties() )
    #set( $l_doNotTrack = $l_pageProperties["piwik.doNotTrack"] )
    #set( $l_piwikApplikation = $RtCache.getApplication($l_page.getAppGuid()).getTitle('de'))
    #set( $l_piwikSeite = $l_page.getTitle('de'))
    ## Wenn es sich nicht um eine Übersichtsseite handelt Datensatz-Variable setzen
    #if ($DC.getRecId()!=-1)
    #set( $l_piwikDatensatz = $DC.getRecId())
    #end
    ## Wenn piwik.title gesetzt dann diesen als Seitentitel nehmen und ggf. DatensatzID anhängen
    #if( $l_pageProperties["piwik.title"] && $l_pageProperties["piwik.title"] != "" )
    #set( $l_piwikPageTitle = $l_pageProperties["piwik.title"] )
    #if ($DC.getRecId()!=-1)
    #set ($l_piwikPageTitle = "${l_piwikPageTitle}:$l_piwikDatensatz")
    #end
    ## Sonst Applikationsname:Seitenname als Seitentitel nehmen und ggf. DatensatzID anhängen
    #else
    #set( $l_piwikPageTitle = "$l_piwikApplikation:$l_piwikSeite" )
    #if ($DC.getRecId()!=-1)
    #set ($l_piwikPageTitle = "${l_piwikPageTitle}:$l_piwikDatensatz")
    #end
    #end
    #end
    ## Wenn bei der Seite kein piwik.doNotTrack gesetzt ist starten wir das Tracking
    #if( !$l_doNotTrack )
    <!-- Piwik Tracking -->
    <script type="text/javascript">
    ## Seitentitel überschreiben
    #if($l_piwikPageTitle != "")
    _paq.push(['setDocumentTitle', '$l_piwikPageTitle']);
    #end
    ## Benutzername in Custom Dimension
    #if( !$User.isAnonymous() && $User.getLoginName() != "" )
    _paq.push(['setCustomDimension', 4, '$User.getLoginName()']);
    #end
    ## Applikationsname in Custom Dimension
    _paq.push(['setCustomDimension', 1, '$l_piwikApplikation']);
    ## Applikationsname:Seitenname in Custom Dimension
    _paq.push(['setCustomDimension', 2, '$l_piwikApplikation:$l_piwikSeite']);
    ## Applikationsname:Seitenname:Record-ID in Custom Dimension
    #if ( $l_piwikDatensatz && $l_piwikDatensatz != "" )
    _paq.push(['setCustomDimension', 3, '$l_piwikApplikation:$l_piwikSeite:$l_piwikDatensatz']);
    #end
    ## Tracking starten
    _paq.push(['trackPageView']);
    _paq.push(['enableLinkTracking']);
    </script>
    <!-- End Piwik Code -->
    #end


    Was jetzt nicht auswertbar ist:
    Zugriffe auf Datensatz unabhängig von Seite, also wenns etwa zwei verschiedene Eingabemasken gibt. Das muss ich aber auch nicht haben.

    Das mit der RecID=-1 ist natürlich richtig, ich hatte nur bei reinen Ansichts-Übersichtsseiten dann Applikation : Seite : -1 im Protokoll was mir absolut nicht gefiel.
    Auch im Custom Scope bringt mir die -1 nichts weils ja eben kein Datensatz ist. Darum auch bei den Datensätzen ausgenommen wenn -1

    Die korrekte Abfrage wäre natürlich, wenn es eine Übersichtsseite ist, und nicht einen speziellen Datensatz betrifft. Die konnte ich aber nicht, darum die -1 attention

    Ob ich die DatengruppenID noch irgendwo unterbringe überlege ich noch, danke jedenfalls für den Hinweis.

    Ein Tipp von meiner Seite:
    Beim Anlegen der CustomDimensions vorher überlegen, die lassen sich par tour nicht mehr löschen.
    Die erste angelegt hat ID 1 und das ist quasi unveränderlich... huh

    Vermutlich nimm ich die RecID dann vom Titel noch mal weg, weil ich sie dort nicht mehr brauche, für die seltenen Fälle eine genau ID auszuwerten komm ich über die CustomDimensions zusammen und die Seitentitel bleiben übersichtlicher.

    Was steht bei einer Übersichtsseite (direkt unter App) die auf mehrere Datengruppen zugreift in
    $!RtCache.getDataGroup($l_page.getDataGroupGuid()).getTitle('de')
    ?

    Bin noch nicht ganz sicher wohin ich diesen Datengruppen-Namen speichern soll.

    Achja, und die Portalseite muss ich noch etwas genauer analysieren.
    Offenbar wird Mal jedes Portlet getrackt, das ist ja nicht so schlimm, auch wenn bei uns die Gestaltung eh stark eingeschränkt wird und eigentlich jeder die selbe Portalseite sieht.
    Die Portlets die ich nicht in der Statistik brauche kann ich ja mit piwik.doNotTrack ausnehmen. Ich glaube aber, dass die Portalseite an sich noch falsch gezählt wird, und Applikationsname hab ich dazu auch keinen.
    Momentan denk ich in die Richtung des ersten Tips von Handwerker nach, ein verstecktes, pflichtiges Portlet zu machen, dessen Aufrufzahl ich für die Startseite verwende.

    Grüße
    25.02.2016 09:53 von thomas.firnschrott
    Mit dieser Bedingung lässt sich prüfen, ob die aktuelle Seite als Portlet auf einer Portalseite angezeigt wird.


    ### Bedingung damit auf Portalseiten nicht jedes Anwendungsportlet einen Seitenaufruf verursacht.
    #if($runIn!="Portal")

    #end


    Evtl. hilft dir das weiter. Ich finde das hier übrigens ein super Thema thumbsup
    14.04.2016 06:45 von MartinW
    Hi,

    da ich auch an dem Konstukt interessiert bin habe ich das jetzt alles mal nachgebastelt, soweit funktioniert das auch alles sehr gut.
    Ich habe dann auch den Tipp von Martin mit dem
    #if($runIn!="Portal")
    befolgt damit die Portlets nicht alle gezählt werden, auch das geht wundderbar.
    Jetzt wollte ich mir ein Benutzerdefiniertes Portlet machen und da den Javascript aufruf rein packen, damit ich das Portal zumindest einmal tracken kann aber das darf man ja garnicht. JavaScript direkt im Portlet ist nicht erlaub.
    Muss ich jetzt extra ein Portlet in einer Applikaition dafür machen um das zu realisieren oder kann man JavaScript direkt im Portlet irgendwie anders zum laufen bringen?
    07.06.2016 08:00 von falkh
    Zurück | Alles über Intrexx | Impressum | Datenschutzerklärung

    Über United Planet
    © 2019 United Planet GmbH
    Schnewlinstraße 2
    79098 Freiburg