Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: billiger.de Tracking Tool Hilfe

    fiwamedia

    • Frisch an Board
    • Beiträge: 51
    • Geschlecht:
    billiger.de Tracking Tool Hilfe
    am: 05. April 2018, 09:25:10
    Hallo liebe Gemeinde,

    wir nutzen in unserem Shop das Partnerprogramm billiger.de und wollen nun wissen, wie die Umsätze über billiger.de sind.
    Uns wird ein Tracking Code angeboten bei dem wir einen sogenannten Tracking Pixel welchen ich auf der Checkout Seite einsetzen muss.

    Dieser Pixel Code ist so aufgebaut.

    Code: XML  [Auswählen]
    <img src="https://billiger.de/sale?shop_id=SHOP-ID&oid=ORDER-ID&aid_1=ARTICLE-ID-1&name_1=ARTICLE-NAME-1&cnt_1=ARTICLE-COUNT-1&val_1=ARTICLE-VALUE-1" width="1" height="1" border="0" alt="" />

    Hier sollen die folgenden Platzhalter mit denen aus der Shop DB ersetzt werden.

    SHOP-ID              -->  billiger.de Shop ID
    ORDER-ID             -->  Auftrags- oder Bestellnummer
    ARTICLE-ID-1       -->  Artikelnummer
    ARTICLE-NAME-1   -->  Artikelname
    ARTICLE-COUNT-1 -->  Anzahl
    ARTICLE-VALUE-1  -->  Nettopreis

    Den Code den ich mir dann zusammensetze sieht folgendermaßen aus:

    Code: XML  [Auswählen]
    <img src="https://billiger.de/sale?shop_id=12345&oid=orders_id&aid_1=products_id&name_1=products_name&cnt_1=products_quantity&val_1=products_price" width="1" height="1" border="0" alt="" />

    Billiger.de meint das es aber nicht passt. Wisst Ihr wo der Fehler liegen könnte?

    Vielen Dank schon mal

    [EDIT Tomcraft 05.04.2018: Code formatiert.]

    Linkback: https://www.modified-shop.org/forum/index.php?topic=38803.0
    Shop Hosting

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Re: billiger.de Tracking Tool Hilfe
    Antwort #1 am: 05. April 2018, 10:15:28
    Du musst auch schon die korrekten vorhanden Variablen nutzen. Desweiteren musst du auch den Trackingcode dahingehend erweitern, dass wenn mehr als ein Artikel gekauft wird auch die Anzahl der Platz halter hochgezählt wird.

    fiwamedia

    • Frisch an Board
    • Beiträge: 51
    • Geschlecht:
    Re: billiger.de Tracking Tool Hilfe
    Antwort #2 am: 05. April 2018, 11:23:29
    Sind dies nicht die richtigen Shop Variablen?

    ORDER-ID             -->  orders_id
    ARTICLE-ID-1       -->  products_id
    ARTICLE-NAME-1   -->  products_name
    ARTICLE-COUNT-1 -->  products_quantity
    ARTICLE-VALUE-1  -->  products_price

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Re: billiger.de Tracking Tool Hilfe
    Antwort #3 am: 05. April 2018, 11:33:05
    Nein, weil diese Variablen leer wären.

    Orientiere dich doch an der includes/external/smarty/plugins/function.googleanalytics.php.

    fiwamedia

    • Frisch an Board
    • Beiträge: 51
    • Geschlecht:
    Re: billiger.de Tracking Tool Hilfe
    Antwort #4 am: 05. April 2018, 12:01:51
    Hm, ich hab mir die Datei angesehen aber stehe auf dem Schlauch.

    Die einzigen Variablen die ich dort raus lese und passen würden, wären:
    op.products_id,
    op.orders_products_id,
    op.products_model,
    op.products_name,
    op.products_price,
    op.products_quantity

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Re: billiger.de Tracking Tool Hilfe
    Antwort #5 am: 05. April 2018, 12:06:17
    Du hast das Prinzip noch nicht ganz verstanden, du musst dir per mySQL oder aus dem $order Objekt die passenden Daten zusammensuchen und dann verarbeiten.

    fiwamedia

    • Frisch an Board
    • Beiträge: 51
    • Geschlecht:
    Re: billiger.de Tracking Tool Hilfe
    Antwort #6 am: 05. April 2018, 14:20:31
    Ja da hast Du leider Recht, deswegen hab ich ja hier im Forum das Problem geschildert.

    Da mir billiger.de nur diesen einen Code zu Verfügung stellt aus dem die dann die Daten für die Analyse auslesen.

    Trotzdem vielen Dank für die Hilfe, auch wenn sie mir leider nicht weiter helfen.

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: billiger.de Tracking Tool Hilfe
    Antwort #7 am: 05. April 2018, 14:36:06
    Wenn ich richtig rate, willst Du das Tracking Pixel von billiger.de in einen Shop einbauen der bereits von Piwik getrackt wird. Wenn meine Annahme stimmt, würde ich dir empfehlen den Code für das Tracking Pixel von billiger.de in diese Smarty Funktion -> 'includes/external/smarty/plugins/function.piwik.php' zu integrieren. Damit ersparst Du dir einiges an Arbeit.

    Gruss
    Hanspeter

    fiwamedia

    • Frisch an Board
    • Beiträge: 51
    • Geschlecht:
    Re: billiger.de Tracking Tool Hilfe
    Antwort #8 am: 05. April 2018, 14:46:38
    Hallo Hanspeter,

    vielen Dank für den Tipp. Ja es stimmt das PIWIK bzw. Matomo verwendet wird.

    Jetzt weiß ich aber nicht ob der pixel den ich gepostet hatte nun der richtige ist, weil Modulfux meinte das die Variablen leer wären.

    Code: XML  [Auswählen]
    <img src="https://billiger.de/sale?shop_id=12345&oid=orders_id&aid_1=products_id&name_1=products_name&cnt_1=products_quantity&val_1=products_price" width="1" height="1" border="0" alt="" />

    Dann die Frage, wo soll der Pixel in der funktion.piwik.php integriert werden?

    Gruß Maik

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: billiger.de Tracking Tool Hilfe
    Antwort #9 am: 05. April 2018, 14:58:11
    Ja, natürlich hat Modulfux recht, den Code den Du gepostet hast muss man natürlich erst noch mit den richtigen Variablen befüllen, mein Vorschlag ist auch nur dafür gedacht Redundanz zu vermeiden und soll dir die Arbeit erleichtern.

    Kennst Du dich in PHP aus und geht es um diesen Shop hier?

    Gruss
    Hanspeter

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: billiger.de Tracking Tool Hilfe
    Antwort #10 am: 06. April 2018, 02:18:00
    Hallo Maik,

    ersetze den gesamten Code der 'includes\external\smarty\plugins\function.piwik.php' mit folgendem Code

    Code: PHP  [Auswählen]
    <?php
    /* -----------------------------------------------------------------------------------------
       $Id: function.piwik.php 9905 2016-05-31 10:27:36Z GTB $

       modified eCommerce Shopsoftware
       http://www.modified-shop.org

       Copyright (c) 2009 - 2013 [www.modified-shop.org]
       -----------------------------------------------------------------------------------------
       based on:
       (c) 2011 WEB-Shop Software (function.piwik.php 1871) http://www.webs.de/

       Add the Piwik tracking code (and the possibility to track the order details as well)

       Usage: Put one of the following tags into the templates\yourtemplate\index.html at the bottom
       {piwik url=piwik.example.com id=1} or
       {piwik url=piwik.example.com id=1 goal=1}
       where "id=1" is the domain-ID you want to track (see your Piwik configuration for details)

       Asynchronous Piwik tracking is possible from Piwik version 1.1 and higher
       -----------------------------------------------------------------------------------------
       Third Party contribution:
       extended version to track
       - viewed products
       - categories
       - abandoned shopping carts
       - placed orders
       noRiddle 05-2013

       Released under the GNU General Public License
       ---------------------------------------------------------------------------------------*/


    require_once (DIR_FS_INC.'get_order_total.inc.php');
    require_once (DIR_FS_INC.'xtc_get_prid.inc.php');
    require_once (DIR_FS_INC.'xtc_get_products_name.inc.php');
    require_once (DIR_FS_INC.'xtc_get_product_path.inc.php');

    function smarty_function_piwik($params, &$smarty) {
      global $PHP_SELF, $piwik_language_id;
     
      $url = isset($params['url']) ? $params['url'] : false;
      $id = isset($params['id']) ? (int)$params['id'] : false;
      $goal = isset($params['goal']) ? (int)$params['goal'] : false;

      if (!$url || !$id) {
        return false;
      }

      include_once (DIR_WS_CLASSES.'language.php');
      $piwik_lang = new language(xtc_input_validation(DEFAULT_LANGUAGE, 'char', ''));
      $piwik_language_id = $piwik_lang->language['id'];

      $url = str_replace(array('http://', 'https://'), '', $url);
      $url = trim($url, '/');

      $beginCode = '
        <script type="text/javascript">
          var _paq = _paq || [];
          (function(){
            var u="//'
    .$url.'/";
            _paq.push([\'setSiteId\', '
    .$id.']);
            _paq.push([\'setTrackerUrl\', u+\'piwik.php\']);
      '
    ."\n";

      $endCode = '
            _paq.push([\'trackPageView\']);
            _paq.push([\'enableLinkTracking\']);

            var d=document,
            g=d.createElement(\'script\'),
            s=d.getElementsByTagName(\'script\')[0];
            g.type=\'text/javascript\';
            g.defer=true;
            g.async=true;
            g.src=u+\'piwik.js\';
            s.parentNode.insertBefore(g,s);
          })();
        </script>
        <noscript><p><img src="//'
    .$url.'/piwik.php?idsite='.$id.'&rec=1" style="border:0" alt="" /></p></noscript>
      '
    ;

      $orderCode = null;
      if ((basename($PHP_SELF) == FILENAME_DEFAULT) && (isset($_GET['cPath'])) && ($_GET['cPath'] != '')) {
        $orderCode .= getCategoryName();
      }
      if ((strpos($PHP_SELF, FILENAME_PRODUCT_INFO) != false) && (isset($_GET['products_id'])) && ($_GET['products_id'] != '')) {
        $orderCode .= getProductsName();
      }
      if (strpos($PHP_SELF, FILENAME_SHOPPING_CART) != false) {
        $orderCode .= getShoppingCartContents();
      }
      if ((strpos($PHP_SELF, FILENAME_CHECKOUT_SUCCESS) != false) && isset($_SESSION['customer_id'])) {
        $orderCode .= getOrders();
      }
      if ((strpos($PHP_SELF, FILENAME_CHECKOUT_SUCCESS) !== false) && ($goal > 0)) {
        $orderCode .= getOrderDetailsPiwik($goal);
      }
      return $beginCode . $orderCode . $endCode . $GLOBALS['billiger_de_tracking_pixel'];
    }


    /*** Functions ***/

    /* get category name */
    function getCategoryName() {
      global $piwik_language_id;

      $cPath_array = explode('_', $_GET['cPath']);
     
      $categories_id = array_pop($cPath_array);
      $categories_name = get_categories_name($categories_id, $piwik_language_id);

      return "        "."_paq.push(['setEcommerceView', productSku = false, productName = false, category = '".encode_htmlspecialchars($categories_name)."']);\n";
    }

    /* get products name */
    function getProductsName() {
      global $piwik_language_id;

      $products_id = xtc_get_prid($_GET['products_id']);
      $products_name = xtc_get_products_name($products_id, $piwik_language_id);

      $cPath = xtc_get_product_path($products_id);
      $cPath_array = explode('_', $cPath);
     
      $categories_id = array_pop($cPath_array);
      $categories_name = get_categories_name($categories_id, $piwik_language_id);
     
      return "        "."_paq.push(['setEcommerceView', '".$products_id."', '".encode_htmlspecialchars($products_name)."', '".encode_htmlspecialchars($categories_name)."']);\n";
    }

    /* get shopping cart contents */
    function getShoppingCartContents() {
      global $piwik_language_id;
     
      $products = $_SESSION['cart']->get_products();
      if ($_SESSION['cart']->count_contents() > 0) {
        $return_string = '';
        for ($i=0, $n=sizeof($products); $i<$n; $i++) {
          $cPath = xtc_get_product_path($products[$i]['id']);
          $cPath_array = explode('_', $cPath);
         
          $categories_id = array_pop($cPath_array);
          $categories_name = get_categories_name($categories_id, $piwik_language_id);

          $return_string .= "        "."_paq.push(['addEcommerceItem', '".(int)$products[$i]['id']."', '".encode_htmlspecialchars($products[$i]['name'])."', '".encode_htmlspecialchars($categories_name)."', '".format_price($products[$i]['final_price'])."', '". (int)$products[$i]['quantity']."']);\n";
        }
        $return_string .= "        "."_paq.push(['trackEcommerceCartUpdate', '".format_price($_SESSION['cart']->show_total())."']);\n";
      }
     
      return $return_string;
    }

    /* get orders */
    function getOrders () {
      global $piwik_language_id;
     
      $orders_query = xtc_db_query("SELECT orders_id
                                      FROM "
    . TABLE_ORDERS . "
                                     WHERE customers_id = '"
    . (int)$_SESSION['customer_id'] . "'
                                  ORDER BY date_purchased DESC
                                     LIMIT 1"

                                  );
      if (xtc_db_num_rows($orders_query) == 1) {
        $order = xtc_db_fetch_array($orders_query);
        $total = array();
        $return_string = '';
        $order_total_query = xtc_db_query("SELECT value,
                                                  class
                                             FROM "
    . TABLE_ORDERS_TOTAL . "
                                            WHERE orders_id = '"
    . (int)$order['orders_id'] . "'"
                                         );
        while ($order_total = xtc_db_fetch_array($order_total_query)) {
          $total[$order_total['class']] = $order_total['value'];
        }
        $order_products_query = xtc_db_query("SELECT op.products_id,
                                                     pd.products_name,
                                                     op.final_price,
                                                     op.products_price,
                                                     op.products_tax,
                                                     op.allow_tax,
                                                     op.products_quantity
                                                FROM "
    . TABLE_ORDERS_PRODUCTS . " op
                                                JOIN "
    . TABLE_PRODUCTS_DESCRIPTION . " pd
                                                     ON op.products_id = pd.products_id
                                                        AND pd.language_id = '"
    .$piwik_language_id."'
                                               WHERE op.orders_id = '"
    . (int)$order['orders_id'] . "'"
                                            );
        $p_counter = 1;
       
        // Zur Integration benötigen Sie immer Ihre billiger.de Shop ID. Diese können Sie im Partner-Bereich (https://partner.billiger.de/) einsehen.
        // Nachfolgend XXXXXXX durch Shop ID ersetzen.
        $billiger_de_tracking_pixel_shop_id = 'XXXXXXX';
                                         
        $GLOBALS['billiger_de_tracking_pixel'] = '<img src="//billiger.de/sale?shop_id=' . $billiger_de_tracking_pixel_shop_id . '&oid=' . (int)$order['orders_id'];                                    
        while ($order_products = xtc_db_fetch_array($order_products_query)) {
          $cPath = xtc_get_product_path($order_products['products_id']);
          $cPath_array = explode('_', $cPath);
         
          $categories_id = array_pop($cPath_array);
          $categories_name = get_categories_name($categories_id, $piwik_language_id);

          $return_string .= "        "."_paq.push(['addEcommerceItem', '".(int)$order_products['products_id']."', '".encode_htmlspecialchars($order_products['products_name'])."', '".encode_htmlspecialchars($categories_name)."', '".format_price($order_products['final_price'])."', '".(int)$order_products['products_quantity']."']);\n";

          $GLOBALS['billiger_de_tracking_pixel'] .= '&aid_' . $p_counter . '=' . (int)$order_products['products_id'] . '&name_' . $p_counter . '=' . encode_htmlspecialchars($order_products['products_name']) . '&cnt_' . $p_counter . '=' . (int)$order_products['products_quantity'] . '&val_' . $p_counter . '=' . ($order_products['allow_tax'] == 1 ? format_price($order_products['products_price'] / ((100 + $order_products['products_tax']) / 100)) : format_price($order_products['products_price']));

          $p_counter++;
        }
        $return_string .= "        "."_paq.push(['trackEcommerceOrder', '".(int)$order['orders_id']."', '".(isset($total['ot_total']) ? format_price($total['ot_total']) : 0)."', '".(isset($total['ot_subtotal']) ? format_price($total['ot_subtotal']) : 0)."', '".(isset($total['ot_tax']) ? format_price($total['ot_tax']) : 0)."', '".(isset($total['ot_shipping']) ? format_price($total['ot_shipping']) : 0)."', '".(isset($total['ot_payment']) ? format_price($total['ot_payment']) : 0)."']);\n";

        $GLOBALS['billiger_de_tracking_pixel'] .= '" width="1" height="1" border="0" alt="" />';
      }
      return $return_string;
    }

    /**
     * Get the order details
     *
     * @global <type> $last_order
     * @param mixed $goal
     * @return string Code for the eCommerce tracking
     */

    function getOrderDetailsPiwik($goal) {
      global $last_order; // from checkout_success.php

      $total = get_order_total($last_order);

      return "        "."_paq.push(['trackGoal', '" . $goal . "', '" . $total . "' ]);\n";
    }

    /* format price */
    function format_price($price) {      
      return number_format($price, 2, '.', '');
    }

    /* get categories_name */
    function get_categories_name($categories_id, $language_id) {

      $category_query = xtc_db_query("SELECT categories_name
                                        FROM "
    . TABLE_CATEGORIES_DESCRIPTION . "
                                       WHERE categories_id = '"
    .(int)$categories_id."'
                                         AND language_id = '"
    .(int)$language_id."'");
      $category = xtc_db_fetch_array($category_query);
     
      return $category['categories_name'];
    }
    ?>
     

    und ab ca. Zeile 191 im obigen Code musst Du die Shop ID von billiger.de eintragen.

    Code: PHP  [Auswählen]
        // Zur Integration benötigen Sie immer Ihre billiger.de Shop ID. Diese können Sie im Partner-Bereich (https://partner.billiger.de/) einsehen.
        // Nachfolgend XXXXXXX durch Shop ID ersetzen.
        $billiger_de_tracking_pixel_shop_id = 'XXXXXXX';
     

    Gruss
    Hanspeter

    fiwamedia

    • Frisch an Board
    • Beiträge: 51
    • Geschlecht:
    Re: billiger.de Tracking Tool Hilfe
    Antwort #11 am: 06. April 2018, 09:53:29
    Hallo Hanspeter,

    ich danke Dir recht herzlich, werd es gleich auf den Server laden und bei billiger.de melden. Sobald es funktioniert, gebe ich Dir Bescheid.

    Gruß Maik  :thx:

    fiwamedia

    • Frisch an Board
    • Beiträge: 51
    • Geschlecht:
    Re: billiger.de Tracking Tool Hilfe
    Antwort #12 am: 06. April 2018, 11:11:45
    Hallo Hanspeter,

    folgende Antwort kam von billiger.de

    der Pixel ist zwar eingebunden und wird aufgerufen, jedoch werden die Parameter nicht korrekt übergeben:

    shop_id=18226&oid=orders_id&aid_1=products_id&name_1=products_name&cnt_1=products_quantity&val_1=products_price

    Das dick Markierte stellt die Variablen dar, die durch die tatsächlichen Werte aus Ihrem Shop ersetzt werden müssen. Also anstelle von orders_id sollte Ihre Bestellnummer, anstelle products_id die Artikelnummer, anstelle products_name der Artikelname, usw. stehen. Hier werden jedoch nur die Platzhalter angezeigt.


    Gruß Maik

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: billiger.de Tracking Tool Hilfe
    Antwort #13 am: 06. April 2018, 11:56:04
    Hallo Maik,

    also wenn ich in meinem Testshop -> https://hpzeller.com/modified2022/ mit dem PHP-Code aus meiner Antwort #10 eine Bestellung mache, dann sieht es Im Quelltext der Browserausgabe am Ende der Bestelung (4. Fetig /checkout_success.php) an der Stelle an der das Tracking-Pixel enthalten ist wie folgt aus.

    Quelltextausgabesequenz mit Piwik und Tracking-Pixel-Bild für billiger.de
    Code: XML  [Auswählen]
          var _paq = _paq || [];
          (function(){
            var u="//(( Wir dulden keine kommerziellen Werbelinks - Bitte <a href="index.php?topic=3013.0">Forenregeln</a> beachten! ))/piwik/";
            _paq.push(['setSiteId', 9]);
            _paq.push(['setTrackerUrl', u+'piwik.php']);
     
            _paq.push(['addEcommerceItem', '2', 'Testprodukt2', 'Testkategorie 2', '149.97', '3']);
            _paq.push(['addEcommerceItem', '4', 'Testprodukt4', 'Testkategorie 2', '33.95', '1']);
            _paq.push(['trackEcommerceOrder', '35', '214.64', '183.92', '34.27', '38.08', '-7.36']);
            _paq.push(['trackGoal', '1', '214.6400' ]);

            _paq.push(['trackPageView']);
            _paq.push(['enableLinkTracking']);

            var d=document,
            g=d.createElement('script'),
            s=d.getElementsByTagName('script')[0];
            g.type='text/javascript';
            g.defer=true;
            g.async=true;
            g.src=u+'piwik.js';
            s.parentNode.insertBefore(g,s);
          })();
        </script><noscript><p><img src="//(( Wir dulden keine kommerziellen Werbelinks - Bitte <a href="index.php?topic=3013.0">Forenregeln</a> beachten! ))/piwik/piwik.php?idsite=9&amp;rec=1" style="border:0" alt="" /></p></noscript><img src="//billiger.de/sale?shop_id=XXXXXXX&amp;oid=35&amp;aid_1=2&amp;name_1=Testprodukt2&amp;cnt_1=3&amp;val_1=42.01&amp;aid_2=4&amp;name_2=Testprodukt4&amp;cnt_2=1&amp;val_2=28.53" width="1" height="1" border="0" alt="" />
     

    Im obigen Code ist klar zu sehen, das also nicht Platzhalter sondern die entsprechenden Werte ausgegeben werden.

    Für den Einbau des Codes habe ich mich an dieses PDF -> https://company.billiger.de/wAssets/docs/landingpages/technische-Einbindung/Integrationsleitfaden_Sales-Tracking_V1.4.pdf gehalten.

    PS:
    Wenn Du eine Testbestellung mit einem Admin Account machst, musst Du sicherstellen, dass im Admin unter  Erw. Konfiguration -> Google, Piwik & Facebook -> Seitenaufrufe des Shopbetreibers mitzählen auf [Ja] gesetzt ist, ansonsten wird kein Piwikcode gesendet und somit auch kein Tracking-Pixel.

    Gruss
    Hanspeter

    fiwamedia

    • Frisch an Board
    • Beiträge: 51
    • Geschlecht:
    Re: billiger.de Tracking Tool Hilfe
    Antwort #14 am: 10. April 2018, 08:12:47
    Hallo Hanspeter,

    ich habe es bei billiger.de noch mal angemerkt das es funktioniert und nun kam die Bestätigung :)

    Ich danke Dir noch einmal recht herzlich für die ausführliche Hilfe.

    Gruß Maik
    6 Antworten
    4804 Aufrufe
    14. April 2015, 13:08:08 von fishnet
    3 Antworten
    3703 Aufrufe
    08. März 2010, 17:19:15 von Phantom
    8 Antworten
    5674 Aufrufe
    06. November 2013, 13:11:13 von Buggyboy
    4 Antworten
    11727 Aufrufe
    04. Januar 2011, 16:15:14 von h-h-h
               
    anything