Universal Tracking Conversations Code

Thema wurde von Steffen (indiv-style.de), 10. September 2014 erstellt.

  1. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    #1 Steffen (indiv-style.de), 10. September 2014
    Zuletzt bearbeitet: 10. September 2014
    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.... :)
     

    Anhänge:

  2. Berardi Studmedshop

    Berardi Studmedshop Erfahrener Benutzer

    Registriert seit:
    15. März 2013
    Beiträge:
    91
    Danke erhalten:
    8
    Danke vergeben:
    30
    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.
     
  3. Anonymous

    Anonymous Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.760
    Danke erhalten:
    1.748
    Danke vergeben:
    137
    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.
     
  4. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Dann ist das ja ein echtes "Plugin"!!!!! Geil..... Sowas find ich sehr gut!!! :) :) :)
     
  5. Berardi Studmedshop

    Berardi Studmedshop Erfahrener Benutzer

    Registriert seit:
    15. März 2013
    Beiträge:
    91
    Danke erhalten:
    8
    Danke vergeben:
    30
    #5 Berardi Studmedshop, 17. Oktober 2014
    Zuletzt bearbeitet: 17. Oktober 2014
    Wie mach ich das genau? Also Schritt für Schritt für diejenigen ohne Fachwissen :eek:

    Einfach $this->html_output_array in die obengenante PHP einfüllen die im CheckoutExtender gespeichert ist??
     
  6. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    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;
     
  7. Berardi Studmedshop

    Berardi Studmedshop Erfahrener Benutzer

    Registriert seit:
    15. März 2013
    Beiträge:
    91
    Danke erhalten:
    8
    Danke vergeben:
    30
    Und dann kann ich die checkout_success-USERMOD.html wieder löschen?
     
  8. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    So sollte es sein..... ;)
     
  9. Berardi Studmedshop

    Berardi Studmedshop Erfahrener Benutzer

    Registriert seit:
    15. März 2013
    Beiträge:
    91
    Danke erhalten:
    8
    Danke vergeben:
    30
    Also bei mir klappts hervorragend! Echt wunderbar, das steigert die Möglichkeiten für Google-Analytics gleich ums 1000fache.
     
  10. Yabonet

    Yabonet Erfahrener Benutzer

    Registriert seit:
    30. Mai 2011
    Beiträge:
    97
    Danke erhalten:
    0
    Danke vergeben:
    50
    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.
     
  11. Christian Mueller

    Christian Mueller Beta-Held

    Registriert seit:
    4. Juli 2011
    Beiträge:
    3.768
    Danke erhalten:
    934
    Danke vergeben:
    302
    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.
     
  12. Yabonet

    Yabonet Erfahrener Benutzer

    Registriert seit:
    30. Mai 2011
    Beiträge:
    97
    Danke erhalten:
    0
    Danke vergeben:
    50
    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?
     
  13. Christian  Schlingemann

    Christian Schlingemann Neues Mitglied

    Registriert seit:
    25. Januar 2012
    Beiträge:
    3
    Danke erhalten:
    0
    Danke vergeben:
    1
    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.
     
  14. Shaggy

    Shaggy Mitglied

    Registriert seit:
    19. Oktober 2014
    Beiträge:
    9
    Danke erhalten:
    0
    Danke vergeben:
    2
    #14 Shaggy, 22. November 2014
    Zuletzt bearbeitet: 22. November 2014
    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 :-(
     
  15. Christian Mueller

    Christian Mueller Beta-Held

    Registriert seit:
    4. Juli 2011
    Beiträge:
    3.768
    Danke erhalten:
    934
    Danke vergeben:
    302
    Ich hab den alten Code wieder eingebaut. Der funktioniert auch in 2.1.
     
  16. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    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.
     
  17. Christian Mueller

    Christian Mueller Beta-Held

    Registriert seit:
    4. Juli 2011
    Beiträge:
    3.768
    Danke erhalten:
    934
    Danke vergeben:
    302
    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.
     
  18. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Ok, dann weis ich auch nicht woran das liegt. Die Code ist nach google-Vorgaben erstellt und liefert Daten. Zumindestens bei uns.
     
  19. Shaggy

    Shaggy Mitglied

    Registriert seit:
    19. Oktober 2014
    Beiträge:
    9
    Danke erhalten:
    0
    Danke vergeben:
    2
    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!
     
  20. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Hab eben noch mal nen Test mit ner nackten V2.1.3.3 gemacht! Eingebaut und schwupp...... Daten kommen an!