Seite 1 von 2
Frontend User Log mit besuchten Seiten
Verfasst: Fr 30. Jun 2006, 08:56
von TV
Hallo Forum,
ich bin neuer Forums-User hier, aber das Forum nutzte ich schon eine weile und es hat mir bis jetzt schon bei allen Fragen die ich hatte, weiterhelfen können, nur eben für diese Frage nicht.
Im Post:
http://contenido.org/forum/viewtopic.php?t=12626 wird so etwas auch angesprochen, jedoch reicht uns das nicht.
Wir bräuchten also eine Art Big Brother
Nun gibt es die Möglichkeit, dass wir im Backend verfolgen können, welche Seiten der Frontend User besucht hat? So in der Art von "Administration --> Logs"
Dies wäre für unsere Statistiken sehr hilfreich.
Gruß
Tobias
Verfasst: Fr 30. Jun 2006, 10:31
von HerrB
Nun, wir könnten es zusammen entwickeln. Mit den besuchten Seiten? Urgh... das wird eine Datenmenge...
Wird ein paar Tage brauchen und Du musst mit ran.
Fangen wir an:
Lege mit phpMyAdmin eine neue Tabelle <Prefix>_frontendlog mit folgenden Spalten an (das ist kein SQL-Statement - in phpmyadmin nachbasteln):
10 Spalten:
idfrontendlog INT(10) NOT NULL DEFAULT 0
idfrontenduser INT(10) NOT NULL DEFAULT 0
username VARCHAR(255) NOT NULL
type VARCHAR(10) NOT NULL
idclient INT(10) NOT NULL DEFAULT 0
idlang INT(10) NOT NULL DEFAULT 0
idart INT(10) NOT NULL DEFAULT 0
idcat INT(10) NOT NULL DEFAULT 0
title VARCHAR(255) NOT NULL
created DATETIME NOT NULL DEFAULT 0000-00-00 00:00:00
phpMyAdmin zeigt das resultierende SQL-Statement bei Erzeugung an. Dieses bitte hier posten.
Gruß
HerrB
P.S.: Das ist Sammelstück eins von > 10, jetzt zum Einführungspreis von 4,95 Euro!
Verfasst: Fr 30. Jun 2006, 12:05
von TV
Hallo HerrB,
was heißt wir könnten
Ich bin nicht gerade ein speziallist in Sachen SQL und PHP. Werde aber mein bestes geben.
Ich habe jetzt mal die Tabelle eingefügt, foglendes kam dabei heraus.
Code: Alles auswählen
CREATE TABLE `con_frontendlog` (
`idfrontendlog` INT( 10 ) DEFAULT '0' NOT NULL PRIMARY KEY,
`idfrontenduser` INT( 10 ) DEFAULT '0' NOT NULL ,
`username` VARCHAR( 255 ) NOT NULL ,
`type` VARCHAR( 10 ) NOT NULL ,
`idclient` INT( 10 ) DEFAULT '0' NOT NULL ,
`idlang` INT( 10 ) DEFAULT '0' NOT NULL ,
`idart` INT( 10 ) DEFAULT '0' NOT NULL ,
`idcat` INT( 10 ) DEFAULT '0' NOT NULL ,
`title` VARCHAR( 255 ) NOT NULL ,
`created` DATETIME DEFAULT '0000-00-00 00:00:00 ' NOT NULL
) TYPE = MYISAM ;
Meinten Sie das mit SQL-Statement???
Stimmt das soweit? Mit dem index war ich mir nicht so sicher!
Gruß
Tobias
Verfasst: Fr 30. Jun 2006, 12:14
von HerrB
Ja, genau, ich habe noch einen Primary Key für die idfrontendlog ergänzt - das müsstest Du bei Dir noch aktivieren (phpMyAdmin).
Nächster Schritt:
Man öffne contenido/includes/cfg_sql.inc.php und trage unter
Code: Alles auswählen
$cfg["tab"]["frontendgroupmembers"] = $cfg['sql']['sqlprefix']."_frontendgroupmembers";
die Zeile
Code: Alles auswählen
$cfg["tab"]["frontendlog"] = $cfg['sql']['sqlprefix']."_frontendlog";
ein.
Gruß
HerrB
Verfasst: Fr 30. Jun 2006, 12:27
von TV
Ok, beide Änderungen durchgeführt!
Gruß
Verfasst: Fr 30. Jun 2006, 12:58
von HerrB
Ok.
Dann lege unter contenido/classes eine Datei Namens class.frontend.log.php mit folgendem Inhalt an:
Code: Alles auswählen
<?php
/*****************************************
* File : $RCSfile: class.frontend.log.php,v $
* Project : Contenido
* Descr : Frontend user class
* Modified : $Date: 2005/11/08 17:20:31 $
*
* © four for business AG, www.4fb.de, provided by HerrB
*
* $Id: class.frontend.log.php,v 1.16 2005/11/08 17:20:31 bjoern.behrens Exp $
******************************************/
cInclude("classes", "class.frontend.users.php");
cInclude("classes", "contenido/class.articlelanguage.php");
/**
* Collection management class
*/
class cFrontendLogCollection extends ItemCollection {
/**
* Constructor Function
* @param none
*/
function cFrontendLogCollection()
{
global $cfg;
parent::ItemCollection($cfg["tab"]["frontendlog"], "idfrontendlog");
$this->_setItemClass("cFrontendLog");
}
/**
* Loads an item by its ID (primary key)
* @param $itemID integer Specifies the item ID to load
*/
function loadItem ($itemID)
{
$item = new cFrontendLog();
$item->loadByPrimaryKey($itemID);
return ($item);
}
/**
* Creates a new log entry
* @param $idfrontenduser integer ID of frontenduser
* @param $type string Specifies log item type (e.g. "login", "article")
* @param $id_art integer optional, specifies the article id of the viewed article
* @param $id_cat integer optional, specified the category id of the views article (only for compatibility reasons)
*/
function create ($idfrontenduser, $type = "article", $id_art = 0, $id_cat = 0)
{
global $client, $lang;
$oFEUser = new FrontendUser;
$oFEUser->loadByPrimaryKey($idfrontenduser);
$sUserName = $oFEUser->get("username");
unset ($oFEUser);
$sTitle = "";
if ($id_art > 0 && is_numeric($id_art)) // && $id_cat > 0 && is_numeric($id_cat)
{
$oArticles = new cApiArticleLanguageCollection;
$oArticles->setWhere("idlang", $lang);
$oArticles->setWhere("idart", $id_art);
$oArticles->query();
if ($oArticle = $oArticles->next()) {
$sTitle = $oArticle->get("title");
}
unset ($oArticle);
unset ($oArticles);
} else
{
$id_art = 0;
$id_cat = 0;
}
$item = parent::create();
$item->set("idfrontenduser", $idfrontenduser);
$item->set("username", $sUserName);
$item->set("type", $type);
$item->set("idclient", $client);
$item->set("idlang", $lang);
$item->set("idart", $id_art);
$item->set("idcat", $id_cat);
$item->set("title", $sTitle);
$item->set("created", date("Y-m-d H:i:s"), false);
$item->store();
return $item;
}
}
/**
* Single Item
*/
class cFrontendLog extends Item {
/**
* Constructor Function
* @param none
*/
function cFrontendLog()
{
global $cfg;
parent::Item($cfg["tab"]["frontendlog"], "idfrontendlog");
}
}
?>
Der nächste Schritt folgt gleich.
Gruß
HerrB
Verfasst: Fr 30. Jun 2006, 12:59
von HerrB
Öffne unter contenido/classes/contenido die Datei class.articlelanguage.php und ersetze diese Zeile:
mit
(ist ein Bug)
Gruß
HerrB
Verfasst: Fr 30. Jun 2006, 13:09
von TV
Erledigt!
Frage hierzu:
Dann lege unter classes/contenido eine Datei Namens class.frontend.log.php mit folgendem Inhalt an
Die Datei unter contenido/classes oder contenido/classes/contenido anlegen? Vermutlich ersteres?
Gruß
Tobias
Verfasst: Fr 30. Jun 2006, 13:18
von HerrB
Es wird vermutlich Fehlermeldungen hageln und ich bin aufgrund eines ... öhm ... wichtigen ... dienstlichen ... Termins oder so (der liegt so 17:00 Uhr ...

) nur begrenzt verfügbar, wenn ich keine Zeit mehr habe, machen wir morgen oder Sonntag weiter.
Ähm, kleine Änderung, bitte verschiebe die neue Klasse nach contenido/classes (Tippfehler), oben habe ich es geändert.
Erstelle ein Modul mit folgendem Inhalt (nur Output):
Code: Alles auswählen
<?php
/* Add frontend log item for current article */
cInclude("classes", "class.frontend.log.php");
if (is_numeric($auth->auth["uid"])) { // Nice trick, as only the uid from frontend users is numeric... (and not "nobody")
$oLog = new cFrontendLogCollection;
$oLog->create($auth->auth["uid"], "article", $idart, $idcat);
unset ($oLog);
}
?>
und ergänze es in einem Template (z.B. dem Template der Startseite). Logge Doch dann mit einem Frontend-Account ein, gehe auf die Startseite (oder einen Artikel, der dieses Template ebenfalls verwendet).
Und dann sehen wir weiter. Wenn wider erwarten keine Fehlermeldung erscheint, wirf einen Blick in die Tabelle (bitte posten, was drinsteht, 1-2 Zeilen reichen). Wenn die Tabelle leer ist, noch einen Blick ins errorlog werfen.
Gruß
HerrB
Verfasst: Fr 30. Jun 2006, 13:20
von HerrB
Die Datei unter contenido/classes oder contenido/classes/contenido anlegen? Vermutlich ersteres?
Ja, contenido/classes.
Gruß
HerrB
Verfasst: Sa 1. Jul 2006, 12:16
von TV
So da bin ich wieder! Hatte gestern auch einen Termin um 17 Uhr
Danach war ich leider nicht mehr in der Lage etwas zu testen!!!
Also habe alle Änderungen durch. Nun kommt auf den den Seiten wo ich das Template eingefügt habe folgende Fehlermeldung:
Code: Alles auswählen
Fatal error: Cannot instantiate non-existent class: frontendlogcollection in /www/htdocs/w0071daf/cms/front_content.php(792) : eval()'d code on line 183
Die Tabelle hat keinen Eintrag!
Gruß
Tobias
Verfasst: Sa 1. Jul 2006, 16:03
von HerrB
Ändere im Modul den Term FrontendLogCollection in cFrontendLogCollection, ich habe es oben schon korrigiert.
Gruß
HerrB
Verfasst: So 2. Jul 2006, 11:25
von TV
Hallo HerrB,
nun hats geklappt! Keine Fehlermeldung, kein Errorlog.
Tabelleneintrag:
1 1 kunde article 1 1 79 72 Implementierung 2006-07-02 12:17:20
2 1 kunde article 1 1 79 72 Implementierung 2006-07-02 12:17:25
3 1 kunde article 1 1 41 52 Features 2006-07-02 12:17:27
Sieht gut aus!
Gruß
Tobias
Verfasst: Mo 3. Jul 2006, 12:49
von HerrB
Fein, was mir noch eingefallen ist: Möchtest Du auch den Kategorie-Namen im Klartext im Log haben?
Gruß
HerrB
Verfasst: Mo 3. Jul 2006, 13:05
von TV
Uns würde das so reichen. Wichtig ist für uns wer wie oft welchen Artikel anschaut!
Gruß
Tobias