Hallo, ich hänge da gerade auch bei dem Thema den Google Tag-Manager über den head-Bereich einzubinden. Das man Google auch über das Gambio Modul mit Analytics und Ads verbinden kann, nutzt mir nichts, ich brauch das im head. ich habe dazu folgende Anleitung verwendet: (Link nur für registrierte Nutzer sichtbar.) Wie beschriebene habe ich die SampleHeaderExtender geladen, geändert, umbenannt und in die system/overloads/HeaderExtenderComponent hochgeladen. Die sah dann so aus: Code: <?php /* -------------------------------------------------------------- GoogleAnalyticsTracking.inc.php Gambio GmbH http://www.gambio.de Copyright (c) 2016 Gambio GmbH Released under the GNU General Public License (Version 2) [http://www.gnu.org/licenses/gpl-2.0.html] -------------------------------------------------------------- */ class GoogleAnalyticsTracking extends GoogleAnalyticsTracking_parent // Name muss mit Dateiname ubereinstimmen { function proceed() { parent::proceed(); $this->v_output_buffer['google_analytics'] = <<<EOB <!-- Google Tag Manager --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-XXXX');</script> <!-- End Google Tag Manager --> EOB; } } Leider führt das im Frontend nach dem Löschen der Caches zu der fehlermeldung: Code: GoogleAnalyticsTracking, because the name is already in use" Information: <br /> <b>Fatal error</b>: Cannot declare class GoogleAnalyticsTracking, because the name is already in use in <b>/var/www/vhosts/webxx.www36.hostkraft.de/html/gx2/system/overloads/HeaderExtenderComponent/GoogleAnalyticsTracking.inc.php</b> on line <b>0</b><br /> Irgendwas zwickt da, und ich bekomme es nicht raus, was. Wer kann mir da helfen?
Der Name ist besetzt, du müsstest einen anderen nehmen. Aber wozu das Ganze? Der GoogleTagManager ist im Head.
Kann ich den einfach einen anderen Namen wählen, oder muss dann noch mehr in anderen dateien angepasst werden? @Wilken Der jetzige googleTagManager im head ist ja das Modul von euch und das reicht nicht um alles abbilden zu können, deswegen benötige ich den "herkömmlichen" GTM im head, der Hauseigene von Gambio wird dann deaktiviert. Wie kann ich den nun den herkömmlichen GTM einbauen, das da nichts zwickt?
Hier die Details zu den zwei Problemen die uns aktuell im Wege stehen - weitergeleitet von unserem Analysten: ------------ Mein Name ist Florian Schoel, ich bin der "Tracker"/Analyst im Team von little-eyelet.de. 2 brennende Themen bei little-eyelet.de 1. Produkt-Detail-Ansichten werden vom Analytics Enhanced-Ecommerce Plugin nicht übermittelt 2. Fehlende Möglichkeit "Google Optimize" mit im Plugin zu aktivieren. --> Lass uns die Sache von hinten aufrollen (also 2. vor 1.) Zu 2.: Fehlende Möglichkeit "Google Optimize" im Analytics Plugin zu aktivieren. Es gibt aktuell im Plugin keine Möglichkeit das Google Optimize-Plugin zu aktivieren. Keine der anderen Varianten das Optimize Plugin zu laden (z.B über Google Tagmanager, etc.) funktioniert wenn man das E-Commerce Plugin in Gambio im Einsatz hat. (Technische-Details hierzu siehe etwas weiter unten - deutlich versehen mit der Warnung "Nerd-Area") Kurz gefasst: Euer E-Commerce Plugin liefert die "gtag" Variante von Google Analytics aus. Der entsprechende "Call" für gtag um Google Optimize (zum Split-Testing) zu aktivieren sieht dementsprechend so aus: gtag('config', 'GA_TRACKING_ID', { 'optimize_id': 'OPT_CONTAINER_ID'}); --> Leider fehlt im Plugin die Möglichkeit die Optimize Container-ID einzugeben. Es wäre super, wenn Ihr das einfach zur Verfügung stellen könntet. (Das ist sicher die Hoffnung und der größte Wunsch aller Gambio-Nutzer die ernsthaft an Conversion-Optimierung Interesse haben, und Google Optimize zum A/B Testing einsetzen möchten.) (Vorsicht: Nerd-Area: Technische Details im Folgenden) Eine Frage Eurerseits könnte jetzt sein: "Warum nicht einfach Google Optimize über den Google Tagmanager (GTM) aktivieren?" 1. Weil die offizielle Google Empfehlung (aus verschiedenen - unter anderem Performance-Gründen) die ist, bei der Verwendung von gtag den Call (siehe oben) zu verwenden anstatt auf den Google Tagmanager zurück zu greifen. 2. Weil in der speziellen Situation in Kombination mit Eurem Plugin ohnehin die Möglichkeit den GTM zu nutzen komplett wegfällt. Warum? Weil die Aktivierung von Google Optimize im GTM voraussetzt, dass der GTM auch einen "Pageview" Event auslöst, mit dem der Optimize-Code dann angefordert wird. --> Da ist der Haken: Ich kann diesen Pageview Event nich auslösen, weil das Euer Plugin bereits macht. Ansonsten würde jeder Seitenaufruf doppelt getrackt werden. Hier die offizielle Doku von Google (falls Euch das interessiert): (Link nur für registrierte Nutzer sichtbar.) ------------- Jetzt zum zweiten Anliegen: ............ Zu 1.: Fehlende Produktdetail-Ansichten im Enhanced-Ecommerce Report "Add to Carts" und "Käufe" werden ja getrackt (inklusive Umsatz) (Wunderbar). Aber: Die Produkt-Detail-Ansichten werden allerdings nicht erfasst (siehe screenshots unten). Das gleiche Dashboard haben wir in anderen Shop-Systemen (shopify, shopware, woocommerce, etc.) im Einsatz und dort laufen die Zahlen einwandfrei. Am Dashboard/Darstellung kann es also nicht liegen. Denn die Zahlen kommen auch erst garnicht in dem Analytics Konto an (screenshot noch weiter unten) Villeicht erkennst du direkt auf der Produktseite ein Problem? (Link nur für registrierte Nutzer sichtbar.) Hier meine Fragen: Zu 1.: Was muss geändert werden? Wo liegt das Problem? Zu 2.: Wie realistisch ist die Hoffnung, dass eine Möglichkeit die Google Optimize ID im Analytics PLugin mit zu aktiveren tatsächlich hinzugefügt werden kann? Und wie bereit ist das Gambio Team generell auf solche Hinweise/wünsche zu reagieren? (wir hatten schon ähnliche Anforderungen an Plugin-Hersteller bei Woocommerce und Shopware gestellt und waren angenehm überrascht über die Bereitschaft und Reaktionszeit zur Umsetzung solcher Hinweise ) --------------------- ... (so. hier wieder Uwe ) PS: Der Umweg über den Head hat das Problem nicht gelöst. Alles nach wie vor so wie von Florian oben beschrieben.
Zudem folgender Hinweis von Florian Schoel: ---------- Habe den Download des Plugins gerade erzwungen... Der Versuch das Plugin von Google zu laden wurde direkt von der Seite abgelehnt: Siehe screenshot. PS: Das ändert nichts an der Tatsache, dass wir ohne die zusätzliche Eingabemöglichkeit der Optimize ID im Analytics Plugin aktuell auf Google Optimize verzichten müssen. --> Nur ein kleiner Hinweis der dann zum Tragen kommen würde wenn diese Eingabemöglichkeit in Zukunft hinzugefügt würde.
Irgendwie gehts nicht weiter, das Supportticket #100818436 bleibt unbeantwortet, könnte sich vieleicht jemand von Gambio dem annehmen? Danke
Ich hab mir das gerade mal überflogen, das liegt zur Entscheidungsfindung herum. Es wird aber tendenziell keine kurzfristige Lösung geben: Google Optimize unterstützen wir schlicht nicht, das war nie im Plan, und die wenn dann passende Entwicklermannschaft hat gerade einen vollen Projektplan. Da ist aktuell superwenig Luft um mal eben adhoc irgendwelche Features abseits der Marschrichtung dazu zu programmieren.
Das wäre zumindest eine Möglichkeit, ich hab nur gerade keinen adhoc Überblick wie die Warteschlange da aktuell aussieht.
2) CheckoutSuccess-Seite mit Analytics-eCommerceTracking ergänzen, damit alle Verkäufe getrackt werden: Ordner GXUserComponents/overloads/CheckoutSuccessExtenderComponent anlegen darin Datei GAeCommerceTracking.inc.php erstellen mit folgendem Inhalt: PHP: <?phpclass GAeCommerceTracking extends GAeCommerceTracking_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\">"; $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 }} Das ist praktisch "Dein" Codevorschlag, aber ohne die hier eigentlich nicht ganz korrekte Integration des allgemeinen Analytics-Codes. Wichtig ist ja auch, dass ga('require', 'ecommerce'); VOR ga('ecommerce:send'); im Code steht, und das wäre mit der Lösung, den allgemeinen Code über das Admin-Panel zu integrieren, nicht der Fall (da wird der allg. Analytics-Code ganz unten vor dem schließenden BODY eingebaut. Schönen Gruß Christian[/QUOTE] Ist das denn auch 2021 noch aktuell? Falls nicht, wie müsste ich den Code abändern? LG Manuel