Frontend User Log mit besuchten Seiten

TV
Beiträge: 22
Registriert: Fr 30. Jun 2006, 08:42
Kontaktdaten:

Frontend User Log mit besuchten Seiten

Beitrag von TV » Fr 30. Jun 2006, 08:56

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 :shock: 8)

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

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Fr 30. Jun 2006, 10:31

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!
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

TV
Beiträge: 22
Registriert: Fr 30. Jun 2006, 08:42
Kontaktdaten:

Beitrag von TV » Fr 30. Jun 2006, 12:05

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

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Fr 30. Jun 2006, 12:14

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
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

TV
Beiträge: 22
Registriert: Fr 30. Jun 2006, 08:42
Kontaktdaten:

Beitrag von TV » Fr 30. Jun 2006, 12:27

Ok, beide Änderungen durchgeführt!

Gruß

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Fr 30. Jun 2006, 12:58

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
Zuletzt geändert von HerrB am Fr 30. Jun 2006, 13:19, insgesamt 1-mal geändert.
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Fr 30. Jun 2006, 12:59

Öffne unter contenido/classes/contenido die Datei class.articlelanguage.php und ersetze diese Zeile:

Code: Alles auswählen

cInclude("classes", "class.genericdb.php");
mit

Code: Alles auswählen

cInclude("classes", "contenido/class.article.php");
(ist ein Bug)

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

TV
Beiträge: 22
Registriert: Fr 30. Jun 2006, 08:42
Kontaktdaten:

Beitrag von TV » Fr 30. Jun 2006, 13:09

Erledigt! :D

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

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Fr 30. Jun 2006, 13:18

Es wird vermutlich Fehlermeldungen hageln und ich bin aufgrund eines ... öhm ... wichtigen ... dienstlichen ... Termins oder so (der liegt so 17:00 Uhr ... :wink: ) 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
Zuletzt geändert von HerrB am Sa 1. Jul 2006, 16:02, insgesamt 2-mal geändert.
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Fr 30. Jun 2006, 13:20

Die Datei unter contenido/classes oder contenido/classes/contenido anlegen? Vermutlich ersteres?
Ja, contenido/classes.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

TV
Beiträge: 22
Registriert: Fr 30. Jun 2006, 08:42
Kontaktdaten:

Beitrag von TV » Sa 1. Jul 2006, 12:16

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!!! :D :o

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

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Sa 1. Jul 2006, 16:03

Ändere im Modul den Term FrontendLogCollection in cFrontendLogCollection, ich habe es oben schon korrigiert.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

TV
Beiträge: 22
Registriert: Fr 30. Jun 2006, 08:42
Kontaktdaten:

Beitrag von TV » So 2. Jul 2006, 11:25

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! 8)

Gruß
Tobias

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mo 3. Jul 2006, 12:49

Fein, was mir noch eingefallen ist: Möchtest Du auch den Kategorie-Namen im Klartext im Log haben?

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

TV
Beiträge: 22
Registriert: Fr 30. Jun 2006, 08:42
Kontaktdaten:

Beitrag von TV » Mo 3. Jul 2006, 13:05

Uns würde das so reichen. Wichtig ist für uns wer wie oft welchen Artikel anschaut!

Gruß
Tobias

Gesperrt