Results 1 to 10 of 32

Threaded View

  1. #28
    Join Date
    Jan 2015
    Posts
    726
    Plugin Contributions
    1

    Default Re: Google Dynamic Remarketing Mod

    zencart 1.5.8
    php 8.1

    I made some adjustments on this script to work with the updated analytics. The script is working great. The only question I have is there a way to ignore ez-pages. Does anyone have an idea on how to ignore the e-zpages or url's with the ids

    Code:
    <?php
    // Google Remarketing
    // Dynamic Remarketing tracking code
    // For Zen-Cart 1.5
    // Author: Stef van Dijk - vandijkstef.nl
    
    // This module is delivered as is, without any warranty
    // Feel free to use and edit this module
    // Licensed: GPL - http://www.gnu.org/licenses/licenses.html#GPL
    
    // NOTE: This script only handles products identified by ID or by model-number.
    // It does NOT differentiate products by attribute, nor by other properties such as custom fields like SKU, etc.
    
    // Google conversion ID -- Replace AW-xxxxxxxxxx with your own ID received from Google:
    $ga_conversion_id = 'AW-xxxxxxxxxx';
    
    $product_identifier = 'id'; // can be 'id' or 'model', for the store's product_id or product_model_number respectively
    
    // Pages to ignore
    $pages_to_ignore = array(
        'account', 'account_edit', 'account_history', 'account_history_info', 'account_newsletters',
        'account_notifications', 'account_password', 'address_book', 'address_book_process',
        'advanced_search', 'ask_a_question', 'checkout_confirmation', 'checkout_payment',
        'checkout_payment_address', 'checkout_process', 'checkout_shipping', 'checkout_shipping_address',
        'cookie_usage', 'create_account', 'create_account_success', 'customers_authorization',
        'discount_coupon', 'down_for_maintenance', 'download', 'download_time_out', 'gv_redeem',
        'gv_send', 'info_shopping_cart', 'login', 'logoff', 'page_2', 'page_3', 'page_4',
        'page_not_found', 'password_forgotten', 'payer_auth_auth', 'payer_auth_frame',
        'payer_auth_verifier', 'popup_attributes_qty_prices', 'popup_coupon_help', 'popup_cvv_help',
        'popup_image', 'popup_image_additional', 'popup_search_help', 'popup_shipping_estimator',
        'product_reviews_write', 'redirect', 'shippinginfo', 'ssl_check', 'time_out', 'unsubscribe','search', 'checkout_one','checkout_one_confirmation','site_map','contact_us',
    	  
    );
    
    // Check if the current page is in the ignore list
    if (in_array($current_page_base, $pages_to_ignore)) {
        return;
    }
    
    // DO NOT CHANGE BELOW
    if (empty($ga_conversion_id) || $ga_conversion_id === '123456789') {
        return;
    }
    
    // Product IDs array
    $ecomm_prodid = array();
    $ecomm_totalvalue = 0;
    $ecomm_pagetype = 'other';
    
    // If on a product page, get the product id
    if ($current_page_base === 'product_info') {
        if (!empty($_GET['products_id'])) {
            $product_id = (int)$_GET['products_id'];
            $ecomm_prodid[] = (string)$product_id;
            
            // Get product price
            $product_price_html = zen_get_products_display_price($product_id);
            
            // Use regex to extract the price
            if (preg_match('/<span[^>]*class="[^"]*productSpecialPrice[^"]*"[^>]*>\$([\d,]+\.\d{2})<\/span>/', $product_price_html, $matches)) {
                $ecomm_totalvalue = (float)str_replace(',', '', $matches[1]);
            } elseif (preg_match('/<span[^>]*class="[^"]*normalprice[^"]*"[^>]*>\$([\d,]+\.\d{2})<\/span>/', $product_price_html, $matches)) {
                $ecomm_totalvalue = (float)str_replace(',', '', $matches[1]);
            }
        }
    }
    
    // If on the shopping cart page, add the cart's items to the array
    if ($current_page_base === 'shopping_cart') {
        $cart_products = $_SESSION['cart']->get_products();
        foreach ($cart_products as $product) {
            if ($product_identifier === 'id') {
                $ecomm_prodid[] = (string)(int)$product['id'];
            } elseif ($product_identifier === 'model') {
                $ecomm_prodid[] = (string)$product['model'];
            }
        }
        $ecomm_totalvalue = $_SESSION['cart']->show_total();
    }
    
    // If this is checkout_success, set the products and total value from order
    if ($current_page_base === 'checkout_success') {
        // Retrieve the order ID from the session or the URL
        $order_id = isset($_SESSION['order_number_created']) ? (int)$_SESSION['order_number_created'] : (isset($_GET['order_id']) ? (int)$_GET['order_id'] : 0);
        
        if ($order_id > 0) {
            // Retrieve the products and total value from the order
            $order = $db->Execute("SELECT products_id, products_model, final_price, products_quantity FROM " . TABLE_ORDERS_PRODUCTS . " WHERE orders_id = " . $order_id);
            while (!$order->EOF) {
                if ($product_identifier === 'id') {
                    $ecomm_prodid[] = (string)(int)$order->fields['products_id'];
                } elseif ($product_identifier === 'model') {
                    $ecomm_prodid[] = (string)$order->fields['products_model'];
                }
                $ecomm_totalvalue += (float)$order->fields['final_price'] * (int)$order->fields['products_quantity'];
                $order->MoveNext();
            }
        }
    }
    
    
    // Get product IDs from listing or search result pages
    if (empty($ecomm_prodid) && !empty($listing_sql)) {
        $products = $db->Execute($listing_sql);
        while (!$products->EOF) {
            if ($product_identifier === 'id') {
                $ecomm_prodid[] = (string)(int)$products->fields['products_id'];
            } elseif ($product_identifier === 'model' && !empty($products->fields['products_model'])) {
                $ecomm_prodid[] = (string)$products->fields['products_model'];
            }
            $products->MoveNext();
        }
    }
    
    // Map pages to page types
    $page_map = array(
        'search_result' => 'searchresults',
        'index' => 'category',
        'product_info' => 'product',
        'shopping_cart' => 'cart',
        'checkout_success' => 'purchase',
    );
    
    if ($this_is_home_page) {
        $ecomm_pagetype = 'home';
    } elseif (array_key_exists($current_page_base, $page_map)) {
        $ecomm_pagetype = $page_map[$current_page_base];
    }
    
    // Prepare tag parameters
    $tag_params = array(
        'ecomm_prodid' => $ecomm_prodid,
        'ecomm_pagetype' => (string)$ecomm_pagetype,
        'ecomm_totalvalue' => !empty($ecomm_totalvalue) ? round((float)$ecomm_totalvalue, 2) : 0,
    );
    
    ?>
    <script async src="https://www.googletagmanager.com/gtag/js?id=<?php echo htmlspecialchars($ga_conversion_id, ENT_QUOTES, 'UTF-8'); ?>"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', '<?php echo htmlspecialchars($ga_conversion_id, ENT_QUOTES, 'UTF-8'); ?>');
      
      // Remarketing tag setup
      gtag('event', 'purchase', <?php echo json_encode($tag_params, JSON_NUMERIC_CHECK); ?>);
    </script>
    Last edited by chadlly2003; 19 Jun 2024 at 08:21 PM.

 

 

Similar Threads

  1. v150 Support Thread for Google reCAPTCHA plugin
    By David Allen in forum All Other Contributions/Addons
    Replies: 693
    Last Post: 26 Jun 2026, 10:08 PM
  2. Dynamic Filter [Support Thread]
    By davowave in forum Addon Sideboxes
    Replies: 808
    Last Post: 19 May 2025, 08:37 PM
  3. v150 Google Merchant Center Feeder for ZC v1.5.x [Support Thread]
    By DivaVocals in forum Addon Admin Tools
    Replies: 504
    Last Post: 19 Nov 2024, 03:50 PM
  4. Welcome, Google Searcher [Support Thread]
    By swguy in forum All Other Contributions/Addons
    Replies: 24
    Last Post: 8 Jan 2017, 04:47 PM
  5. Google Base Feeder Support Thread [OLD]
    By numinix in forum All Other Contributions/Addons
    Replies: 3562
    Last Post: 2 Apr 2012, 06:30 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
disjunctive-egg