Seite 1 von 1

tracking von downloads

Verfasst: Do 14. Sep 2006, 09:47
von trapperKarl
hallo!

für einen kunden erstelle ich gerade eine webseite mit contenido. eine der vorgaben ist, dass getrackt wird, wann welcher kunde auf welche datei (download) zugreift.

---

meine idee:

in der ausgabe des moduls "Text HTML (2)" die vorkommenden links die mit /upload anfangen mit einem link auf redirect.php auszutauschen

als parameter werden uid und link übergeben

klickt der user auf einen download link werden mit der redirect.php alle nötigen daten in eine tabelle geschrieben (wie datetime, uid, datei)

dann wird die datei per header("Location: http://FILENAME/"); geöffnet

---

habe schon mit preg_replace versucht zu arbeiten.

wäre es nicht einfacher bei erstellung eines neuen links zu einer datei diesen gleich mit redirect.php?filename&uid zu ersetzen?

finde leider den code nicht, der bei auswahl einer datei den link erzeugt.

---

wer kann mir den nötigen tipp geben? oder denke ich zu kompliziert?

vielen dank für eure bemühungen im voraus!
Trapper

Verfasst: Do 14. Sep 2006, 09:49
von stese
du könntest versuchen die hier umzuschreiben:
http://contenido.org/forum/viewtopic.php?t=11165
counten tut sie schon

Verfasst: Do 14. Sep 2006, 10:49
von trapperKarl
japp, cooles modul!

allerdings ist es glaube ich jetzt mehr arbeit,
das modul einzusetzen als nen eigenen tracker zu bauen ...

glaube ich :)

Verfasst: Do 14. Sep 2006, 13:49
von trapperKarl
huhu!

kann mir denn jeamand sagen, wo der html editor den link konstruiert, wenn ich den mit dem ketten symbol erstelle?

danke :)=

Verfasst: Do 14. Sep 2006, 16:02
von stese
um die links dort zu manipulieren kannst du eine chain einsetzen.

das sind die beiden benötigten chain punkte:

Code: Alles auswählen

$_cecRegistry->addChainFunction("Contenido.Content.CreateArticleLink", "deineFunktionZurURLÄnderung");
$_cecRegistry->addChainFunction("Contenido.Content.CreateCategoryLink", "deineFunktionZurURLÄnderung");

Verfasst: Do 14. Sep 2006, 16:05
von trapperKarl
hy!

dankeschön :)

bin allerdings schon fast fertig, werde das gleich mal posten ...

Verfasst: Do 14. Sep 2006, 16:19
von trapperKarl
so, ich bin jetzt soweit durch, ist zwar alles quick & dirty, aber es läuft. (denke ich)

in der datenbank folgende tabellen anlegen:

Code: Alles auswählen

CREATE TABLE `con_tracker` (
  `id` int(255) NOT NULL auto_increment,
  `uid` int(255) NOT NULL default '0',
  `time` datetime NOT NULL default '0000-00-00 00:00:00',
  `category` int(255) NOT NULL default '0',
  `article` int(255) NOT NULL default '0',
  `download` varchar(255) NOT NULL default '',
  `sub1` varchar(255) NOT NULL default '',
  `sub2` varchar(255) NOT NULL default '',
  `sub3` varchar(255) NOT NULL default '',
  `sub4` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=251 ;
und

Code: Alles auswählen

CREATE TABLE `con_tracker_redirect` (
  `id` int(255) NOT NULL auto_increment,
  `file` varchar(255) NOT NULL default '',
  `uid` int(255) NOT NULL default '0',
  `sub1` varchar(255) NOT NULL default '',
  `sub2` varchar(255) NOT NULL default '',
  `sub3` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=101 ;
das modul Text HTML (2) habe ich so erweitert:

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname  :      Text HTML
* Author(s)   :     Andreas Lindner
* Copyright   :     Contenido - four for business, Andreas Lindner
* Created     :     05.08.2005
************************************************/
$zeile = "CMS_HTML[2]";
$output = "CMS_HTML[2]";
$user = $auth->auth["uid"];
$needle[0] = 'upload';

$pattern = '=^(.*)<a(.*)href\="?(\S+)"([^>]*)>(.*)</a>(.*)$=msi';
 while (preg_match($pattern, $zeile, $text))
 {
  $link = $text[3];
  $sql_write_tracking = "INSERT INTO con_tracker_redirect(file, uid, sub1, sub2, sub3) 
  VALUES ('$link', '$user', '', '', '')";
  $mysql_con_tracker = $db->query($sql_write_tracking);
  $mysql_con_last_id_query = 'SELECT LAST_INSERT_ID()';
  $mysql_con_last_id = $db->query($mysql_con_last_id_query);
  $mysql_id = mysql_fetch_array($mysql_con_last_id);

  $current_redirect = "counterredirect.php?download=";
  $current_redirect .= $mysql_id[0];
$current_redirect .= "&uid=";
$current_redirect .=  $user;

if( strpos($link,'upload') ){
  $output = str_replace($link, $current_redirect, $output);
}else{
$output = $output;
}

  /* $zeile neu bauen */
  $zeile = $text[1].$txt[6];
}

echo "<p>". $output ."</p>";
?>
und die datei counterredirect.php sieht so aus:

Code: Alles auswählen

<?
include_once ("config.php");
include_once ($contenido_path."includes/startup.php");

cInclude("includes", "functions.con.php");
cInclude("includes", "functions.con2.php");
cInclude("includes", "functions.api.php");
cInclude("includes", "functions.pathresolver.php");
cInclude("classes", "class.frontend.users.php"); 
cInclude("includes", "functions.general.php");
cInclude("classes", "class.dbfs.php");

$oFEUser = new FrontendUser; 
$db      = new DB_Contenido;
$download = $_GET["download"];
$uid = $_GET["uid"];

$oFEUser->loadByPrimaryKey($uid);

$time = date("Y-m-d H:i:s");
$forename = $oFEUser->getProperty("contact", "firstname"); 
$surname = $oFEUser->getProperty("contact", "lastname"); 

$sql_select_download = "SELECT * FROM con_tracker_redirect WHERE id = $download";
$sql_select_download = $db->query($sql_select_download);
$download = mysql_fetch_array($sql_select_download);
$file = $download["file"];

$sql_delete_download = "DELETE * FROM con_tracker_redirect WHERE id = $download";
$sql_delete_download = $db->query($sql_delete_download);

$sql_write_tracking = "INSERT INTO con_tracker (uid, time, category, article, download, sub1, sub2, sub3, sub4) VALUES ('$uid', '$time', '', '', '$file', '$forename', '$surname', '','')";
$mysql_con_tracker = $db->query($sql_write_tracking);

header("Location: ". $file . ""); 


?>
man kann ja mal darüber diskutieren ;)
grüße!