Hier finden Sie nicht nur Medienbüro360-News, sondern auch aktuelle Themen rund um eCommerce, Content Management und Internet im Allgemeinen.
Des Weiteren sollen verschiedene Tutorials bei der Erstellung und Integration von Modulen und Erweiterungen helfen.
xtCommerce Modul Kassenvorgänge auswerten
Dies soll unser erstes Tutorial sein und hoffentlich eines von Vielen werden. In diesem Fall ein kleines Modul für xtCommerce. Mit diesem Modul können abgebrochene Kassenvorgänge identifiziert werden und man erkennt an welcher Stelle sich User zum Ausstieg aus dem Shop entscheiden. Das Ganze soll am Ende ansprechend in einem Diagramm präsentiert werden. Diese Information kann nach einiger Zeit sehr interessant werden und lässt später erahnen ob eventuell zu hohe Versandkosten oder fehlende Zahlungsmöglichkeiten zum Abbruch bewegten.
Vorbereitungen
- es ist ratsam vorher ein vollständiges Backup zu erstellen
- getestet und entwickelt für xt:Commerce v3.0.4 SP2.1
- alle Ordnerangaben beziehen sich auf das Shopverzeichnis
- alle Downloads und Links findet ihr zusamengefasst am Ende des Tutorials
Wir werden eine neue Tabelle anlegen um dort die Daten der Kassenvorgänge zu speichern. Außerdem müssen wir noch das neue Script für den Adminbereich "anmelden" um es mit in die Rechteverwaltung aufzunehmen. Folgendes ist also als SQL-Anweisung auszuführen (z.B. via phpMyAdmin):
CREATE TABLE IF NOT EXISTS `checkout_log` (
`id` int(10) unsigned NOT NULL auto_increment,
`session_id` varchar(26) NOT NULL,
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`customer_id` int(10) unsigned NOT NULL,
`page` varchar(64) NOT NULL, PRIMARY KEY (`id`),
KEY `customer_id` (`customer_id`),
KEY `session_id` (`session_id`)
) ENGINE=MyIsam DEFAULT CHARSET=utf8;ALTER TABLE `admin_access` ADD `checkout_stats` BOOL NOT NULL ;
UPDATE `admin_access` SET `checkout_stats` = '1' WHERE `customers_id` = '1';
Neue Dateien
Wir benötigen zuerst eine neue Funktion, welche wir bei jedem Seitenaufruf einbinden.
/inc/xtc_update_checkout_log.php
function xtc_update_checkout_log() {
// wir interessieren uns nur für Kunden die bereits auf dem Weg zur Kasse sind
if (isset($_SESSION['customer_id'])) {
// Kassenvorgang aktiv?
if(eregi('checkout_', $_SERVER['PHP_SELF'])){
// schon unter Beobachtung?
if(isset($_SESSION['checkout_log_id'])){
// dann Update
if(eregi('checkout_shipping.php', $_SERVER['PHP_SELF']) ||
eregi('checkout_payment.php', $_SERVER['PHP_SELF']) ||
eregi('checkout_confirmation.php', $_SERVER['PHP_SELF']) ||
eregi('checkout_success.php', $_SERVER['PHP_SELF'])){
xtc_db_query("UPDATE checkout_log SET page = '".$_SERVER['PHP_SELF']."' WHERE id = ".$_SESSION['checkout_log_id']);
// Bestellung abgeschlossen ?
if(eregi('checkout_success.php', $_SERVER['PHP_SELF'])){
unset($_SESSION['checkout_log_id']);
}
}
}elseif(eregi('checkout_shipping.php', $_SERVER['PHP_SELF'])){
// neuen Eintrag anlegen
xtc_db_query("INSERT INTO checkout_log (session_id, customer_id, page) VALUES ('".xtc_session_id()."', ".$_SESSION['customer_id'].", '".$_SERVER['PHP_SELF']."')");
$_SESSION['checkout_log_id'] = mysql_insert_id();
}
}
}
}
Als nächstes benötigen wir noch eine Ausgabe der gesammelten Daten im Adminbereich:
/admin/checkout_stats.php
Diese gleicht den anderen Scripten im admin Ordner weitestgehend, es werden zusätzlich die benötigten Javascriptbibliotheken eingebunden und natürlich die Daten zu den Kassenvorgängen ausgelesen und dargestellt. Der eigentlich interessante Bereich ist die Abfrage und Auswertung der gesammelten Daten zu den abgebrochenen Kassenvorgängen:
<!-- Funktionalität Kassenvorgang Auswertung Start -->
<script language="javascript" type="text/javascript">
jQuery.noConflict();
jQuery(function() {line1 = [<?php if($data[0]['count']):?>
['Abbruch bei Versandkosten (<?php echo $data[0]['count'] ?> = <?php echo $data[0]['part']?>%)',<?php echo $data[0]['count']?>],
<?php endif;
if($data[1]['count']):?>
['Abbruch bei Zahlungsoptionen (<?php echo $data[1]['count'] ?> = <?php echo $data[1]['part']?>%)',<?php echo $data[1]['count']?>],
<?php endif;
if($data[2]['count']):?>
['Abbruch bei Zusammenfassung (<?php echo $data[2]['count'] ?> = <?php echo $data[2]['part']?>%)',<?php echo $data[2]['count']?>],
<?php endif;
if($data[3]['count']):?>
['Abgeschlossene Bestellungen (<?php echo $data[3]['count'] ?> = <?php echo $data[3]['part']?>%)',<?php echo $data[3]['count']?>],
<?php endif; ?>
];
plot1 = jQuery.jqplot('chartdiv', [line1], {
seriesDefaults:{renderer:jQuery.jqplot.PieRenderer, rendererOptions:{sliceMargin:8}},
legend:{show:true}
});
});
</script>
<div id="chartdiv" style="height: 500px; width: 700px;"> </div>
<!-- Funktionalität Kassenvorgang Auswertung Ende -->
Desweiteren werden wir Jquery und das Plugin jqPlot für die Dartstellung eines Diagramms verwenden.
Hier findet man das jqPlot Paket, dieses enthält alle benötigten Scripte: http://www.jqplot.com/
Kopiert folgende Dateien aus dem Download wie folgt in das Shopverzeichnis:
/admin/includes/javascript/jquery-1.3.2.min.js
/admin/includes/javascript/excanvas.min.js
/admin/includes/javascript/jquery.jqplot.min.js
/admin/includes/javascript/plugins/jqplot.pieRenderer.min.js
/admin/includes/jquery.jqplot.css
Anpassungen bestehender Dateien
Unsere neue Funktion binden wir in der
/inlcudes/application_top.php
wie folgt ein
...
require_once (DIR_FS_INC.'xtc_not_null.inc.php');
// edit: checkout_log
require_once (DIR_FS_INC.'xtc_update_whos_online.inc.php');
require_once (DIR_FS_INC.'xtc_activate_banners.inc.php');
...
Und etwas weiter unten :
...
// include the who's online
functions xtc_update_whos_online();
// edit: checkout_log
xtc_update_checkout_log();
...
Eine letzte Anpassung ist noch notwendig um unsere neue Funktionalität im Adminbereich zu verlinken. Dazu ergänzen wir folgende Datei
/admin/includes/column_left.php
wie folgt:
...
echo ('<div class="dataTableHeadingContent"><b>'.BOX_HEADING_CUSTOMERS.'</b></div>');
if (($_SESSION['customers_status']['customers_status_id'] == '0') && ($admin_access['customers'] == '1')) echo '<a href="' . xtc_href_link(FILENAME_CUSTOMERS, '', 'NONSSL') . '" class="menuBoxContentLink"> -' . BOX_CUSTOMERS . '</a><br>';
if (($_SESSION['customers_status']['customers_status_id'] == '0') && ($admin_access['customers_status'] == '1')) echo '<a href="' . xtc_href_link(FILENAME_CUSTOMERS_STATUS, '', 'NONSSL') . '" class="menuBoxContentLink"> -' . BOX_CUSTOMERS_STATUS . '</a><br>';
if (($_SESSION['customers_status']['customers_status_id'] == '0') && ($admin_access['orders'] == '1')) echo '<a href="' . xtc_href_link(FILENAME_ORDERS, '', 'NONSSL') . '" class="menuBoxContentLink"> -' . BOX_ORDERS . '</a><br>';
// edit: checkout_log
if (($_SESSION['customers_status']['customers_status_id'] == '0') && ($admin_access['customers'] == '1')) echo '<a href="' . xtc_href_link('checkout_stats.php', '', 'NONSSL') . '" class="menuBoxContentLink"> -Kassenvorgangauswertung</a><br>';
...
Es ist notwendig die neue Seite im Adminbereich für jeden Nutzer, der dafür Zugang haben soll freizuschalten. Dafür sucht man sich den entsprechenden Nutzer aus der Kundenverwaltung heraus und erteilt ihm entsprechende Rechte.


hier in der letzten Zeile den Haken bei "checkout_stats" setzen
Nun sollte unterhalb der Kundenverwaltung ein Link zur Auswertung zu sehen sein. Diese führt wahrscheinlich noch zu einem leeren Ergebnis, aber sobald erste Daten vorhanden sind erscheint hier etwas in dieser Form:

Downloads
- Anmelden um Kommentare zu schreiben
