Custom variables on product details page in Magento

谁都会走 提交于 2019-12-11 04:37:13

问题


UPDATE: Hopefully this is a better explanation of the problem:

I'm trying to pass on the product SKU on my product details page to Google Analytics using _setCustomVar. I'm running on Magento 1.4.0.1 and my Analytics async code is inserted by the default GA module in the <head> section and it looks like this:

<script type="text/javascript">

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-xxxxxxxx-1']);
_gaq.push(['_trackPageview']);

(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

</script>

The custom variable I'm trying to add has this syntax:

_gaq.push(['_setCustomVar',1,'View Product','<?php echo $_helper->productAttribute($_product, $_product->getSku(), 'sku') ?>',3]);

According to the Analytic documentation, in order for the custom variable to be recorded, the _setCustomVar must be called BEFORE the _trackPageView, but there's no support for this in the default GoogleAnalytics module. There are 2 issues to this problem:

  1. How can I add my _setCustomVar function BEFORE the default tracking code?
  2. How can I add my _setCustomVar function ONLY on product pages?

Original post:

I'm trying to store the SKU of the product being viewed by a visitor in a Analytics Custom Variable. The syntax for this is _gaq.push(['_setCustomVar',3,'View Product','SKU12345',2]);.

Obviously this snippet of code should be added only to the product detail pages, and not to the list, cart, or checkout pages. So I've tried editing the view.phtml file in app/design/frontend/default/my_package/template/catalog/product by adding the following piece of code:

<script>
_gaq.push(['_setCustomVar',
    1,
    'View Product',
    '<?php echo $_helper->productAttribute($_product, $_product->getSku(), 'sku') ?>', 
    3]);
</script>

The problem is that the I'm adding this custom variable AFTER the basic tracking code, which is added by default in the <head> section, so it doesn't get recorded in Analytics.

I tried to avoid altering the core files with the Analytics module in app/code/core/Mage/GoogleAnalytics/Block/Ga.php, but I think the solution may lay there. How can I add the piece of code that sets the custom variable so that it appears within the basic tracking code BEFORE _gaq.push(['_trackPageview']);?

This is my async code provided by Analytics:

<script type="text/javascript">

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-xxxxxxxx-1']);
_gaq.push(['_trackPageview']);

(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

</script>

Idea from here

Note: I'm using Magento 1.4.0.1 and the Analytics Asynchronous Syntax


回答1:


This is currently working on one of our magento site, If you are using the Magento Admin Google API then you could either (1) create a custom module to extend it or (2) make sure (when viewing source) the <script>_gaq.push(['_setCustomVar... javascript is below var _gaq = _gaq || []; code block

<script type="text/javascript">
  //<![CDATA[
    var _gaq = _gaq || [];

    _gaq.push(['_setAccount', 'UA-xxxxxxx-3']);
    _gaq.push(['_trackPageview']);
    _gaq.push(['_setCustomVar', '1', 'awe2', '<?php echo $_helper->productAttribute($_product, $_product->getSku(), 'sku') ?>', '1']);

    (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();

 //]]>
</script>

To Create a custom module

in app/code/local/MageIgniter/GoogleAnalytics/etc/config.xml

  <config>
    <modules>
        <MageIgniter_GoogleAnalytics>
            <version>0.1.0</version>
        </MageIgniter_GoogleAnalytics>
    </modules>
    <global>
        <blocks>
            <googleanalytics>
                <rewrite>
                    <ga>MageIgniter_GoogleAnalytics_Block_Ga</ga>
                </rewrite>
            </googleanalytics>
        </blocks>
    </global>
  </config>

Create in /app/code/local/MageIgniter/GoogleAnalytics/Block/Ga.php

    class MageIgniter_GoogleAnalytics_Block_Ga extends Mage_GoogleAnalytics_Block_Ga
    {

        private $remId = NULL;
        private $conversionId = NULL;
        private $conversionLabel = NULL;


        public function getPageName()
        {
            return $this->_getData('page_name');
        }


        protected function _getPageTrackingCode($accountId)
        {
            $pageName   = trim($this->getPageName());
            $optPageURL = '';
            if ($pageName && preg_match('/^\/.*/i', $pageName)) {
                $optPageURL = ", '{$this->jsQuoteEscape($pageName)}'";
            }
            return "
    _gaq.push(['_setAccount', '{$this->jsQuoteEscape($accountId)}']);
    _gaq.push(['_trackPageview'{$optPageURL}]);
    " . $this->getProductSku();
        }

      ......

        public function getProductSku(){
            if($product = Mage::registry('current_product')){
               return sprintf("_gaq.push(['_setCustomVar', '%s', '%s', '%s', '%s']);",
                    1,
                    'Sku',
                    $product->getSku(),
                    1
                ) . "\n";
            }

            return '';
        }

     ........
 }

see /app/code/core/Mage/GoogleAnalytics/Block/Ga.php for more help




回答2:


I've managed to make it work by modifying the default GoogleAnalytics module:

In app/code/core/Mage/GoogleAnalytics/Block copy the Ga.php file, then navigate to /www/app/code/local/Mage/GoogleAnalytics/Block and paste it (create the necessary folders if they don't exist).

in the new Ga.php, in the _toHtml() function after testing if Analytics is activated from the Magento backend, test if the current page is a product details page:

$_product = Mage::registry('current_product');  
if($_product) {
        //output code with _setCustom var
    } else {
        //output normal tracking code
    }

The code with the custom variable set looks like this:

$this->addText('
<!-- BEGIN GOOGLE ANALYTICS CODE -->
<script type=\"text/javascript\">
var _gaq = _gaq || [];
_gaq.push([\'_setAccount\', \'UA-25272379-1\']);
_gaq.push([\'_setCustomVar\', 1, \'Product View\',\''.$_product->getSku().'\', 3]);
_gaq.push([\'_trackPageview\']);

(function() {
    var ga = document.createElement(\'script\'); ga.type = \'text/javascript\'; ga.async = true;
    ga.src = (\'https:\' == document.location.protocol ? \'https://ssl\' : \'http://www\') + \'.google-analytics.com/ga.js\';
    var s = document.getElementsByTagName(\'script\')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<!-- END GOOGLE ANALYTICS CODE -->
');



回答3:


If you use the asynchrnous insert code of Google analytics, no matter where you place this code, it will only be applied when page is finished loading. So you can add your _gaq.push() after of before as long as they're inline in the HTML code (not asynchronous)

The asynchronous code looks like :

(function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
})();


来源:https://stackoverflow.com/questions/13118321/custom-variables-on-product-details-page-in-magento

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!