*/ 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) { return " ga('create', '{$this->jsQuoteEscape($accountId)}', 'auto'); " . $this->_getAnonymizationCode() . " ga('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')"; 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() ); 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[] = "ga('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']);"; } /** * Is ga available * * @return bool */ protected function _isAvailable() { return Mage::helper('googleanalytics')->isGoogleAnalyticsAvailable(); } /** * Render GA tracking scripts * * @return string */ protected function _toHtml() { if (!$this->_isAvailable()) { return ''; } return parent::_toHtml(); } }