Skip to content

Instantly share code, notes, and snippets.

@giuseppemorelli
Last active July 30, 2020 11:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save giuseppemorelli/1cbec2a84e980eda6cf3 to your computer and use it in GitHub Desktop.
Save giuseppemorelli/1cbec2a84e980eda6cf3 to your computer and use it in GitHub Desktop.
Override of Mage_GoogleAnalytics_Block_Ga for two tracking code at the same time. Create a custom variable on magento backend called 'google_analytics_code_two' to insert the second code
<?php
/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@magento.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magento.com for more information.
*
* @category Mage
* @package Mage_GoogleAnalytics
* @copyright Copyright (c) 2006-2014 X.commerce, Inc. (http://www.magento.com)
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
*/
/**
* GoogleAnalitics Page Block
*
* @category Mage
* @package Mage_GoogleAnalytics
* @author Magento Core Team <core@magentocommerce.com>
*/
class Mage_GoogleAnalytics_Block_Ga extends Mage_Core_Block_Template
{
/**
* @deprecated after 1.4.1.1
* @see self::_getOrdersTrackingCode()
* @return string
*/
public function getQuoteOrdersHtml()
{
return '';
}
/**
* @deprecated after 1.4.1.1
* self::_getOrdersTrackingCode()
* @return string
*/
public function getOrderHtml()
{
return '';
}
/**
* @deprecated after 1.4.1.1
* @see _toHtml()
* @return string
*/
public function getAccount()
{
return '';
}
/**
* Get a specific page name (may be customized via layout)
*
* @return string|null
*/
public function getPageName()
{
return $this->_getData('page_name');
}
/**
* Render regular page tracking javascript code
* The custom "page name" may be set from layout or somewhere else. It must start from slash.
*
* @param string $accountId
* @return string
*/
protected function _getPageTrackingCode($accountId)
{
if ($this->helper('googleanalytics')->isUseUniversalAnalytics()) {
return $this->_getPageTrackingCodeUniversal($accountId);
} else {
return $this->_getPageTrackingCodeAnalytics($accountId);
}
}
/**
* Render regular page tracking javascript code
* The custom "page name" may be set from layout or somewhere else. It must start from slash.
*
* @param string $accountId
* @return string
*/
protected function _getPageTrackingCodeUniversal($accountId)
{
$_code = Mage::getModel('core/variable')
->loadByCode('google_analytics_code_two')
->getValue('text');
return "
ga('create', '{$this->jsQuoteEscape($accountId)}', 'auto' );
ga('create', '{$_code}', 'auto', {'name': 'newTracker'});
" . $this->_getAnonymizationCode() . "
ga('send', 'pageview');
ga('newTracker.send', 'pageview');
";
}
/**
* Render regular page tracking javascript code
* The custom "page name" may be set from layout or somewhere else. It must start from slash.
*
* @link http://code.google.com/apis/analytics/docs/gaJS/gaJSApiBasicConfiguration.html#_gat.GA_Tracker_._trackPageview
* @link http://code.google.com/apis/analytics/docs/gaJS/gaJSApi_gaq.html
* @param string $accountId
* @return string
*/
protected function _getPageTrackingCodeAnalytics($accountId)
{
$pageName = trim($this->getPageName());
$optPageURL = '';
if ($pageName && preg_match('/^\/.*/i', $pageName)) {
$optPageURL = ", '{$this->jsQuoteEscape($pageName)}'";
}
return "
_gaq.push(['_setAccount', '{$this->jsQuoteEscape($accountId)}']);
" . $this->_getAnonymizationCode() . "
_gaq.push(['_trackPageview'{$optPageURL}]);
";
}
/**
* Render information about specified orders and their items
*
* @return string
*/
protected function _getOrdersTrackingCode()
{
if ($this->helper('googleanalytics')->isUseUniversalAnalytics()) {
return $this->_getOrdersTrackingCodeUniversal();
} else {
return $this->_getOrdersTrackingCodeAnalytics();
}
}
/**
* Render information about specified orders and their items
*
* @return string
*/
protected function _getOrdersTrackingCodeUniversal()
{
$orderIds = $this->getOrderIds();
if (empty($orderIds) || !is_array($orderIds)) {
return;
}
$collection = Mage::getResourceModel('sales/order_collection')
->addFieldToFilter('entity_id', array('in' => $orderIds));
$result = array();
$result[] = "ga('require', 'ecommerce')";
$result[] = "ga('newTracker.require', 'ecommerce')";
foreach ($collection as $order) {
$result[] = sprintf("ga('ecommerce:addTransaction', {
'id': '%s',
'affiliation': '%s',
'revenue': '%s',
'tax': '%s',
'shipping': '%s'
});",
$order->getIncrementId(),
$this->jsQuoteEscape(Mage::app()->getStore()->getFrontendName()),
$order->getBaseGrandTotal(),
$order->getBaseTaxAmount(),
$order->getBaseShippingAmount()
);
$result[] = sprintf("ga('newTracker.ecommerce:addTransaction', {
'id': '%s',
'affiliation': '%s',
'revenue': '%s',
'tax': '%s',
'shipping': '%s'
});",
$order->getIncrementId(),
$this->jsQuoteEscape(Mage::app()->getStore()->getFrontendName()),
$order->getBaseGrandTotal(),
$order->getBaseTaxAmount(),
$order->getBaseShippingAmount()
);
foreach ($order->getAllVisibleItems() as $item) {
$result[] = sprintf("ga('ecommerce:addItem', {
'id': '%s',
'sku': '%s',
'name': '%s',
'category': '%s',
'price': '%s',
'quantity': '%s'
});",
$order->getIncrementId(),
$this->jsQuoteEscape($item->getSku()),
$this->jsQuoteEscape($item->getName()),
null, // there is no "category" defined for the order item
$item->getBasePrice(),
$item->getQtyOrdered()
);
$result[] = sprintf("ga('newTracker.ecommerce:addItem', {
'id': '%s',
'sku': '%s',
'name': '%s',
'category': '%s',
'price': '%s',
'quantity': '%s'
});",
$order->getIncrementId(),
$this->jsQuoteEscape($item->getSku()),
$this->jsQuoteEscape($item->getName()),
null, // there is no "category" defined for the order item
$item->getBasePrice(),
$item->getQtyOrdered()
);
}
$result[] = "ga('ecommerce:send');";
$result[] = "ga('newTracker.ecommerce:send');";
}
return implode("\n", $result);
}
/**
* Render information about specified orders and their items
*
* @link http://code.google.com/apis/analytics/docs/gaJS/gaJSApiEcommerce.html#_gat.GA_Tracker_._addTrans
* @return string
*/
protected function _getOrdersTrackingCodeAnalytics()
{
$orderIds = $this->getOrderIds();
if (empty($orderIds) || !is_array($orderIds)) {
return;
}
$collection = Mage::getResourceModel('sales/order_collection')
->addFieldToFilter('entity_id', array('in' => $orderIds));
$result = array();
foreach ($collection as $order) {
if ($order->getIsVirtual()) {
$address = $order->getBillingAddress();
} else {
$address = $order->getShippingAddress();
}
$result[] = sprintf("_gaq.push(['_addTrans', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s']);",
$order->getIncrementId(),
$this->jsQuoteEscape(Mage::app()->getStore()->getFrontendName()),
$order->getBaseGrandTotal(),
$order->getBaseTaxAmount(),
$order->getBaseShippingAmount(),
$this->jsQuoteEscape(Mage::helper('core')->escapeHtml($address->getCity())),
$this->jsQuoteEscape(Mage::helper('core')->escapeHtml($address->getRegion())),
$this->jsQuoteEscape(Mage::helper('core')->escapeHtml($address->getCountry()))
);
foreach ($order->getAllVisibleItems() as $item) {
$result[] = sprintf("_gaq.push(['_addItem', '%s', '%s', '%s', '%s', '%s', '%s']);",
$order->getIncrementId(),
$this->jsQuoteEscape($item->getSku()), $this->jsQuoteEscape($item->getName()),
null, // there is no "category" defined for the order item
$item->getBasePrice(), $item->getQtyOrdered()
);
}
$result[] = "_gaq.push(['_trackTrans']);";
}
return implode("\n", $result);
}
/**
* Render IP anonymization code for page tracking javascript code
*
* @return string
*/
protected function _getAnonymizationCode()
{
if (!Mage::helper('googleanalytics')->isIpAnonymizationEnabled()) {
return '';
}
if ($this->helper('googleanalytics')->isUseUniversalAnalytics()) {
return $this->_getAnonymizationCodeUniversal();
} else {
return $this->_getAnonymizationCodeAnalytics();
}
}
/**
* Render IP anonymization code for page tracking javascript universal analytics code
*
* @return string
*/
protected function _getAnonymizationCodeUniversal()
{
return "ga('set', 'anonymizeIp', true);";
}
/**
* Render IP anonymization code for page tracking javascript google analytics code
*
* @return string
*/
protected function _getAnonymizationCodeAnalytics()
{
return "_gaq.push (['_gat._anonymizeIp']);";
}
/**
* Render GA tracking scripts
*
* @return string
*/
protected function _toHtml()
{
if (!Mage::helper('googleanalytics')->isGoogleAnalyticsAvailable()) {
return '';
}
return parent::_toHtml();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment