From 4c9cd6ba39e044b0ce4b8256f45bc1b9854304e0 Mon Sep 17 00:00:00 2001 From: Scott Moore Date: Wed, 19 Apr 2023 11:02:09 -0400 Subject: [PATCH 01/15] Begin work on GA4 enhanced eCommerce --- .../core/Mage/GoogleAnalytics/Helper/Data.php | 15 ++++++++++++++- app/code/core/Mage/GoogleAnalytics/etc/system.xml | 9 +++++++++ app/locale/en_US/Mage_GoogleAnalytics.csv | 1 + 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/app/code/core/Mage/GoogleAnalytics/Helper/Data.php b/app/code/core/Mage/GoogleAnalytics/Helper/Data.php index 7cb92cf7528..684c7130575 100644 --- a/app/code/core/Mage/GoogleAnalytics/Helper/Data.php +++ b/app/code/core/Mage/GoogleAnalytics/Helper/Data.php @@ -28,8 +28,10 @@ class Mage_GoogleAnalytics_Helper_Data extends Mage_Core_Helper_Abstract public const XML_PATH_TYPE = 'google/analytics/type'; public const XML_PATH_ACCOUNT = 'google/analytics/account'; public const XML_PATH_ANONYMIZATION = 'google/analytics/anonymization'; + public const XML_PATH_ECOMM = 'google/analytics/enhanced_ecommerce'; - /** + + /** * @var string google analytics 4 */ public const TYPE_ANALYTICS4 = 'analytics4'; @@ -104,4 +106,15 @@ public function isUseAnalytics4($store = null) { return Mage::getStoreConfig(self::XML_PATH_TYPE, $store) == self::TYPE_ANALYTICS4; } + + /** + * Whether GA Enhanced eCommerce data should be submitted + * + * @param null|string|bool|int|Mage_Core_Model_Store $store $store + * @return bool + */ + public function isEnhancedECommEnabled($store = null) + { + return Mage::getStoreConfigFlag(self::XML_PATH_ECOMM, $store); + } } diff --git a/app/code/core/Mage/GoogleAnalytics/etc/system.xml b/app/code/core/Mage/GoogleAnalytics/etc/system.xml index 64120809aa6..951d50cae66 100644 --- a/app/code/core/Mage/GoogleAnalytics/etc/system.xml +++ b/app/code/core/Mage/GoogleAnalytics/etc/system.xml @@ -66,6 +66,15 @@ 1 1 + + + select + adminhtml/system_config_source_yesno + 30 + 1 + 1 + 1 + diff --git a/app/locale/en_US/Mage_GoogleAnalytics.csv b/app/locale/en_US/Mage_GoogleAnalytics.csv index 1b90846f791..d608f1bef4c 100644 --- a/app/locale/en_US/Mage_GoogleAnalytics.csv +++ b/app/locale/en_US/Mage_GoogleAnalytics.csv @@ -6,3 +6,4 @@ "Type","Type" "Universal Analytics","Universal Analytics" "Google Analytics 4","Google Analytics 4" +"Enable Enhanced eCommerce","Enable Enhanced eCommerce" From 0bf7c2740a9a1db5b713e29766b213c58270cd1e Mon Sep 17 00:00:00 2001 From: Scott Moore Date: Wed, 19 Apr 2023 14:41:37 -0400 Subject: [PATCH 02/15] send eComm data on product page view, category page view, add to cart, remove from cart, cart view, and begin_checkout. --- .../core/Mage/GoogleAnalytics/Block/Ga.php | 147 ++++++++++++++++++ .../core/Mage/GoogleAnalytics/Helper/Data.php | 2 +- .../Mage/GoogleAnalytics/Model/Observer.php | 27 ++++ .../core/Mage/GoogleAnalytics/etc/config.xml | 16 ++ .../default/template/googleanalytics/ga.phtml | 1 + 5 files changed, 192 insertions(+), 1 deletion(-) diff --git a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php index 26141d8299f..5b291c62057 100644 --- a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php +++ b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php @@ -280,6 +280,153 @@ protected function _getOrdersTrackingCodeAnalytics() return implode("\n", $result); } + /** + * Render Enhanced eCommerce for GA4 + * @return string + * @throws Mage_Core_Model_Store_Exception + */ + protected function _getEnhancedECommCodeAnalytics4() + { + $helper = $this->helper('googleanalytics'); + if(!$helper->isEnhancedECommEnabled()) + return ''; + + $result = []; + + //product page + if($this->getRequest()->getModuleName()=='catalog' && $this->getRequest()->getControllerName()=='product'){ + $productViewed = Mage::registry('current_product'); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = number_format($productViewed->getFinalPrice(), 2); + $eventData['items'] = []; + $eventData['items'][] = [ + 'id' => $productViewed->getSku(), + 'name' => $productViewed->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $productViewed->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($productViewed->getFinalPrice(), 2), + ]; + + $result[] = "gtag('event', 'view_item', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + } + + //category page + elseif($this->getRequest()->getModuleName()=='catalog' && $this->getRequest()->getControllerName()=='category'){ + $layer = Mage::getSingleton('catalog/layer'); + $category = $layer->getCurrentCategory(); + $productCollection = $layer->getProductCollection(); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = 0.00; + $eventData['item_list_id'] = 'category_'.$category->getUrlKey(); + $eventData['item_list_name'] = $category->getName(); + $eventData['items'] = []; + + foreach($productCollection as $productViewed){ + $eventData['items'][] = [ + 'id' => $productViewed->getSku(), + 'name' => $productViewed->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $productViewed->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($productViewed->getFinalPrice(), 2), + ]; + $eventData['value'] += number_format($productViewed->getFinalPrice(), 2); + } + $result[] = "gtag('event', 'view_item_list', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + } + + //cart + elseif($this->getRequest()->getModuleName()=='checkout' && $this->getRequest()->getControllerName()=='cart'){ + $removedProduct = Mage::getSingleton('core/session')->getRemovedProductCart(); + if($removedProduct){ + //product removed from cart + $_removedProduct = Mage::getModel('catalog/product')->load($removedProduct); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = 0.00; + $eventData['items'] = []; + $eventData['items'][] = [ + 'id' => $_removedProduct->getSku(), + 'name' => $_removedProduct->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $_removedProduct->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($_removedProduct->getFinalPrice(), 2), + ]; + $eventData['value'] += number_format($_removedProduct->getFinalPrice(), 2); + $result[] = "gtag('event', 'remove_from_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + Mage::getSingleton('core/session')->unsRemovedProductCart(); + } + + $addedProduct = Mage::getSingleton('core/session')->getAddedProductCart(); + if($addedProduct){ + //product added to cart + $_addedProduct = Mage::getModel('catalog/product')->load($addedProduct); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = 0.00; + $eventData['items'] = []; + $eventData['items'][] = [ + 'id' => $_addedProduct->getSku(), + 'name' => $_addedProduct->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $_addedProduct->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($_addedProduct->getFinalPrice(), 2), + ]; + $eventData['value'] += number_format($_addedProduct->getFinalPrice(), 2); + $result[] = "gtag('event', 'add_to_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + Mage::getSingleton('core/session')->unsAddedProductCart(); + } + + $productCollection = Mage::getSingleton('checkout/session')->getQuote()->getAllVisibleItems(); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = 0.00; + $eventData['items'] = []; + + foreach($productCollection as $productInCart){ + $eventData['items'][] = [ + 'id' => $productInCart->getSku(), + 'name' => $productInCart->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $productInCart->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($productInCart->getFinalPrice(), 2), + ]; + $eventData['value'] += number_format($productInCart->getFinalPrice(), 2); + } + $result[] = "gtag('event', 'view_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + } + + //begin checkout + elseif($this->getRequest()->getModuleName()=='checkout' && $this->getRequest()->getControllerName()=='onepage'){ + $productCollection = Mage::getSingleton('checkout/session')->getQuote()->getAllVisibleItems(); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = 0.00; + $eventData['items'] = []; + + foreach($productCollection as $productInCart){ + $eventData['items'][] = [ + 'id' => $productInCart->getSku(), + 'name' => $productInCart->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $productInCart->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($productInCart->getFinalPrice(), 2), + ]; + $eventData['value'] += number_format($productInCart->getFinalPrice(), 2); + } + $result[] = "gtag('event', 'begin_checkout', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + } + + return implode("\n", $result); + } + /** * Render IP anonymization code for page tracking javascript code * diff --git a/app/code/core/Mage/GoogleAnalytics/Helper/Data.php b/app/code/core/Mage/GoogleAnalytics/Helper/Data.php index 684c7130575..76c418fe852 100644 --- a/app/code/core/Mage/GoogleAnalytics/Helper/Data.php +++ b/app/code/core/Mage/GoogleAnalytics/Helper/Data.php @@ -31,7 +31,7 @@ class Mage_GoogleAnalytics_Helper_Data extends Mage_Core_Helper_Abstract public const XML_PATH_ECOMM = 'google/analytics/enhanced_ecommerce'; - /** + /** * @var string google analytics 4 */ public const TYPE_ANALYTICS4 = 'analytics4'; diff --git a/app/code/core/Mage/GoogleAnalytics/Model/Observer.php b/app/code/core/Mage/GoogleAnalytics/Model/Observer.php index 341f29b21cc..c13fa386baf 100644 --- a/app/code/core/Mage/GoogleAnalytics/Model/Observer.php +++ b/app/code/core/Mage/GoogleAnalytics/Model/Observer.php @@ -49,4 +49,31 @@ public function setGoogleAnalyticsOnOrderSuccessPageView(Varien_Event_Observer $ $block->setOrderIds($orderIds); } } + + /** + * Add 'removed item' from cart into GA4 block to render on cart view + * + * @param Varien_Event_Observer $observer + */ + public function removeItemFromCartGoogleAnalytics(Varien_Event_Observer $observer) + { + $productRemoved = $observer->getEvent()->getQuoteItem()->getProduct(); + if($productRemoved){ + Mage::getSingleton('core/session')->setRemovedProductCart($productRemoved->getId()); + } + } + + /** + * Add 'added item' to cart into GA4 block to render on cart view + * + * @param Varien_Event_Observer $observer + */ + public function addItemToCartGoogleAnalytics(Varien_Event_Observer $observer) + { + $productAdded = $observer->getEvent()->getQuoteItem()->getProduct(); + if($productAdded){ + Mage::getSingleton('core/session')->setAddedProductCart($productAdded->getId()); + } + } + } diff --git a/app/code/core/Mage/GoogleAnalytics/etc/config.xml b/app/code/core/Mage/GoogleAnalytics/etc/config.xml index 5af53d94f74..8f7750a93b9 100644 --- a/app/code/core/Mage/GoogleAnalytics/etc/config.xml +++ b/app/code/core/Mage/GoogleAnalytics/etc/config.xml @@ -72,6 +72,22 @@ + + + + googleanalytics/observer + removeItemFromCartGoogleAnalytics + + + + + + + googleanalytics/observer + addItemToCartGoogleAnalytics + + + diff --git a/app/design/frontend/base/default/template/googleanalytics/ga.phtml b/app/design/frontend/base/default/template/googleanalytics/ga.phtml index 117d5d9363f..9903d69bfe8 100644 --- a/app/design/frontend/base/default/template/googleanalytics/ga.phtml +++ b/app/design/frontend/base/default/template/googleanalytics/ga.phtml @@ -26,6 +26,7 @@ $_accountId = $_helper->getAccountId(); function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', ''); + _getEnhancedECommCodeAnalytics4() ?> _getOrdersTrackingCodeAnalytics4() ?> From b596f98b0e8886e7a5725ae0a19ae876e6eadcd7 Mon Sep 17 00:00:00 2001 From: Scott Moore Date: Wed, 19 Apr 2023 15:02:50 -0400 Subject: [PATCH 03/15] fix conversion of value to string after += --- .../core/Mage/GoogleAnalytics/Block/Ga.php | 292 +++++++++--------- .../Mage/GoogleAnalytics/Model/Observer.php | 49 ++- 2 files changed, 171 insertions(+), 170 deletions(-) diff --git a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php index 5b291c62057..091d8cdd125 100644 --- a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php +++ b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php @@ -280,152 +280,154 @@ protected function _getOrdersTrackingCodeAnalytics() return implode("\n", $result); } - /** - * Render Enhanced eCommerce for GA4 - * @return string - * @throws Mage_Core_Model_Store_Exception - */ - protected function _getEnhancedECommCodeAnalytics4() - { - $helper = $this->helper('googleanalytics'); - if(!$helper->isEnhancedECommEnabled()) - return ''; - - $result = []; - - //product page - if($this->getRequest()->getModuleName()=='catalog' && $this->getRequest()->getControllerName()=='product'){ - $productViewed = Mage::registry('current_product'); - $eventData = []; - $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); - $eventData['value'] = number_format($productViewed->getFinalPrice(), 2); - $eventData['items'] = []; - $eventData['items'][] = [ - 'id' => $productViewed->getSku(), - 'name' => $productViewed->getName(), - 'list_name' => 'Product Detail Page', - 'brand' => $productViewed->getAttributeText('manufacturer'), - 'category' => 'Products', - 'price' => number_format($productViewed->getFinalPrice(), 2), - ]; - - $result[] = "gtag('event', 'view_item', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; - } - - //category page - elseif($this->getRequest()->getModuleName()=='catalog' && $this->getRequest()->getControllerName()=='category'){ - $layer = Mage::getSingleton('catalog/layer'); - $category = $layer->getCurrentCategory(); - $productCollection = $layer->getProductCollection(); - $eventData = []; - $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); - $eventData['value'] = 0.00; - $eventData['item_list_id'] = 'category_'.$category->getUrlKey(); - $eventData['item_list_name'] = $category->getName(); - $eventData['items'] = []; - - foreach($productCollection as $productViewed){ - $eventData['items'][] = [ - 'id' => $productViewed->getSku(), - 'name' => $productViewed->getName(), - 'list_name' => 'Product Detail Page', - 'brand' => $productViewed->getAttributeText('manufacturer'), - 'category' => 'Products', - 'price' => number_format($productViewed->getFinalPrice(), 2), - ]; - $eventData['value'] += number_format($productViewed->getFinalPrice(), 2); - } - $result[] = "gtag('event', 'view_item_list', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; - } - - //cart - elseif($this->getRequest()->getModuleName()=='checkout' && $this->getRequest()->getControllerName()=='cart'){ - $removedProduct = Mage::getSingleton('core/session')->getRemovedProductCart(); - if($removedProduct){ - //product removed from cart - $_removedProduct = Mage::getModel('catalog/product')->load($removedProduct); - $eventData = []; - $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); - $eventData['value'] = 0.00; - $eventData['items'] = []; - $eventData['items'][] = [ - 'id' => $_removedProduct->getSku(), - 'name' => $_removedProduct->getName(), - 'list_name' => 'Product Detail Page', - 'brand' => $_removedProduct->getAttributeText('manufacturer'), - 'category' => 'Products', - 'price' => number_format($_removedProduct->getFinalPrice(), 2), - ]; - $eventData['value'] += number_format($_removedProduct->getFinalPrice(), 2); - $result[] = "gtag('event', 'remove_from_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; - Mage::getSingleton('core/session')->unsRemovedProductCart(); - } - - $addedProduct = Mage::getSingleton('core/session')->getAddedProductCart(); - if($addedProduct){ - //product added to cart - $_addedProduct = Mage::getModel('catalog/product')->load($addedProduct); - $eventData = []; - $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); - $eventData['value'] = 0.00; + /** + * Render Enhanced eCommerce for GA4 + * @return string + * @throws Mage_Core_Model_Store_Exception + */ + protected function _getEnhancedECommCodeAnalytics4() + { + $helper = $this->helper('googleanalytics'); + if (!$helper->isEnhancedECommEnabled()) { + return ''; + } + + $result = []; + + //product page + if ($this->getRequest()->getModuleName()=='catalog' && $this->getRequest()->getControllerName()=='product') { + $productViewed = Mage::registry('current_product'); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = number_format($productViewed->getFinalPrice(), 2); + $eventData['items'] = []; + $eventData['items'][] = [ + 'id' => $productViewed->getSku(), + 'name' => $productViewed->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $productViewed->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($productViewed->getFinalPrice(), 2), + ]; + + $result[] = "gtag('event', 'view_item', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + } + + //category page + elseif ($this->getRequest()->getModuleName()=='catalog' && $this->getRequest()->getControllerName()=='category') { + $layer = Mage::getSingleton('catalog/layer'); + $category = $layer->getCurrentCategory(); + $productCollection = $layer->getProductCollection(); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = 0.00; + $eventData['item_list_id'] = 'category_'.$category->getUrlKey(); + $eventData['item_list_name'] = $category->getName(); + $eventData['items'] = []; + + foreach ($productCollection as $productViewed) { + $eventData['items'][] = [ + 'id' => $productViewed->getSku(), + 'name' => $productViewed->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $productViewed->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($productViewed->getFinalPrice(), 2), + ]; + $eventData['value'] += $productViewed->getFinalPrice(); + } + $eventData['value'] = number_format($eventData['value'], 2); + $result[] = "gtag('event', 'view_item_list', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + } + + //cart + elseif ($this->getRequest()->getModuleName()=='checkout' && $this->getRequest()->getControllerName()=='cart') { + $removedProduct = Mage::getSingleton('core/session')->getRemovedProductCart(); + if ($removedProduct) { + //product removed from cart + $_removedProduct = Mage::getModel('catalog/product')->load($removedProduct); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = number_format($_removedProduct->getFinalPrice(), 2); $eventData['items'] = []; - $eventData['items'][] = [ - 'id' => $_addedProduct->getSku(), - 'name' => $_addedProduct->getName(), - 'list_name' => 'Product Detail Page', - 'brand' => $_addedProduct->getAttributeText('manufacturer'), - 'category' => 'Products', - 'price' => number_format($_addedProduct->getFinalPrice(), 2), - ]; - $eventData['value'] += number_format($_addedProduct->getFinalPrice(), 2); - $result[] = "gtag('event', 'add_to_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; - Mage::getSingleton('core/session')->unsAddedProductCart(); - } - - $productCollection = Mage::getSingleton('checkout/session')->getQuote()->getAllVisibleItems(); - $eventData = []; - $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); - $eventData['value'] = 0.00; - $eventData['items'] = []; - - foreach($productCollection as $productInCart){ - $eventData['items'][] = [ - 'id' => $productInCart->getSku(), - 'name' => $productInCart->getName(), - 'list_name' => 'Product Detail Page', - 'brand' => $productInCart->getAttributeText('manufacturer'), - 'category' => 'Products', - 'price' => number_format($productInCart->getFinalPrice(), 2), - ]; - $eventData['value'] += number_format($productInCart->getFinalPrice(), 2); - } - $result[] = "gtag('event', 'view_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; - } - - //begin checkout - elseif($this->getRequest()->getModuleName()=='checkout' && $this->getRequest()->getControllerName()=='onepage'){ - $productCollection = Mage::getSingleton('checkout/session')->getQuote()->getAllVisibleItems(); - $eventData = []; - $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); - $eventData['value'] = 0.00; - $eventData['items'] = []; - - foreach($productCollection as $productInCart){ - $eventData['items'][] = [ - 'id' => $productInCart->getSku(), - 'name' => $productInCart->getName(), - 'list_name' => 'Product Detail Page', - 'brand' => $productInCart->getAttributeText('manufacturer'), - 'category' => 'Products', - 'price' => number_format($productInCart->getFinalPrice(), 2), - ]; - $eventData['value'] += number_format($productInCart->getFinalPrice(), 2); - } - $result[] = "gtag('event', 'begin_checkout', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; - } - - return implode("\n", $result); - } + $eventData['items'][] = [ + 'id' => $_removedProduct->getSku(), + 'name' => $_removedProduct->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $_removedProduct->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($_removedProduct->getFinalPrice(), 2), + ]; + $result[] = "gtag('event', 'remove_from_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + Mage::getSingleton('core/session')->unsRemovedProductCart(); + } + + $addedProduct = Mage::getSingleton('core/session')->getAddedProductCart(); + if ($addedProduct) { + //product added to cart + $_addedProduct = Mage::getModel('catalog/product')->load($addedProduct); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = number_format($_addedProduct->getFinalPrice(), 2); + $eventData['items'] = []; + $eventData['items'][] = [ + 'id' => $_addedProduct->getSku(), + 'name' => $_addedProduct->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $_addedProduct->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($_addedProduct->getFinalPrice(), 2), + ]; + $result[] = "gtag('event', 'add_to_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + Mage::getSingleton('core/session')->unsAddedProductCart(); + } + + $productCollection = Mage::getSingleton('checkout/session')->getQuote()->getAllVisibleItems(); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = 0.00; + $eventData['items'] = []; + + foreach ($productCollection as $productInCart) { + $eventData['items'][] = [ + 'id' => $productInCart->getSku(), + 'name' => $productInCart->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $productInCart->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($productInCart->getFinalPrice(), 2), + ]; + $eventData['value'] += $productInCart->getFinalPrice(); + } + $eventData['value'] = number_format($eventData['value'], 2); + $result[] = "gtag('event', 'view_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + } + + //begin checkout + elseif ($this->getRequest()->getModuleName()=='checkout' && $this->getRequest()->getControllerName()=='onepage') { + $productCollection = Mage::getSingleton('checkout/session')->getQuote()->getAllVisibleItems(); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = 0.00; + $eventData['items'] = []; + + foreach ($productCollection as $productInCart) { + $eventData['items'][] = [ + 'id' => $productInCart->getSku(), + 'name' => $productInCart->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $productInCart->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($productInCart->getFinalPrice(), 2), + ]; + $eventData['value'] += $productInCart->getFinalPrice(); + } + $eventData['value'] = number_format($eventData['value'], 2); + $result[] = "gtag('event', 'begin_checkout', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + } + + return implode("\n", $result); + } /** * Render IP anonymization code for page tracking javascript code diff --git a/app/code/core/Mage/GoogleAnalytics/Model/Observer.php b/app/code/core/Mage/GoogleAnalytics/Model/Observer.php index c13fa386baf..27e27d86be2 100644 --- a/app/code/core/Mage/GoogleAnalytics/Model/Observer.php +++ b/app/code/core/Mage/GoogleAnalytics/Model/Observer.php @@ -50,30 +50,29 @@ public function setGoogleAnalyticsOnOrderSuccessPageView(Varien_Event_Observer $ } } - /** - * Add 'removed item' from cart into GA4 block to render on cart view - * - * @param Varien_Event_Observer $observer - */ - public function removeItemFromCartGoogleAnalytics(Varien_Event_Observer $observer) - { - $productRemoved = $observer->getEvent()->getQuoteItem()->getProduct(); - if($productRemoved){ - Mage::getSingleton('core/session')->setRemovedProductCart($productRemoved->getId()); - } - } - - /** - * Add 'added item' to cart into GA4 block to render on cart view - * - * @param Varien_Event_Observer $observer - */ - public function addItemToCartGoogleAnalytics(Varien_Event_Observer $observer) - { - $productAdded = $observer->getEvent()->getQuoteItem()->getProduct(); - if($productAdded){ - Mage::getSingleton('core/session')->setAddedProductCart($productAdded->getId()); - } - } + /** + * Add 'removed item' from cart into GA4 block to render on cart view + * + * @param Varien_Event_Observer $observer + */ + public function removeItemFromCartGoogleAnalytics(Varien_Event_Observer $observer) + { + $productRemoved = $observer->getEvent()->getQuoteItem()->getProduct(); + if ($productRemoved) { + Mage::getSingleton('core/session')->setRemovedProductCart($productRemoved->getId()); + } + } + /** + * Add 'added item' to cart into GA4 block to render on cart view + * + * @param Varien_Event_Observer $observer + */ + public function addItemToCartGoogleAnalytics(Varien_Event_Observer $observer) + { + $productAdded = $observer->getEvent()->getQuoteItem()->getProduct(); + if ($productAdded) { + Mage::getSingleton('core/session')->setAddedProductCart($productAdded->getId()); + } + } } From 4f2dbd65b9fc3a47addbd01a9694fcb58180d504 Mon Sep 17 00:00:00 2001 From: Scott Moore Date: Wed, 19 Apr 2023 15:06:26 -0400 Subject: [PATCH 04/15] formatting fix. --- app/code/core/Mage/GoogleAnalytics/Block/Ga.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php index 091d8cdd125..c801259e716 100644 --- a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php +++ b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php @@ -336,7 +336,7 @@ protected function _getEnhancedECommCodeAnalytics4() ]; $eventData['value'] += $productViewed->getFinalPrice(); } - $eventData['value'] = number_format($eventData['value'], 2); + $eventData['value'] = number_format($eventData['value'], 2); $result[] = "gtag('event', 'view_item_list', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; } @@ -348,8 +348,8 @@ protected function _getEnhancedECommCodeAnalytics4() $_removedProduct = Mage::getModel('catalog/product')->load($removedProduct); $eventData = []; $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); - $eventData['value'] = number_format($_removedProduct->getFinalPrice(), 2); - $eventData['items'] = []; + $eventData['value'] = number_format($_removedProduct->getFinalPrice(), 2); + $eventData['items'] = []; $eventData['items'][] = [ 'id' => $_removedProduct->getSku(), 'name' => $_removedProduct->getName(), @@ -368,7 +368,7 @@ protected function _getEnhancedECommCodeAnalytics4() $_addedProduct = Mage::getModel('catalog/product')->load($addedProduct); $eventData = []; $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); - $eventData['value'] = number_format($_addedProduct->getFinalPrice(), 2); + $eventData['value'] = number_format($_addedProduct->getFinalPrice(), 2); $eventData['items'] = []; $eventData['items'][] = [ 'id' => $_addedProduct->getSku(), @@ -399,7 +399,7 @@ protected function _getEnhancedECommCodeAnalytics4() ]; $eventData['value'] += $productInCart->getFinalPrice(); } - $eventData['value'] = number_format($eventData['value'], 2); + $eventData['value'] = number_format($eventData['value'], 2); $result[] = "gtag('event', 'view_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; } @@ -422,7 +422,7 @@ protected function _getEnhancedECommCodeAnalytics4() ]; $eventData['value'] += $productInCart->getFinalPrice(); } - $eventData['value'] = number_format($eventData['value'], 2); + $eventData['value'] = number_format($eventData['value'], 2); $result[] = "gtag('event', 'begin_checkout', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; } From 6df957b2c549279bd8ddf3c47ed52825c1ddcc87 Mon Sep 17 00:00:00 2001 From: Scott Moore Date: Wed, 19 Apr 2023 15:37:20 -0400 Subject: [PATCH 05/15] only show page/qty presently displayed on category load --- app/code/core/Mage/GoogleAnalytics/Block/Ga.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php index c801259e716..a2d6e797504 100644 --- a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php +++ b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php @@ -318,6 +318,12 @@ protected function _getEnhancedECommCodeAnalytics4() $layer = Mage::getSingleton('catalog/layer'); $category = $layer->getCurrentCategory(); $productCollection = $layer->getProductCollection(); + $toolbarBlock = Mage::app()->getLayout()->getBlock('product_list_toolbar'); + $pageSize = $toolbarBlock->getLimit(); + $currentPage = $toolbarBlock->getCurrentPage(); + if($pageSize !== 'all') { + $productCollection->setPageSize($pageSize)->setCurPage($currentPage); + } $eventData = []; $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); $eventData['value'] = 0.00; From 1e32bdeb27568f3cf37e7f60933092934c45642c Mon Sep 17 00:00:00 2001 From: Scott Moore Date: Wed, 19 Apr 2023 15:47:32 -0400 Subject: [PATCH 06/15] formatting --- app/code/core/Mage/GoogleAnalytics/Block/Ga.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php index a2d6e797504..44e536e76c0 100644 --- a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php +++ b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php @@ -321,7 +321,7 @@ protected function _getEnhancedECommCodeAnalytics4() $toolbarBlock = Mage::app()->getLayout()->getBlock('product_list_toolbar'); $pageSize = $toolbarBlock->getLimit(); $currentPage = $toolbarBlock->getCurrentPage(); - if($pageSize !== 'all') { + if ($pageSize !== 'all') { $productCollection->setPageSize($pageSize)->setCurPage($currentPage); } $eventData = []; From 82ba2eb12d7cf8be43f363c6759c08206ee5184e Mon Sep 17 00:00:00 2001 From: Scott Moore Date: Wed, 19 Apr 2023 15:48:50 -0400 Subject: [PATCH 07/15] update comment for better clarity --- app/code/core/Mage/GoogleAnalytics/Model/Observer.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/core/Mage/GoogleAnalytics/Model/Observer.php b/app/code/core/Mage/GoogleAnalytics/Model/Observer.php index 27e27d86be2..667241f6f59 100644 --- a/app/code/core/Mage/GoogleAnalytics/Model/Observer.php +++ b/app/code/core/Mage/GoogleAnalytics/Model/Observer.php @@ -51,7 +51,7 @@ public function setGoogleAnalyticsOnOrderSuccessPageView(Varien_Event_Observer $ } /** - * Add 'removed item' from cart into GA4 block to render on cart view + * Add 'removed item' from cart into session for GA4 block to render event on cart view * * @param Varien_Event_Observer $observer */ @@ -64,7 +64,7 @@ public function removeItemFromCartGoogleAnalytics(Varien_Event_Observer $observe } /** - * Add 'added item' to cart into GA4 block to render on cart view + * Add 'added item' to cart into session for GA4 block to render event on cart view * * @param Varien_Event_Observer $observer */ From cd46e715110456641b595e5222c4941dc392627f Mon Sep 17 00:00:00 2001 From: Scott Moore Date: Wed, 19 Apr 2023 15:50:08 -0400 Subject: [PATCH 08/15] Apply formatting suggestions Co-authored-by: Fabrizio Balliano --- app/code/core/Mage/GoogleAnalytics/Block/Ga.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php index 44e536e76c0..be9c06f88a6 100644 --- a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php +++ b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php @@ -295,7 +295,7 @@ protected function _getEnhancedECommCodeAnalytics4() $result = []; //product page - if ($this->getRequest()->getModuleName()=='catalog' && $this->getRequest()->getControllerName()=='product') { + if ($this->getRequest()->getModuleName() == 'catalog' && $this->getRequest()->getControllerName() == 'product') { $productViewed = Mage::registry('current_product'); $eventData = []; $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); @@ -347,7 +347,7 @@ protected function _getEnhancedECommCodeAnalytics4() } //cart - elseif ($this->getRequest()->getModuleName()=='checkout' && $this->getRequest()->getControllerName()=='cart') { + elseif ($this->getRequest()->getModuleName() == 'checkout' && $this->getRequest()->getControllerName() == 'cart') { $removedProduct = Mage::getSingleton('core/session')->getRemovedProductCart(); if ($removedProduct) { //product removed from cart @@ -410,7 +410,7 @@ protected function _getEnhancedECommCodeAnalytics4() } //begin checkout - elseif ($this->getRequest()->getModuleName()=='checkout' && $this->getRequest()->getControllerName()=='onepage') { + elseif ($this->getRequest()->getModuleName() == 'checkout' && $this->getRequest()->getControllerName() == 'onepage') { $productCollection = Mage::getSingleton('checkout/session')->getQuote()->getAllVisibleItems(); $eventData = []; $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); From d8ca6c32a502d443703feca91371a03a60504320 Mon Sep 17 00:00:00 2001 From: Scott Moore Date: Wed, 19 Apr 2023 15:53:12 -0400 Subject: [PATCH 09/15] Apply code formatting suggestion Co-authored-by: Fabrizio Balliano --- app/code/core/Mage/GoogleAnalytics/Block/Ga.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php index be9c06f88a6..34285d50ca0 100644 --- a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php +++ b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php @@ -314,7 +314,7 @@ protected function _getEnhancedECommCodeAnalytics4() } //category page - elseif ($this->getRequest()->getModuleName()=='catalog' && $this->getRequest()->getControllerName()=='category') { + elseif ($this->getRequest()->getModuleName() == 'catalog' && $this->getRequest()->getControllerName() == 'category') { $layer = Mage::getSingleton('catalog/layer'); $category = $layer->getCurrentCategory(); $productCollection = $layer->getProductCollection(); From 880f9fd9175b058246d7e84389b0fbf4daa8021a Mon Sep 17 00:00:00 2001 From: Scott Moore Date: Tue, 16 May 2023 15:09:00 -0400 Subject: [PATCH 10/15] move to orders block + remove adminhtml parametere\ --- .../core/Mage/GoogleAnalytics/Block/Ga.php | 359 +++++++++--------- .../core/Mage/GoogleAnalytics/Helper/Data.php | 12 - .../core/Mage/GoogleAnalytics/etc/system.xml | 9 - .../default/template/googleanalytics/ga.phtml | 1 - 4 files changed, 174 insertions(+), 207 deletions(-) diff --git a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php index 34285d50ca0..e4c10879c09 100644 --- a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php +++ b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php @@ -197,37 +197,180 @@ protected function _getOrdersTrackingCodeUniversal() */ protected function _getOrdersTrackingCodeAnalytics4() { - $orderIds = $this->getOrderIds(); - if (empty($orderIds) || !is_array($orderIds)) { - return ''; - } - $collection = Mage::getResourceModel('sales/order_collection') - ->addFieldToFilter('entity_id', ['in' => $orderIds]); - $result = []; - /** @var Mage_Sales_Model_Order $order */ - foreach ($collection as $order) { - $orderData = [ - 'currency' => $order->getBaseCurrencyCode(), - 'transaction_id' => $order->getIncrementId(), - 'value' => number_format($order->getBaseGrandTotal(), 2), - 'coupon' => strtoupper($order->getCouponCode()), - 'shipping' => number_format($order->getBaseShippingAmount(), 2), - 'tax' => number_format($order->getBaseTaxAmount(), 2), - 'items' => [] - ]; - - /** @var Mage_Sales_Model_Order_Item $item */ - foreach ($order->getAllVisibleItems() as $item) { - $orderData['items'][] = [ - 'item_id' => $item->getSku(), - 'item_name' => $item->getName(), - 'quantity' => $item->getQtyOrdered(), - 'price' => $item->getBasePrice(), - 'discount' => $item->getBaseDiscountAmount() - ]; - } - $result[] = "gtag('event', 'purchase', " . json_encode($orderData, JSON_THROW_ON_ERROR) . ");"; - } + $result = []; + $request = $this->getRequest(); + $moduleName = $request->getModuleName(); + $controllerName = $request->getControllerName(); + + //purchase events + $orderIds = $this->getOrderIds(); + if (!empty($orderIds) && is_array($orderIds)){ + $collection = Mage::getResourceModel('sales/order_collection') + ->addFieldToFilter('entity_id',['in' => $orderIds]); + /** @var Mage_Sales_Model_Order $order */ + foreach ($collection as $order) { + $orderData = [ + 'currency' => $order->getBaseCurrencyCode(), + 'transaction_id' => $order->getIncrementId(), + 'value' => number_format($order->getBaseGrandTotal(),2), + 'coupon' => strtoupper($order->getCouponCode()), + 'shipping' => number_format($order->getBaseShippingAmount(),2), + 'tax' => number_format($order->getBaseTaxAmount(),2), + 'items' => [] + ]; + + /** @var Mage_Sales_Model_Order_Item $item */ + foreach ($order->getAllVisibleItems() as $item) { + $orderData['items'][] = [ + 'item_id' => $item->getSku(), + 'item_name' => $item->getName(), + 'quantity' => $item->getQtyOrdered(), + 'price' => $item->getBasePrice(), + 'discount' => $item->getBaseDiscountAmount() + ]; + } + $result[] = "gtag('event', 'purchase', " . json_encode($orderData,JSON_THROW_ON_ERROR) . ");"; + } + } + + //Begin advanced eCommerce events + //product page + if ($moduleName == 'catalog' && $controllerName == 'product') { + $productViewed = Mage::registry('current_product'); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = number_format($productViewed->getFinalPrice(), 2); + $eventData['items'] = []; + $eventData['items'][] = [ + 'id' => $productViewed->getSku(), + 'name' => $productViewed->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $productViewed->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($productViewed->getFinalPrice(), 2), + ]; + + $result[] = "gtag('event', 'view_item', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + } + + //category page + else if ($moduleName == 'catalog' && $controllerName == 'category') { + $layer = Mage::getSingleton('catalog/layer'); + $category = $layer->getCurrentCategory(); + $productCollection = $layer->getProductCollection(); + $toolbarBlock = Mage::app()->getLayout()->getBlock('product_list_toolbar'); + $pageSize = $toolbarBlock->getLimit(); + $currentPage = $toolbarBlock->getCurrentPage(); + if ($pageSize !== 'all') { + $productCollection->setPageSize($pageSize)->setCurPage($currentPage); + } + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = 0.00; + $eventData['item_list_id'] = 'category_'.$category->getUrlKey(); + $eventData['item_list_name'] = $category->getName(); + $eventData['items'] = []; + + foreach ($productCollection as $productViewed) { + $eventData['items'][] = [ + 'id' => $productViewed->getSku(), + 'name' => $productViewed->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $productViewed->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($productViewed->getFinalPrice(), 2), + ]; + $eventData['value'] += $productViewed->getFinalPrice(); + } + $eventData['value'] = number_format($eventData['value'], 2); + $result[] = "gtag('event', 'view_item_list', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + } + + //cart + else if ($moduleName == 'checkout' && $controllerName == 'cart') { + $removedProduct = Mage::getSingleton('core/session')->getRemovedProductCart(); + if ($removedProduct) { + //product removed from cart + $_removedProduct = Mage::getModel('catalog/product')->load($removedProduct); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = number_format($_removedProduct->getFinalPrice(), 2); + $eventData['items'] = []; + $eventData['items'][] = [ + 'id' => $_removedProduct->getSku(), + 'name' => $_removedProduct->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $_removedProduct->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($_removedProduct->getFinalPrice(), 2), + ]; + $result[] = "gtag('event', 'remove_from_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + Mage::getSingleton('core/session')->unsRemovedProductCart(); + } + + $addedProduct = Mage::getSingleton('core/session')->getAddedProductCart(); + if ($addedProduct) { + //product added to cart + $_addedProduct = Mage::getModel('catalog/product')->load($addedProduct); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = number_format($_addedProduct->getFinalPrice(), 2); + $eventData['items'] = []; + $eventData['items'][] = [ + 'id' => $_addedProduct->getSku(), + 'name' => $_addedProduct->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $_addedProduct->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($_addedProduct->getFinalPrice(), 2), + ]; + $result[] = "gtag('event', 'add_to_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + Mage::getSingleton('core/session')->unsAddedProductCart(); + } + + $productCollection = Mage::getSingleton('checkout/session')->getQuote()->getAllVisibleItems(); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = 0.00; + $eventData['items'] = []; + + foreach ($productCollection as $productInCart) { + $eventData['items'][] = [ + 'id' => $productInCart->getSku(), + 'name' => $productInCart->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $productInCart->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($productInCart->getFinalPrice(), 2), + ]; + $eventData['value'] += $productInCart->getFinalPrice(); + } + $eventData['value'] = number_format($eventData['value'], 2); + $result[] = "gtag('event', 'view_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + } + + //begin checkout + else if ($moduleName == 'checkout' && $controllerName == 'onepage') { + $productCollection = Mage::getSingleton('checkout/session')->getQuote()->getAllVisibleItems(); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = 0.00; + $eventData['items'] = []; + + foreach ($productCollection as $productInCart) { + $eventData['items'][] = [ + 'id' => $productInCart->getSku(), + 'name' => $productInCart->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $productInCart->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($productInCart->getFinalPrice(), 2), + ]; + $eventData['value'] += $productInCart->getFinalPrice(); + } + $eventData['value'] = number_format($eventData['value'], 2); + $result[] = "gtag('event', 'begin_checkout', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + } return implode("\n", $result); } @@ -280,160 +423,6 @@ protected function _getOrdersTrackingCodeAnalytics() return implode("\n", $result); } - /** - * Render Enhanced eCommerce for GA4 - * @return string - * @throws Mage_Core_Model_Store_Exception - */ - protected function _getEnhancedECommCodeAnalytics4() - { - $helper = $this->helper('googleanalytics'); - if (!$helper->isEnhancedECommEnabled()) { - return ''; - } - - $result = []; - - //product page - if ($this->getRequest()->getModuleName() == 'catalog' && $this->getRequest()->getControllerName() == 'product') { - $productViewed = Mage::registry('current_product'); - $eventData = []; - $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); - $eventData['value'] = number_format($productViewed->getFinalPrice(), 2); - $eventData['items'] = []; - $eventData['items'][] = [ - 'id' => $productViewed->getSku(), - 'name' => $productViewed->getName(), - 'list_name' => 'Product Detail Page', - 'brand' => $productViewed->getAttributeText('manufacturer'), - 'category' => 'Products', - 'price' => number_format($productViewed->getFinalPrice(), 2), - ]; - - $result[] = "gtag('event', 'view_item', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; - } - - //category page - elseif ($this->getRequest()->getModuleName() == 'catalog' && $this->getRequest()->getControllerName() == 'category') { - $layer = Mage::getSingleton('catalog/layer'); - $category = $layer->getCurrentCategory(); - $productCollection = $layer->getProductCollection(); - $toolbarBlock = Mage::app()->getLayout()->getBlock('product_list_toolbar'); - $pageSize = $toolbarBlock->getLimit(); - $currentPage = $toolbarBlock->getCurrentPage(); - if ($pageSize !== 'all') { - $productCollection->setPageSize($pageSize)->setCurPage($currentPage); - } - $eventData = []; - $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); - $eventData['value'] = 0.00; - $eventData['item_list_id'] = 'category_'.$category->getUrlKey(); - $eventData['item_list_name'] = $category->getName(); - $eventData['items'] = []; - - foreach ($productCollection as $productViewed) { - $eventData['items'][] = [ - 'id' => $productViewed->getSku(), - 'name' => $productViewed->getName(), - 'list_name' => 'Product Detail Page', - 'brand' => $productViewed->getAttributeText('manufacturer'), - 'category' => 'Products', - 'price' => number_format($productViewed->getFinalPrice(), 2), - ]; - $eventData['value'] += $productViewed->getFinalPrice(); - } - $eventData['value'] = number_format($eventData['value'], 2); - $result[] = "gtag('event', 'view_item_list', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; - } - - //cart - elseif ($this->getRequest()->getModuleName() == 'checkout' && $this->getRequest()->getControllerName() == 'cart') { - $removedProduct = Mage::getSingleton('core/session')->getRemovedProductCart(); - if ($removedProduct) { - //product removed from cart - $_removedProduct = Mage::getModel('catalog/product')->load($removedProduct); - $eventData = []; - $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); - $eventData['value'] = number_format($_removedProduct->getFinalPrice(), 2); - $eventData['items'] = []; - $eventData['items'][] = [ - 'id' => $_removedProduct->getSku(), - 'name' => $_removedProduct->getName(), - 'list_name' => 'Product Detail Page', - 'brand' => $_removedProduct->getAttributeText('manufacturer'), - 'category' => 'Products', - 'price' => number_format($_removedProduct->getFinalPrice(), 2), - ]; - $result[] = "gtag('event', 'remove_from_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; - Mage::getSingleton('core/session')->unsRemovedProductCart(); - } - - $addedProduct = Mage::getSingleton('core/session')->getAddedProductCart(); - if ($addedProduct) { - //product added to cart - $_addedProduct = Mage::getModel('catalog/product')->load($addedProduct); - $eventData = []; - $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); - $eventData['value'] = number_format($_addedProduct->getFinalPrice(), 2); - $eventData['items'] = []; - $eventData['items'][] = [ - 'id' => $_addedProduct->getSku(), - 'name' => $_addedProduct->getName(), - 'list_name' => 'Product Detail Page', - 'brand' => $_addedProduct->getAttributeText('manufacturer'), - 'category' => 'Products', - 'price' => number_format($_addedProduct->getFinalPrice(), 2), - ]; - $result[] = "gtag('event', 'add_to_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; - Mage::getSingleton('core/session')->unsAddedProductCart(); - } - - $productCollection = Mage::getSingleton('checkout/session')->getQuote()->getAllVisibleItems(); - $eventData = []; - $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); - $eventData['value'] = 0.00; - $eventData['items'] = []; - - foreach ($productCollection as $productInCart) { - $eventData['items'][] = [ - 'id' => $productInCart->getSku(), - 'name' => $productInCart->getName(), - 'list_name' => 'Product Detail Page', - 'brand' => $productInCart->getAttributeText('manufacturer'), - 'category' => 'Products', - 'price' => number_format($productInCart->getFinalPrice(), 2), - ]; - $eventData['value'] += $productInCart->getFinalPrice(); - } - $eventData['value'] = number_format($eventData['value'], 2); - $result[] = "gtag('event', 'view_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; - } - - //begin checkout - elseif ($this->getRequest()->getModuleName() == 'checkout' && $this->getRequest()->getControllerName() == 'onepage') { - $productCollection = Mage::getSingleton('checkout/session')->getQuote()->getAllVisibleItems(); - $eventData = []; - $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); - $eventData['value'] = 0.00; - $eventData['items'] = []; - - foreach ($productCollection as $productInCart) { - $eventData['items'][] = [ - 'id' => $productInCart->getSku(), - 'name' => $productInCart->getName(), - 'list_name' => 'Product Detail Page', - 'brand' => $productInCart->getAttributeText('manufacturer'), - 'category' => 'Products', - 'price' => number_format($productInCart->getFinalPrice(), 2), - ]; - $eventData['value'] += $productInCart->getFinalPrice(); - } - $eventData['value'] = number_format($eventData['value'], 2); - $result[] = "gtag('event', 'begin_checkout', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; - } - - return implode("\n", $result); - } /** * Render IP anonymization code for page tracking javascript code diff --git a/app/code/core/Mage/GoogleAnalytics/Helper/Data.php b/app/code/core/Mage/GoogleAnalytics/Helper/Data.php index 76c418fe852..68740aaaad0 100644 --- a/app/code/core/Mage/GoogleAnalytics/Helper/Data.php +++ b/app/code/core/Mage/GoogleAnalytics/Helper/Data.php @@ -28,8 +28,6 @@ class Mage_GoogleAnalytics_Helper_Data extends Mage_Core_Helper_Abstract public const XML_PATH_TYPE = 'google/analytics/type'; public const XML_PATH_ACCOUNT = 'google/analytics/account'; public const XML_PATH_ANONYMIZATION = 'google/analytics/anonymization'; - public const XML_PATH_ECOMM = 'google/analytics/enhanced_ecommerce'; - /** * @var string google analytics 4 @@ -107,14 +105,4 @@ public function isUseAnalytics4($store = null) return Mage::getStoreConfig(self::XML_PATH_TYPE, $store) == self::TYPE_ANALYTICS4; } - /** - * Whether GA Enhanced eCommerce data should be submitted - * - * @param null|string|bool|int|Mage_Core_Model_Store $store $store - * @return bool - */ - public function isEnhancedECommEnabled($store = null) - { - return Mage::getStoreConfigFlag(self::XML_PATH_ECOMM, $store); - } } diff --git a/app/code/core/Mage/GoogleAnalytics/etc/system.xml b/app/code/core/Mage/GoogleAnalytics/etc/system.xml index 951d50cae66..64120809aa6 100644 --- a/app/code/core/Mage/GoogleAnalytics/etc/system.xml +++ b/app/code/core/Mage/GoogleAnalytics/etc/system.xml @@ -66,15 +66,6 @@ 1 1 - - - select - adminhtml/system_config_source_yesno - 30 - 1 - 1 - 1 - diff --git a/app/design/frontend/base/default/template/googleanalytics/ga.phtml b/app/design/frontend/base/default/template/googleanalytics/ga.phtml index 9903d69bfe8..117d5d9363f 100644 --- a/app/design/frontend/base/default/template/googleanalytics/ga.phtml +++ b/app/design/frontend/base/default/template/googleanalytics/ga.phtml @@ -26,7 +26,6 @@ $_accountId = $_helper->getAccountId(); function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', ''); - _getEnhancedECommCodeAnalytics4() ?> _getOrdersTrackingCodeAnalytics4() ?> From 2f14ba98ab0b796fbb693b8455f3b1f7cb2b2e46 Mon Sep 17 00:00:00 2001 From: Scott Moore Date: Tue, 16 May 2023 15:24:41 -0400 Subject: [PATCH 11/15] clone product collection to prevent filter layer changing --- app/code/core/Mage/GoogleAnalytics/Block/Ga.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php index e4c10879c09..3f795b552f2 100644 --- a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php +++ b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php @@ -257,7 +257,7 @@ protected function _getOrdersTrackingCodeAnalytics4() else if ($moduleName == 'catalog' && $controllerName == 'category') { $layer = Mage::getSingleton('catalog/layer'); $category = $layer->getCurrentCategory(); - $productCollection = $layer->getProductCollection(); + $productCollection = clone $layer->getProductCollection(); $toolbarBlock = Mage::app()->getLayout()->getBlock('product_list_toolbar'); $pageSize = $toolbarBlock->getLimit(); $currentPage = $toolbarBlock->getCurrentPage(); From bfb5333c2bc292d176a74bc126550db8fcf4b130 Mon Sep 17 00:00:00 2001 From: Scott Moore Date: Tue, 16 May 2023 15:37:58 -0400 Subject: [PATCH 12/15] style fix --- .../core/Mage/GoogleAnalytics/Block/Ga.php | 348 +++++++++--------- .../core/Mage/GoogleAnalytics/Helper/Data.php | 1 - 2 files changed, 174 insertions(+), 175 deletions(-) diff --git a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php index 3f795b552f2..d60abd82442 100644 --- a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php +++ b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php @@ -197,180 +197,180 @@ protected function _getOrdersTrackingCodeUniversal() */ protected function _getOrdersTrackingCodeAnalytics4() { - $result = []; - $request = $this->getRequest(); - $moduleName = $request->getModuleName(); - $controllerName = $request->getControllerName(); - - //purchase events - $orderIds = $this->getOrderIds(); - if (!empty($orderIds) && is_array($orderIds)){ - $collection = Mage::getResourceModel('sales/order_collection') - ->addFieldToFilter('entity_id',['in' => $orderIds]); - /** @var Mage_Sales_Model_Order $order */ - foreach ($collection as $order) { - $orderData = [ - 'currency' => $order->getBaseCurrencyCode(), - 'transaction_id' => $order->getIncrementId(), - 'value' => number_format($order->getBaseGrandTotal(),2), - 'coupon' => strtoupper($order->getCouponCode()), - 'shipping' => number_format($order->getBaseShippingAmount(),2), - 'tax' => number_format($order->getBaseTaxAmount(),2), - 'items' => [] - ]; - - /** @var Mage_Sales_Model_Order_Item $item */ - foreach ($order->getAllVisibleItems() as $item) { - $orderData['items'][] = [ - 'item_id' => $item->getSku(), - 'item_name' => $item->getName(), - 'quantity' => $item->getQtyOrdered(), - 'price' => $item->getBasePrice(), - 'discount' => $item->getBaseDiscountAmount() - ]; - } - $result[] = "gtag('event', 'purchase', " . json_encode($orderData,JSON_THROW_ON_ERROR) . ");"; - } - } - - //Begin advanced eCommerce events - //product page - if ($moduleName == 'catalog' && $controllerName == 'product') { - $productViewed = Mage::registry('current_product'); - $eventData = []; - $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); - $eventData['value'] = number_format($productViewed->getFinalPrice(), 2); - $eventData['items'] = []; - $eventData['items'][] = [ - 'id' => $productViewed->getSku(), - 'name' => $productViewed->getName(), - 'list_name' => 'Product Detail Page', - 'brand' => $productViewed->getAttributeText('manufacturer'), - 'category' => 'Products', - 'price' => number_format($productViewed->getFinalPrice(), 2), - ]; - - $result[] = "gtag('event', 'view_item', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; - } - - //category page - else if ($moduleName == 'catalog' && $controllerName == 'category') { - $layer = Mage::getSingleton('catalog/layer'); - $category = $layer->getCurrentCategory(); - $productCollection = clone $layer->getProductCollection(); - $toolbarBlock = Mage::app()->getLayout()->getBlock('product_list_toolbar'); - $pageSize = $toolbarBlock->getLimit(); - $currentPage = $toolbarBlock->getCurrentPage(); - if ($pageSize !== 'all') { - $productCollection->setPageSize($pageSize)->setCurPage($currentPage); - } - $eventData = []; - $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); - $eventData['value'] = 0.00; - $eventData['item_list_id'] = 'category_'.$category->getUrlKey(); - $eventData['item_list_name'] = $category->getName(); - $eventData['items'] = []; - - foreach ($productCollection as $productViewed) { - $eventData['items'][] = [ - 'id' => $productViewed->getSku(), - 'name' => $productViewed->getName(), - 'list_name' => 'Product Detail Page', - 'brand' => $productViewed->getAttributeText('manufacturer'), - 'category' => 'Products', - 'price' => number_format($productViewed->getFinalPrice(), 2), - ]; - $eventData['value'] += $productViewed->getFinalPrice(); - } - $eventData['value'] = number_format($eventData['value'], 2); - $result[] = "gtag('event', 'view_item_list', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; - } - - //cart - else if ($moduleName == 'checkout' && $controllerName == 'cart') { - $removedProduct = Mage::getSingleton('core/session')->getRemovedProductCart(); - if ($removedProduct) { - //product removed from cart - $_removedProduct = Mage::getModel('catalog/product')->load($removedProduct); - $eventData = []; - $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); - $eventData['value'] = number_format($_removedProduct->getFinalPrice(), 2); - $eventData['items'] = []; - $eventData['items'][] = [ - 'id' => $_removedProduct->getSku(), - 'name' => $_removedProduct->getName(), - 'list_name' => 'Product Detail Page', - 'brand' => $_removedProduct->getAttributeText('manufacturer'), - 'category' => 'Products', - 'price' => number_format($_removedProduct->getFinalPrice(), 2), - ]; - $result[] = "gtag('event', 'remove_from_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; - Mage::getSingleton('core/session')->unsRemovedProductCart(); - } - - $addedProduct = Mage::getSingleton('core/session')->getAddedProductCart(); - if ($addedProduct) { - //product added to cart - $_addedProduct = Mage::getModel('catalog/product')->load($addedProduct); - $eventData = []; - $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); - $eventData['value'] = number_format($_addedProduct->getFinalPrice(), 2); - $eventData['items'] = []; - $eventData['items'][] = [ - 'id' => $_addedProduct->getSku(), - 'name' => $_addedProduct->getName(), - 'list_name' => 'Product Detail Page', - 'brand' => $_addedProduct->getAttributeText('manufacturer'), - 'category' => 'Products', - 'price' => number_format($_addedProduct->getFinalPrice(), 2), - ]; - $result[] = "gtag('event', 'add_to_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; - Mage::getSingleton('core/session')->unsAddedProductCart(); - } - - $productCollection = Mage::getSingleton('checkout/session')->getQuote()->getAllVisibleItems(); - $eventData = []; - $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); - $eventData['value'] = 0.00; - $eventData['items'] = []; - - foreach ($productCollection as $productInCart) { - $eventData['items'][] = [ - 'id' => $productInCart->getSku(), - 'name' => $productInCart->getName(), - 'list_name' => 'Product Detail Page', - 'brand' => $productInCart->getAttributeText('manufacturer'), - 'category' => 'Products', - 'price' => number_format($productInCart->getFinalPrice(), 2), - ]; - $eventData['value'] += $productInCart->getFinalPrice(); - } - $eventData['value'] = number_format($eventData['value'], 2); - $result[] = "gtag('event', 'view_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; - } - - //begin checkout - else if ($moduleName == 'checkout' && $controllerName == 'onepage') { - $productCollection = Mage::getSingleton('checkout/session')->getQuote()->getAllVisibleItems(); - $eventData = []; - $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); - $eventData['value'] = 0.00; - $eventData['items'] = []; - - foreach ($productCollection as $productInCart) { - $eventData['items'][] = [ - 'id' => $productInCart->getSku(), - 'name' => $productInCart->getName(), - 'list_name' => 'Product Detail Page', - 'brand' => $productInCart->getAttributeText('manufacturer'), - 'category' => 'Products', - 'price' => number_format($productInCart->getFinalPrice(), 2), - ]; - $eventData['value'] += $productInCart->getFinalPrice(); - } - $eventData['value'] = number_format($eventData['value'], 2); - $result[] = "gtag('event', 'begin_checkout', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; - } + $result = []; + $request = $this->getRequest(); + $moduleName = $request->getModuleName(); + $controllerName = $request->getControllerName(); + + //purchase events + $orderIds = $this->getOrderIds(); + if (!empty($orderIds) && is_array($orderIds)) { + $collection = Mage::getResourceModel('sales/order_collection') + ->addFieldToFilter('entity_id', ['in' => $orderIds]); + /** @var Mage_Sales_Model_Order $order */ + foreach ($collection as $order) { + $orderData = [ + 'currency' => $order->getBaseCurrencyCode(), + 'transaction_id' => $order->getIncrementId(), + 'value' => number_format($order->getBaseGrandTotal(), 2), + 'coupon' => strtoupper($order->getCouponCode()), + 'shipping' => number_format($order->getBaseShippingAmount(), 2), + 'tax' => number_format($order->getBaseTaxAmount(), 2), + 'items' => [] + ]; + + /** @var Mage_Sales_Model_Order_Item $item */ + foreach ($order->getAllVisibleItems() as $item) { + $orderData['items'][] = [ + 'item_id' => $item->getSku(), + 'item_name' => $item->getName(), + 'quantity' => $item->getQtyOrdered(), + 'price' => $item->getBasePrice(), + 'discount' => $item->getBaseDiscountAmount() + ]; + } + $result[] = "gtag('event', 'purchase', " . json_encode($orderData, JSON_THROW_ON_ERROR) . ");"; + } + } + + //Begin advanced eCommerce events + //product page + if ($moduleName == 'catalog' && $controllerName == 'product') { + $productViewed = Mage::registry('current_product'); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = number_format($productViewed->getFinalPrice(), 2); + $eventData['items'] = []; + $eventData['items'][] = [ + 'id' => $productViewed->getSku(), + 'name' => $productViewed->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $productViewed->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($productViewed->getFinalPrice(), 2), + ]; + + $result[] = "gtag('event', 'view_item', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + } + + //category page + elseif ($moduleName == 'catalog' && $controllerName == 'category') { + $layer = Mage::getSingleton('catalog/layer'); + $category = $layer->getCurrentCategory(); + $productCollection = clone $layer->getProductCollection(); + $toolbarBlock = Mage::app()->getLayout()->getBlock('product_list_toolbar'); + $pageSize = $toolbarBlock->getLimit(); + $currentPage = $toolbarBlock->getCurrentPage(); + if ($pageSize !== 'all') { + $productCollection->setPageSize($pageSize)->setCurPage($currentPage); + } + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = 0.00; + $eventData['item_list_id'] = 'category_'.$category->getUrlKey(); + $eventData['item_list_name'] = $category->getName(); + $eventData['items'] = []; + + foreach ($productCollection as $productViewed) { + $eventData['items'][] = [ + 'id' => $productViewed->getSku(), + 'name' => $productViewed->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $productViewed->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($productViewed->getFinalPrice(), 2), + ]; + $eventData['value'] += $productViewed->getFinalPrice(); + } + $eventData['value'] = number_format($eventData['value'], 2); + $result[] = "gtag('event', 'view_item_list', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + } + + //cart + elseif ($moduleName == 'checkout' && $controllerName == 'cart') { + $removedProduct = Mage::getSingleton('core/session')->getRemovedProductCart(); + if ($removedProduct) { + //product removed from cart + $_removedProduct = Mage::getModel('catalog/product')->load($removedProduct); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = number_format($_removedProduct->getFinalPrice(), 2); + $eventData['items'] = []; + $eventData['items'][] = [ + 'id' => $_removedProduct->getSku(), + 'name' => $_removedProduct->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $_removedProduct->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($_removedProduct->getFinalPrice(), 2), + ]; + $result[] = "gtag('event', 'remove_from_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + Mage::getSingleton('core/session')->unsRemovedProductCart(); + } + + $addedProduct = Mage::getSingleton('core/session')->getAddedProductCart(); + if ($addedProduct) { + //product added to cart + $_addedProduct = Mage::getModel('catalog/product')->load($addedProduct); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = number_format($_addedProduct->getFinalPrice(), 2); + $eventData['items'] = []; + $eventData['items'][] = [ + 'id' => $_addedProduct->getSku(), + 'name' => $_addedProduct->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $_addedProduct->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($_addedProduct->getFinalPrice(), 2), + ]; + $result[] = "gtag('event', 'add_to_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + Mage::getSingleton('core/session')->unsAddedProductCart(); + } + + $productCollection = Mage::getSingleton('checkout/session')->getQuote()->getAllVisibleItems(); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = 0.00; + $eventData['items'] = []; + + foreach ($productCollection as $productInCart) { + $eventData['items'][] = [ + 'id' => $productInCart->getSku(), + 'name' => $productInCart->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $productInCart->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($productInCart->getFinalPrice(), 2), + ]; + $eventData['value'] += $productInCart->getFinalPrice(); + } + $eventData['value'] = number_format($eventData['value'], 2); + $result[] = "gtag('event', 'view_cart', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + } + + //begin checkout + elseif ($moduleName == 'checkout' && $controllerName == 'onepage') { + $productCollection = Mage::getSingleton('checkout/session')->getQuote()->getAllVisibleItems(); + $eventData = []; + $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); + $eventData['value'] = 0.00; + $eventData['items'] = []; + + foreach ($productCollection as $productInCart) { + $eventData['items'][] = [ + 'id' => $productInCart->getSku(), + 'name' => $productInCart->getName(), + 'list_name' => 'Product Detail Page', + 'brand' => $productInCart->getAttributeText('manufacturer'), + 'category' => 'Products', + 'price' => number_format($productInCart->getFinalPrice(), 2), + ]; + $eventData['value'] += $productInCart->getFinalPrice(); + } + $eventData['value'] = number_format($eventData['value'], 2); + $result[] = "gtag('event', 'begin_checkout', " . json_encode($eventData, JSON_THROW_ON_ERROR) . ");"; + } return implode("\n", $result); } diff --git a/app/code/core/Mage/GoogleAnalytics/Helper/Data.php b/app/code/core/Mage/GoogleAnalytics/Helper/Data.php index 68740aaaad0..7cb92cf7528 100644 --- a/app/code/core/Mage/GoogleAnalytics/Helper/Data.php +++ b/app/code/core/Mage/GoogleAnalytics/Helper/Data.php @@ -104,5 +104,4 @@ public function isUseAnalytics4($store = null) { return Mage::getStoreConfig(self::XML_PATH_TYPE, $store) == self::TYPE_ANALYTICS4; } - } From 8ace4bba6aef81a59649513f839e34677e17dcdb Mon Sep 17 00:00:00 2001 From: Scott Moore Date: Tue, 16 May 2023 15:44:12 -0400 Subject: [PATCH 13/15] remove translation --- app/locale/en_US/Mage_GoogleAnalytics.csv | 1 - 1 file changed, 1 deletion(-) diff --git a/app/locale/en_US/Mage_GoogleAnalytics.csv b/app/locale/en_US/Mage_GoogleAnalytics.csv index d608f1bef4c..1b90846f791 100644 --- a/app/locale/en_US/Mage_GoogleAnalytics.csv +++ b/app/locale/en_US/Mage_GoogleAnalytics.csv @@ -6,4 +6,3 @@ "Type","Type" "Universal Analytics","Universal Analytics" "Google Analytics 4","Google Analytics 4" -"Enable Enhanced eCommerce","Enable Enhanced eCommerce" From 4bcbc6923026fc557d7f68de278d419b5f45c4e4 Mon Sep 17 00:00:00 2001 From: Scott Moore Date: Wed, 17 May 2023 12:31:39 -0400 Subject: [PATCH 14/15] Update app/code/core/Mage/GoogleAnalytics/Block/Ga.php Co-authored-by: Fabrizio Balliano --- app/code/core/Mage/GoogleAnalytics/Block/Ga.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php index d60abd82442..2e49169dc4a 100644 --- a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php +++ b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php @@ -423,7 +423,6 @@ protected function _getOrdersTrackingCodeAnalytics() return implode("\n", $result); } - /** * Render IP anonymization code for page tracking javascript code * From 2948f607f61cfcb5643c04a9272e0cb50db131d6 Mon Sep 17 00:00:00 2001 From: Scott Moore Date: Wed, 17 May 2023 12:38:18 -0400 Subject: [PATCH 15/15] Apply suggestions from code review [remove not needed comments] Co-authored-by: Fabrizio Balliano --- app/code/core/Mage/GoogleAnalytics/Block/Ga.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php index 2e49169dc4a..581214a3543 100644 --- a/app/code/core/Mage/GoogleAnalytics/Block/Ga.php +++ b/app/code/core/Mage/GoogleAnalytics/Block/Ga.php @@ -290,7 +290,6 @@ protected function _getOrdersTrackingCodeAnalytics4() elseif ($moduleName == 'checkout' && $controllerName == 'cart') { $removedProduct = Mage::getSingleton('core/session')->getRemovedProductCart(); if ($removedProduct) { - //product removed from cart $_removedProduct = Mage::getModel('catalog/product')->load($removedProduct); $eventData = []; $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode(); @@ -310,7 +309,6 @@ protected function _getOrdersTrackingCodeAnalytics4() $addedProduct = Mage::getSingleton('core/session')->getAddedProductCart(); if ($addedProduct) { - //product added to cart $_addedProduct = Mage::getModel('catalog/product')->load($addedProduct); $eventData = []; $eventData['currency'] = Mage::app()->getStore()->getCurrentCurrencyCode();