Moin,
ich habe mir mithilfe dieser Vorlage hier eine dataLayer-Erweiterung für Conversion-Tracking im Bestellabschluss gebastelt: https://www.phpweb.info/joomla…ansaction-google-analytic
Der Shop nutzt das VP One Page Checkout Modul, meine Erweiterung überschreibt die orderdone.php des Plug-ins. Der Code sieht folgenderweise aus:
PHP
- <?php
- /**
- *---------------------------------------------------------------------------------------
- * @package VP One Page Checkout - Joomla! System Plugin
- * @subpackage For VirtueMart 3+
- *---------------------------------------------------------------------------------------
- * @copyright Copyright (C) 2012-2018 VirtuePlanet Services LLP. All rights reserved.
- * @license GNU General Public License version 2 or later; see LICENSE.txt
- * @authors Abhishek Das
- * @email info@virtueplanet.com
- * @link https://www.virtueplanet.com
- *---------------------------------------------------------------------------------------
- * $Revision: 27 $
- * $LastChangedDate: 2018-10-08 11:59:01 +0530 (Mon, 08 Oct 2018) $
- * $Id: orderdone.php 27 2018-10-08 06:29:01Z Abhshek Das $
- * --------------------------------------------------------------------------------------
- */
- defined('_JEXEC') or die;
- echo '<div class="vm-wrap vm-order-done">';
- if($this->display_title)
- {
- echo '<h3>' . vmText::_('COM_VIRTUEMART_CART_ORDERDONE_THANK_YOU') . '</h3>';
- }
- // Everything here is displayed by payment method plugin.
- // It is exactly same as standard VirtueMart order done layout. We just need to print it as it is.
- echo $this->html;
- if($this->display_loginform && !JFactory::getUser()->guest && class_exists('shopFunctionsF'))
- {
- echo shopFunctionsF::getLoginForm();
- }
- echo '</div>';
- /***** Virtuemart dataLayer for tracking purposes ends here ********/
- // GET ORDER DETAILS
- require_once(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'orders.php');
- $order = VirtueMartModelOrders::getOrder($this->cart->virtuemart_order_id);
- $order_id = $order['details']['BT']->order_number;
- // START DATALAYER WITH TRANSACTION DETAILS
- $q = "SELECT order_status, order_number, order_total, order_tax, order_shipping FROM #__{vm}_orders WHERE ";
- $q .= "#__{vm}_orders.user_id= " . $auth["user_id"] . " ";
- $q .= "AND #__{vm}_orders.order_id= $order_id ";
- $db->query($q);
- if ($db->next_record()) {
- $order_status = $db->f("order_status");
- $order_number = $db->f("order_number");
- $order_total = $db->f("order_total");
- $order_tax = $db->f("order_tax");
- $order_shipping = $db->f("order_shipping");
- if($order_status == PAYPAL_VERIFIED_STATUS || $order_status == PAYPAL_PENDING_STATUS) {
- $myTagString = "
- <script>
- window.dataLayer = window.dataLayer || [];
- dataLayer.push({
- 'event': 'purchase',
- 'transactionId': '$order_number',
- 'transactionTotal': $order_total,
- 'transactionProducts': [";
- // CHECK FOR ORDERED ITEMS AND ADD TO DATALAYER
- $q2 = "SELECT * FROM #__{vm}_order_item WHERE #__{vm}_order_item.order_id= $order_id";
- $db->query($q2);
- while ($db->next_record()) {
- $item_sku = $db->f("order_item_sku");
- $item_name = $db->f("order_item_name");
- $item_price = $db->f("product_final_price");
- $item_quantity = $db->f("product_quantity");
- $myTagString .= "
- {
- 'sku': '$order_item_sku',
- 'name': '$order_item_name',
- 'price': $product_final_price,
- 'quantity': $product_quantity
- },";
- }
- $myTagString = substr($myTagString, 0, -1);
- $myTagString .= "
- ]
- });
- </script>
- ";
- echo $myTagString;
- /***** Virtuemart dataLayer for tracking purposes ends here ********/
Sollte das funktionieren? Was mich stutzig macht, ist folgende Zeile, die auch aus der Vorlage stammt:
Bei weiteren Zahlungsarten müsste es auch weitere Status geben, oder nicht?
Ich bin kein PHP- und JS-Crack, von daher würde ich mich über eure Hilfe freuen.
Schöne Grüße