So. Ich habe heute auch das Google E-Commerce Tracking einrichten wollen und hatte zuerst auch die gleichen Probleme wie vollautomat. Ich bin dem etwas nachgegangen und möchte hier kurz die Lösung/Erklärung für das Problem darstellen.
Erst einmal wird die /checkout_success.php aber gemäß der Anleitung suchen:
$orders_query = xtc_db_query("select orders_id,
orders_status
from ".TABLE_ORDERS."
where customers_id = '".$_SESSION['customer_id']."'
order by orders_id desc limit 1");
und ersetzen mit:
$orders_query = xtc_db_query("select orders_id,
orders_status,
customers_city,
customers_state,
customers_country
from ".TABLE_ORDERS."
where customers_id = '".$_SESSION['customer_id']."'
order by orders_id desc limit 1");
zusätzlich nach:
$smarty->assign('FORM_END', '</form>');
erweitert um:
// Google Analytics start$smarty->assign('oID',$last_order);$smarty->assign('CITY',$orders['customers_city']);$smarty->assign('STATE',$orders['customers_state']);$smarty->assign('COUNTRY',$orders['customers_country']);$orders_total_shipping_query = xtc_db_query
("select value from ".TABLE_ORDERS_TOTAL
." where orders_id = '".$last_order."' and class='ot_shipping'");$orders_total_shipping = xtc_db_fetch_array
($orders_total_shipping_query);$smarty->assign('SHIPPING',$orders_total_shipping['value']);$orders_total_tax_query = xtc_db_query
("select value from ".TABLE_ORDERS_TOTAL
." where orders_id = '".$last_order."' and class='ot_tax'");$orders_total_tax = xtc_db_fetch_array
($orders_total_tax_query);$smarty->assign('TAX',$orders_total_tax['value']);$orders_total_query = xtc_db_query
("select value from ".TABLE_ORDERS_TOTAL
." where orders_id = '".$last_order."' and class='ot_total'");$orders_total = xtc_db_fetch_array
($orders_total_query);$smarty->assign('VALUE',$orders_total['value']);$order_query = xtc_db_query
("SELECT categories_name, p.products_id, orders_products_id, products_model, products_name, products_price, products_quantity FROM ".TABLE_ORDERS_PRODUCTS
." p, ".TABLE_PRODUCTS_TO_CATEGORIES
." ptc, ".TABLE_CATEGORIES_DESCRIPTION
." cd WHERE p.products_id = ptc.products_id AND ptc.categories_id=cd.categories_id AND cd.language_id = 2 AND orders_id='".$last_order."'"); $order_data = array ();while ($order_data_values = xtc_db_fetch_array
($order_query)) {$order_data[] = array ('PRODUCTS_MODEL' => $order_data_values['products_id'],'PRODUCTS_NAME' => $order_data_values['products_name'],'CAT' => $order_data_values['categories_name'],'PRODUCTS_SINGLE_PRICE' => $order_data_values['products_price'],'PRODUCTS_QTY' => $order_data_values['products_quantity']);}$smarty->assign('order_data', $order_data);// Google Analytics end Der aktuelle Google Tracking Code ist nicht mehr kompatibel zu der bisherigen Anleitung. Im neuen Code wird ein "Asynchrones Tracking" benutzt.
Den asynchronen Code erkennt man daran, dass er beginnt mit:
var _gaq = _gaq || [];
Ich habe als alles so vorbereitet, wie es in diesem Thema beschrieben ist und dann folgendes geändert:
Der Google Tracking Code wird in 2 Teile geteilt, wie es auch bei
Google Code unter
Split Snippet beschrieben ist.
Die letzten Zeilen des Google Codes bleiben weiterhin am Ende der Website, also in der templates/TEMPLATENAME/javascript/general.js.php stehen:
<script type="text/javascript">
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
Die ersten 3 Zeile kommen jedoch an den Seitenanfang, also in die Datei includes/header.php:
( eingebettet in ein Script-Tag )
ich hab das:
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXXX-X']);
_gaq.push(['_gat._anonymizeIp']);
_gaq.push(['_trackPageview']);
</script>
vor die Zeilen:
<script type="text/javascript"><!--
var selected;
var submitter = null;
eingefügt.
Das UA-XXXXXX-X natürlich gegen die eigenen Google Analytics ID ersetzen.
Bisher wurde also nur der neue asynchrone Google Code aufgeteilt in 2 Teile.
Jetzt muss man noch die Funktionsaufrufe in der Datei templates/TEMPLATENAME/module/checkout_success.html durch die asynchronen ersetzen.
Sieht dann so aus:
<!-- Google e-Commerce Analytics -->
<script type="text/javascript">
_gaq.push(['_addTrans',
'{$oID}',
'Name deines Shops',
'{$VALUE}',
'{$TAX}',
'{$SHIPPING}',
'{$CITY}',
'{$STATE}',
'{$COUNTRY}'
]);
{foreach name=aussen item=order_values from=$order_data}
_gaq.push(['_addItem',
'{$oID}',
'{$order_values.PRODUCTS_MODEL}',
'{$order_values.PRODUCTS_NAME}',
'{$order_values.CAT}',
'{$order_values.PRODUCTS_SINGLE_PRICE}',
'{$order_values.PRODUCTS_QTY}'
]);
{/foreach}
_gaq.push(['_trackTrans']); //submits transaction to the Analytics servers
</script>
<!-- Google e-Commerce Analytics Ende -->
"Name deines Shops" dabei ersetzen.
Bei mir wurde zuerst Stadt und Land nicht übermittelt, weil ich in der Datei checkout_success.php in der Zeile mit dem "$orders_query = " übersehen habe, nach dem "select orders_id, orders_status" noch ein ",customers_city,customers_state,customers_country" einzufügen, wie es im ZIP File steht.
Danach ging das Tracking einer Bestellung. Ich habe eine Testbestellung gemacht und beim Abschluss, also auf der Seite "Ihre Bestellung wurde erfolgreich ausgeführt!" (checkout_success.php) den Quelltext kontrolliert.
Am Anfang müssen die ersten 3 Zeilen "var _gaq = _gaq || [];" zu finden sein, dann in der Mitte der Seite die Funktionen mit den Artikeln etwas so:
<!-- Google e-Commerce Analytics -->
<script type="text/javascript">
_gaq.push(['_addTrans',
'10482',
'Shopname',
'6.4500',
'',
'5.9000',
'Ort',
'',
'Deutschland'
]);
_gaq.push(['_addItem',
'10482',
'159',
'Geschenk',
'Papeterie',
'0.5500',
'1'
]);
_gaq.push(['_trackTrans']); //submits transaction to the Analytics servers
</script>
<!-- Google e-Commerce Analytics Ende -->
Und am Ende der Seite dann der Rest des Google Codes.
Achja - Es dauert ca. 10 Minuten, bis Google die Bestellung dann auf der Analytics Seite registriert hat.