Quantcast
Channel: OXID Community Forum
Viewing all articles
Browse latest Browse all 6951

Kleines q&d Modul für Oxid-Newsletter Conversions

$
0
0
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:
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>&& $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);
            }
        } 

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
PHP Code:

$soxId $this->_aViewData["oxid"] = $this->getEditObjectId(); 

einfügen:
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

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:
HTML Code:

<div class="nl_count">
<p>Eindeutige Click2Shop Rate:[{$sicht_unique}]</p>
<p>Gesamtrate Click2Shop:[{$sicht_bulk}]</p>
</div>

4. Nun kann es losgehen: Damit das ganze auch richtig läuft, muss der Shop-Link im NL so aussehen:
HTML Code:

<a href="[{$oViewConf->getBaseDir()}]index.php?cl=start&amp;usid=[{$myuser->oxuser__oxid->value }]&amp;nlid=[{$myid}]" title="nl">Link zum Shop</a>
Da das für evtl. Kunden zu kompliziert ist, habe ich noch die oxnewsletter.php erweitert: ca. Zeile 205 (nach
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); 

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

Viewing all articles
Browse latest Browse all 6951

Trending Articles