Hallo,
habe lange überlegt, wie ich ein kleines quick&dirty Modul für die Auswertung diverser NL, die über den Shop verschickt werden, realisieren kann. Hier die LSG. (auf eigene Gefahr! und unbedingt Backup der betroffenen Dateien!)
Allg:
- Es werden Link-Klicks im NL getrackt => wir brauchen eine User-Referenz und eine NL-Referenz => Realisert als URL Parameter: 'usid' und 'nlid'
- Weil das jetzt q&d ist, und ich nicht mein ganzes Modul mit Tracking von unterschiedlichen Propertys veröffentlichen werde, machen wir alles abgespeckt im CORE, und tracken nur die Aufrufe der Startseite:
1. neue DB Tabelle für das Tracking:
--
-- Tabellenstruktur für Tabelle `oxus2nl`
--
CREATE TABLE IF NOT EXISTS `oxus2nl` (
`oxid` varchar(32) CHARACTER SET utf8 NOT NULL,
`oxuserid` varchar(32) CHARACTER SET utf8 NOT NULL,
`oxnlid` varchar(32) CHARACTER SET utf8 NOT NULL,
`oxtimestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`oxviewcount` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`oxid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
Damit haben wir die Ergebnistabelle angelegt.
2. Da wir die URL Paramter haben, lesen wir diese beim Klick von Link zu Shop aus:
Dazu erweitern wir die start.php in der Funktion: render
Code:
Zu diesem Zeitpunkt sind alle relevanten Daten in der DB gespeichert.
Also folgende Szenarien:
- user klickt zum 1. Mal auf NL - Link (user noch gar nicht in db - user->view=1)
- user klickt zum 1. Mal auf NL - Link (user schon in db aber anderer NL user->view=1)
- user klickt auf NL - Link (user schon in db und gleicher NL user->view=+1)
3. Nun möchten wir die Daten natürlich auswerten, das machen wir am schnellsten innerhalb der Admin-NL Klassen im Tab: "Versenden":
Klasse: newsletter_selection.php Funktion:render
Position: nach
einfügen:
Damit werden die Daten analysiert und an das Template übergeben.
Nun im Template newsletter_selection.tpl folgendes einfügen:
Als letztes DIV der rechten Seite:
4. Nun kann es losgehen: Damit das ganze auch richtig läuft, muss der Shop-Link im NL so aussehen:
Da das für evtl. Kunden zu kompliziert ist, habe ich noch die oxnewsletter.php erweitert: ca. Zeile 205 (nach
)
folgendes eingefügt:
Damit reicht es im Newsletter-Designer statt des obigen Links einfach nur: [{new_shop_link}] zu schreiben und der Rest geht automatisch.
Wenn das jemand erweitern möchte, oder als Modul ausbauen, dann viel Spaß - es ist möglich, fast alles mit diesem Prinzi auszuwerten.
Viel Spaß
Stephan
__
getestet unter oxid 4.7.5 und unter 4.6.4
habe lange überlegt, wie ich ein kleines quick&dirty Modul für die Auswertung diverser NL, die über den Shop verschickt werden, realisieren kann. Hier die LSG. (auf eigene Gefahr! und unbedingt Backup der betroffenen Dateien!)
Allg:
- Es werden Link-Klicks im NL getrackt => wir brauchen eine User-Referenz und eine NL-Referenz => Realisert als URL Parameter: 'usid' und 'nlid'
- Weil das jetzt q&d ist, und ich nicht mein ganzes Modul mit Tracking von unterschiedlichen Propertys veröffentlichen werde, machen wir alles abgespeckt im CORE, und tracken nur die Aufrufe der Startseite:
1. neue DB Tabelle für das Tracking:
--
-- Tabellenstruktur für Tabelle `oxus2nl`
--
CREATE TABLE IF NOT EXISTS `oxus2nl` (
`oxid` varchar(32) CHARACTER SET utf8 NOT NULL,
`oxuserid` varchar(32) CHARACTER SET utf8 NOT NULL,
`oxnlid` varchar(32) CHARACTER SET utf8 NOT NULL,
`oxtimestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`oxviewcount` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`oxid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
Damit haben wir die Ergebnistabelle angelegt.
2. Da wir die URL Paramter haben, lesen wir diese beim Klick von Link zu Shop aus:
Dazu erweitern wir die start.php in der Funktion: render
Code:
PHP Code:
if(oxConfig::getParameter( 'usid' ) && oxConfig::getParameter( 'usid' ) !="") {
$userId=oxConfig::getParameter( 'usid' );
$nlid=oxConfig::getParameter( 'nlid' ) ? oxConfig::getParameter( 'nlid' ) : "";
$sSqlUserCheck="SELECT count(oxid) from oxus2nl where oxuserid='$userId'";
$sql_log="1.".$sSqlUserCheck;
$oDb = oxDb::getDb();
$result=$oDb->getone($sSqlUserCheck);
$result=(int)$result;
//Anzahl der Eintraege ist gr 0 also user generell schon in db
if ($result>0 && $nlid!="") {
$sSqlUserNlCheck="SELECT count(oxid) from oxus2nl where oxuserid='$userId' and oxnlid='$nlid'";
$sql_log.="2.".$sSqlUserNlCheck;
$result_nl=$oDb->getone($sSqlUserNlCheck);
$result_nl=(int)$result_nl;
//NL schon gesichtet, also view=view+1
if ($result_nl>0) {
$sSqlUserViewCheck="SELECT oxviewcount from oxus2nl where oxuserid='$userId' and oxnlid='$nlid'";
$sql_log.="3.".$sSqlUserViewCheck;
$result_view=$oDb->getone($sSqlUserViewCheck);
$result_view=(int)$result_view;
$result_view=$result_view+1;
$sSqlUserViewUpdate="Update oxus2nl set oxviewcount=$result_view where oxuserid='$userId' and oxnlid='$nlid'";
$sql_log.="4.".$sSqlUserViewUpdate;
$rs=$oDb->execute($sSqlUserViewUpdate);
} else {
//user hat diesen nl noch nicht gesehen
$newid="sk_".$userId."_".$nlid;
$sSqlUserNlInsert="insert into oxus2nl (oxid,oxuserid,oxnlid,oxviewcount) Values ('$newid','$userId','$nlid',1);";
$sql_log.="3.".$sSqlUserNlInsert;
$rs=$oDb->execute($sSqlUserNlInsert);
}
//die ("anzahl der user und NL:".$result_nl." ".$sSqlUserNlCheck." sql log:".$sql_log);
} else {
//neuer Eintrag user, newsletterid, view=1
$newid="sk_".$userId."_".$nlid;
$sSqlUserNlInsertN="insert into oxus2nl (oxid,oxuserid,oxnlid,oxviewcount) Values ('$newid','$userId','$nlid',1);";
$sql_log.="2.".$sSqlUserNlInsertN;
$insert=$oDb->execute($sSqlUserNlInsertN);
}
}
Also folgende Szenarien:
- user klickt zum 1. Mal auf NL - Link (user noch gar nicht in db - user->view=1)
- user klickt zum 1. Mal auf NL - Link (user schon in db aber anderer NL user->view=1)
- user klickt auf NL - Link (user schon in db und gleicher NL user->view=+1)
3. Nun möchten wir die Daten natürlich auswerten, das machen wir am schnellsten innerhalb der Admin-NL Klassen im Tab: "Versenden":
Klasse: newsletter_selection.php Funktion:render
Position: nach
PHP Code:
$soxId = $this->_aViewData["oxid"] = $this->getEditObjectId();
PHP Code:
$nlid=$this->getEditObjectId();
$oDb = oxDb::getDb();
//1.Sichtungen insgesamt - eindeutig
$sSqlCount="SELECT count(oxid) from oxus2nl where oxnlid='$nlid'";
$result_count=$oDb->getone($sSqlCount);
//2.Sichtungen insgesamt
$sSqlCount_bulk="SELECT sum(oxviewcount) from oxus2nl where oxnlid='$nlid'";
$result_count_bulk=$oDb->getone($sSqlCount_bulk);
$this->_aViewData["sicht_unique"] = $result_count;
$this->_aViewData["sicht_bulk"] = $result_count_bulk;
Nun im Template newsletter_selection.tpl folgendes einfügen:
Als letztes DIV der rechten Seite:
HTML Code:
<div class="nl_count">
<p>Eindeutige Click2Shop Rate:[{$sicht_unique}]</p>
<p>Gesamtrate Click2Shop:[{$sicht_bulk}]</p>
</div>
HTML Code:
<a href="[{$oViewConf->getBaseDir()}]index.php?cl=start&usid=[{$myuser->oxuser__oxid->value }]&nlid=[{$myid}]" title="nl">Link zum Shop</a>
PHP Code:
$oShop = $oView->addGlobalParams( $oShop );
folgendes eingefügt:
PHP Code:
$sLink="<a href='http://www.[B]myshopurl[/B].com/index.php?cl=start&usid=".$this->_oUser->oxuser__oxid->value."&nlid=".$this->oxnewsletter__oxid->value."' title='nl'>Jobolino Online-Shop</a>";
$oView->addTplParam( 'new_shop_link', $sLink);
Wenn das jemand erweitern möchte, oder als Modul ausbauen, dann viel Spaß - es ist möglich, fast alles mit diesem Prinzi auszuwerten.
Viel Spaß
Stephan
__
getestet unter oxid 4.7.5 und unter 4.6.4