123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\GoogleAnalytics\Block;
- use Magento\Framework\App\ObjectManager;
- /**
- * GoogleAnalytics Page Block
- *
- * @api
- * @since 100.0.2
- */
- class Ga extends \Magento\Framework\View\Element\Template
- {
- /**
- * Google analytics data
- *
- * @var \Magento\GoogleAnalytics\Helper\Data
- */
- protected $_googleAnalyticsData = null;
- /**
- * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory
- */
- protected $_salesOrderCollection;
- /**
- * @var \Magento\Cookie\Helper\Cookie
- */
- private $cookieHelper;
- /**
- * @param \Magento\Framework\View\Element\Template\Context $context
- * @param \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $salesOrderCollection
- * @param \Magento\GoogleAnalytics\Helper\Data $googleAnalyticsData
- * @param array $data
- * @param \Magento\Cookie\Helper\Cookie|null $cookieHelper
- */
- public function __construct(
- \Magento\Framework\View\Element\Template\Context $context,
- \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $salesOrderCollection,
- \Magento\GoogleAnalytics\Helper\Data $googleAnalyticsData,
- array $data = [],
- \Magento\Cookie\Helper\Cookie $cookieHelper = null
- ) {
- $this->_googleAnalyticsData = $googleAnalyticsData;
- $this->_salesOrderCollection = $salesOrderCollection;
- $this->cookieHelper = $cookieHelper ?: ObjectManager::getInstance()->get(\Magento\Cookie\Helper\Cookie::class);
- parent::__construct($context, $data);
- }
- /**
- * Get config
- *
- * @param string $path
- * @return mixed
- */
- public function getConfig($path)
- {
- return $this->_scopeConfig->getValue($path, \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
- }
- /**
- * 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
- * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/method-reference#set
- * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/method-reference#gaObjectMethods
- * @deprecated 100.2.0 please use getPageTrackingData method
- */
- public function getPageTrackingCode($accountId)
- {
- $anonymizeIp = "";
- if ($this->_googleAnalyticsData->isAnonymizedIpActive()) {
- $anonymizeIp = "\nga('set', 'anonymizeIp', true);";
- }
- return "\nga('create', '" . $this->escapeHtmlAttr($accountId, false)
- . "', 'auto');{$anonymizeIp}\nga('send', 'pageview'{$this->getOptPageUrl()});\n";
- }
- /**
- * Render information about specified orders and their items
- *
- * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#checkout-options
- * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#measuring-transactions
- * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#transaction
- *
- * @return string|void
- * @deprecated 100.2.0 please use getOrdersTrackingData method
- */
- public function getOrdersTrackingCode()
- {
- $orderIds = $this->getOrderIds();
- if (empty($orderIds) || !is_array($orderIds)) {
- return;
- }
- $collection = $this->_salesOrderCollection->create();
- $collection->addFieldToFilter('entity_id', ['in' => $orderIds]);
- $result = [];
- $result[] = "ga('require', 'ec', 'ec.js');";
- foreach ($collection as $order) {
- $result[] = "ga('set', 'currencyCode', '" . $order->getOrderCurrencyCode() . "');";
- foreach ($order->getAllVisibleItems() as $item) {
- $result[] = sprintf(
- "ga('ec:addProduct', {
- 'id': '%s',
- 'name': '%s',
- 'price': '%s',
- 'quantity': %s
- });",
- $this->escapeJsQuote($item->getSku()),
- $this->escapeJsQuote($item->getName()),
- $item->getPrice(),
- $item->getQtyOrdered()
- );
- }
- $result[] = sprintf(
- "ga('ec:setAction', 'purchase', {
- 'id': '%s',
- 'affiliation': '%s',
- 'revenue': '%s',
- 'tax': '%s',
- 'shipping': '%s'
- });",
- $order->getIncrementId(),
- $this->escapeJsQuote($this->_storeManager->getStore()->getFrontendName()),
- $order->getGrandTotal(),
- $order->getTaxAmount(),
- $order->getShippingAmount()
- );
- $result[] = "ga('send', 'pageview');";
- }
- return implode("\n", $result);
- }
- /**
- * Render GA tracking scripts
- *
- * @return string
- */
- protected function _toHtml()
- {
- if (!$this->_googleAnalyticsData->isGoogleAnalyticsAvailable()) {
- return '';
- }
- return parent::_toHtml();
- }
- /**
- * Return cookie restriction mode value.
- *
- * @return bool
- * @since 100.2.0
- */
- public function isCookieRestrictionModeEnabled()
- {
- return $this->cookieHelper->isCookieRestrictionModeEnabled();
- }
- /**
- * Return current website id.
- *
- * @return int
- * @since 100.2.0
- */
- public function getCurrentWebsiteId()
- {
- return $this->_storeManager->getWebsite()->getId();
- }
- /**
- * Return information about page for GA tracking
- *
- * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/method-reference#set
- * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/method-reference#gaObjectMethods
- *
- * @param string $accountId
- * @return array
- * @since 100.2.0
- */
- public function getPageTrackingData($accountId)
- {
- return [
- 'optPageUrl' => $this->getOptPageUrl(),
- 'isAnonymizedIpActive' => $this->_googleAnalyticsData->isAnonymizedIpActive(),
- 'accountId' => $this->escapeHtmlAttr($accountId, false)
- ];
- }
- /**
- * Return information about order and items for GA tracking.
- *
- * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#checkout-options
- * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#measuring-transactions
- * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#transaction
- *
- * @return array
- * @since 100.2.0
- */
- public function getOrdersTrackingData()
- {
- $result = [];
- $orderIds = $this->getOrderIds();
- if (empty($orderIds) || !is_array($orderIds)) {
- return $result;
- }
- $collection = $this->_salesOrderCollection->create();
- $collection->addFieldToFilter('entity_id', ['in' => $orderIds]);
- foreach ($collection as $order) {
- foreach ($order->getAllVisibleItems() as $item) {
- $result['products'][] = [
- 'id' => $this->escapeJsQuote($item->getSku()),
- 'name' => $this->escapeJsQuote($item->getName()),
- 'price' => $item->getPrice(),
- 'quantity' => $item->getQtyOrdered(),
- ];
- }
- $result['orders'][] = [
- 'id' => $order->getIncrementId(),
- 'affiliation' => $this->escapeJsQuote($this->_storeManager->getStore()->getFrontendName()),
- 'revenue' => $order->getGrandTotal(),
- 'tax' => $order->getTaxAmount(),
- 'shipping' => $order->getShippingAmount(),
- ];
- $result['currency'] = $order->getOrderCurrencyCode();
- }
- return $result;
- }
- /**
- * Return page url for tracking.
- *
- * @return string
- */
- private function getOptPageUrl()
- {
- $optPageURL = '';
- $pageName = trim($this->getPageName());
- if ($pageName && substr($pageName, 0, 1) == '/' && strlen($pageName) > 1) {
- $optPageURL = ", '" . $this->escapeHtmlAttr($pageName, false) . "'";
- }
- return $optPageURL;
- }
- }
|