So, eine Version Updatessicher für V2.1.0.0 Allerdings sollte die auch für alle anderen gehen! Einbauanleitung: Im Verzeichnis user_classes/overloads einen Ordner mit dem Namen CheckoutSuccessExtenderComponent anlegen. Darin die Datei user_classes/overloads/CheckoutSuccessExtenderComponent/IndivStyleGoogleAnalytics.inc.php anlegen. Mit folgendem Inhalt: PHP: <?php /* * ######################################################################################################### * Project: Gaka2014 * ######################################################################################################### * * IndivStyleGoogleAnalytics.inc.php * * 09.09.2014 www.indiv-style.de * * Copyright by H&S eCom * @author little Pit(S.B.) * * ######################################################################################################### */ class IndivStyleGoogleAnalytics extends IndivStyleGoogleAnalytics_parent { function proceed() { parent::proceed(); $coo_order = MainFactory::create_object('order', array($this->v_data_array['orders_id'])); $orders_total_query = xtc_db_query("select * from " . TABLE_ORDERS_TOTAL . " where orders_id = '" . (int) $this->v_data_array['orders_id'] . "'"); $orders_products_query = xtc_db_query("select * from " . TABLE_ORDERS_PRODUCTS . " where orders_id = '" . (int) $this->v_data_array['orders_id'] . "'"); $i = 0; while ($product = xtc_db_fetch_array($orders_products_query)) { $orders_products[$i] = $product; $catname = xtc_db_fetch_array(xtc_db_query( "SELECT c.categories_name FROM categories_description c, products_to_categories p WHERE p.products_id = '".$orders_products[$i]['products_id']."' AND p.categories_id != '0' AND p.categories_id = c.categories_id ")); $orders_products[$i]['categories'] = $catname['categories_name']; $i++; } while ($product = xtc_db_fetch_array($orders_total_query)) { $orders_total[$product['class']] = $product['value']; } $trans = array( 'id' => $this->v_data_array['orders_id'], 'affiliation' => 'Shopname', 'revenue' => $orders_total['ot_total'], 'shipping' => $orders_total['ot_shipping'], 'tax' => $orders_total['ot_tax']); $i = 0; foreach ($orders_products as $value) { $items[$i] = array( 'sku' => $value['products_model'], 'name' => $value['products_name'], 'category' => $value['categories'], 'price' => $value['products_price'], 'quantity' => $value['products_quantity'] ); $i++; } function getTransactionJs(&$trans) { $mytotal = "ga('ecommerce:addTransaction', { 'id': '{$trans['id']}', 'affiliation': '{$trans['affiliation']}', 'revenue': '{$trans['revenue']}', 'shipping': '{$trans['shipping']}', 'tax': '{$trans['tax']}' }); "; return $mytotal; } function getItemJs(&$transId, &$item) { $myitem = "ga('ecommerce:addItem', { 'id': '$transId', 'name': '{$item['name']}', 'sku': '{$item['sku']}', 'category': '{$item['category']}', 'price': '{$item['price']}', 'quantity': '{$item['quantity']}' }); "; return $myitem; } $google_analytics = "<script type=\"text/javascript\"> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-eureUA-Nummer', 'auto'); ga('send', 'pageview'); ga('require', 'ecommerce'); "; $google_analytics .= getTransactionJs($trans); foreach ($items as &$item) { $google_analytics .= getItemJs($trans['id'], $item); } $google_analytics .= " ga('ecommerce:send'); </script>"; $this->v_output_buffer['google_analytics'] = $google_analytics; //Änderung Ende } } Die Datei templates/EyeCandy/module/checkout_success.html kopieren und im gleichen Verzeichnis als checkout_success-USERMOD.html speichern. Das macht das ganze Updatessicher! Am Ende der Datei das einfügen: Code: {$google_analytics} Ersetzt bitte im Code eure UA-Nummer und den Shopname. Eine original-Datei ist angehängt.(Daten müssen auch da geändert werden!!!) Funktionstest hat er bestanden....
Hat bestens geklappt, genial!!!! Vielen vielen Dank!! An all diejenigen die es auch versuchen: braucht schon 24h Gedult, bis man die Resultate in der Statistik sieht.
Hallo Steffen, für Ausgaben aus einem CheckoutSuccessExtender heraus braucht man keine USERMODs mehr für die checkout_success.html. Du kannst in dem Extender einfach $this->html_output_array befüllen, das wird dann automagisch ausgegeben.
Wie mach ich das genau? Also Schritt für Schritt für diejenigen ohne Fachwissen Einfach $this->html_output_array in die obengenante PHP einfüllen die im CheckoutExtender gespeichert ist??
das raus: PHP: $this->v_output_buffer['google_analytics'] = $google_analytics; und das rein: PHP: $this->html_output_array['google_analytics'] = $google_analytics;return $this->html_output_array;
Also bei mir klappts hervorragend! Echt wunderbar, das steigert die Möglichkeiten für Google-Analytics gleich ums 1000fache.
Na da bin ich morgen mal gespannt, ob ich es richtig gemacht habe... Hab den Ordner angelegt, die oben gesponsorte Datei reingeschmissen, Shopname und UA geändert. Dann noch am Ende das von Steffen genannte raus und rein kopiert. Die "checkout_success-USERMOD.html" habe ich jetzt gar nicht weiter beachtet.
Ich verstehe das nicht. Habe es im Shop eines Freundes eingebaut unter 2.1.3.2. Die Werte werden im Checkout auch wunderbar angezeigt. Leider tut Google so als würde da nichts stehen.
Also irgendwie zeigt es im Google Analytics Konto nix an. Der Shopname ist doch der Property... (Shopname und UA im u.g. Code geändert) PHP: <?php /* * ######################################################################################################### * Project: Gaka2014 * ######################################################################################################### * * IndivStyleGoogleAnalytics.inc.php * * 09.09.2014 www.indiv-style.de * * Copyright by H&S eCom * @author little Pit(S.B.) * * ######################################################################################################### */ class IndivStyleGoogleAnalytics extends IndivStyleGoogleAnalytics_parent { function proceed() { parent::proceed(); $coo_order = MainFactory::create_object('order', array($this->v_data_array['orders_id'])); $orders_total_query = xtc_db_query("select * from " . TABLE_ORDERS_TOTAL . " where orders_id = '" . (int) $this->v_data_array['orders_id'] . "'"); $orders_products_query = xtc_db_query("select * from " . TABLE_ORDERS_PRODUCTS . " where orders_id = '" . (int) $this->v_data_array['orders_id'] . "'"); $i = 0; while ($product = xtc_db_fetch_array($orders_products_query)) { $orders_products[$i] = $product; $catname = xtc_db_fetch_array(xtc_db_query( "SELECT c.categories_name FROM categories_description c, products_to_categories p WHERE p.products_id = '".$orders_products[$i]['products_id']."' AND p.categories_id != '0' AND p.categories_id = c.categories_id ")); $orders_products[$i]['categories'] = $catname['categories_name']; $i++; } while ($product = xtc_db_fetch_array($orders_total_query)) { $orders_total[$product['class']] = $product['value']; } $trans = array( 'id' => $this->v_data_array['orders_id'], 'affiliation' => 'Shopname', 'revenue' => $orders_total['ot_total'], 'shipping' => $orders_total['ot_shipping'], 'tax' => $orders_total['ot_tax']); $i = 0; foreach ($orders_products as $value) { $items[$i] = array( 'sku' => $value['products_model'], 'name' => $value['products_name'], 'category' => $value['categories'], 'price' => $value['products_price'], 'quantity' => $value['products_quantity'] ); $i++; } function getTransactionJs(&$trans) { $mytotal = "ga('ecommerce:addTransaction', { 'id': '{$trans['id']}', 'affiliation': '{$trans['affiliation']}', 'revenue': '{$trans['revenue']}', 'shipping': '{$trans['shipping']}', 'tax': '{$trans['tax']}' }); "; return $mytotal; } function getItemJs(&$transId, &$item) { $myitem = "ga('ecommerce:addItem', { 'id': '$transId', 'name': '{$item['name']}', 'sku': '{$item['sku']}', 'category': '{$item['category']}', 'price': '{$item['price']}', 'quantity': '{$item['quantity']}' }); "; return $myitem; } $google_analytics = "<script type=\"text/javascript\"> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-12345678-9', 'auto'); ga('send', 'pageview'); ga('require', 'ecommerce'); "; $google_analytics .= getTransactionJs($trans); foreach ($items as &$item) { $google_analytics .= getItemJs($trans['id'], $item); } $google_analytics .= " ga('ecommerce:send'); </script>"; $this->html_output_array['google_analytics'] = $google_analytics; return $this->html_output_array; //Änderung Ende } } Eigentlich kann man auch bei Google nichts falsch machen, Konto und Proberty anlegen, dann müsste doch etwas zu sehen sein in Berichte?
Wir haben das gleiche Problem. Die Werte sind beim Checkout enthalten. Bei Google kommt das aber nicht an. Die alte Version funktionierte mit 2.0 tadellos.
Hier ebenfalls das gleiche Problem. Alles so eingebunden - Code wird angezeigt, aber Google scheint blind zu werden :-( Hier kommt es sogar zu dem Fall, dass wenn der Ordner und Datei abgelegt wurden ein "Direct Access to this location is not allowed." im ganzen Shop erscheint :-(
Ich kann die o.g. Probleme nur soweit eingrenzen, das es möglich ist, das die Konten bei Google noch nicht umgestellt sind! Wir haben das in mehr als 15 Shops drin und es funktioniert tadellos.
Nein, daran liegt es nicht. Das haben wir überprüft und auch vom Google-Support checken lassen. Leider können die auch nicht sagen woran es liegt. Es gibt ja keine Fehlermeldungen oder irgendwelche Logs. Das ist ja der Krampf.
Ok, dann weis ich auch nicht woran das liegt. Die Code ist nach google-Vorgaben erstellt und liefert Daten. Zumindestens bei uns.
Oh mann... Ich hab nun sogar die Datei aus dem Beitrag http://www.gambio-forum.de/threads/17167-Google-Analytics-in-Gambio-einbauen?highlight=index.php mit der Datei unter user_classes/overloads/CheckoutSuccessExtenderComponent/ eingebunden und ich sehe den Code / das Script im Head - Quelltext - trotzdem sagt Google weiter, dass das Tracking nicht eingebaut ist. Da kann man ja verzweifeln. Noch irgendwelche Ideen? Ich schreib ansonsten erstmal Google an. :-/ Gibt's denn noch eine Idee zu Steffens Code, wo ich "Direct Access to this location is not allowed." bekomme? VG und besten Dank!
Hab eben noch mal nen Test mit ner nackten V2.1.3.3 gemacht! Eingebaut und schwupp...... Daten kommen an!