Current Path : /var/www/www-root/data/www/monolith-realty.ru/bitrix/modules/landing/lib/hook/page/ |
Current File : /var/www/www-root/data/www/monolith-realty.ru/bitrix/modules/landing/lib/hook/page/gacounter.php |
<?php namespace Bitrix\Landing\Hook\Page; use \Bitrix\Landing\Field; use \Bitrix\Landing\Manager; use \Bitrix\Main\Localization\Loc; Loc::loadMessages(__FILE__); class GaCounter extends \Bitrix\Landing\Hook\Page { /** * Map of the field. * @return array */ protected function getMap() { $helpUrl = \Bitrix\Landing\Help::getHelpUrl('GACOUNTER'); return array( 'USE' => new Field\Checkbox('USE', array( 'title' => Loc::getMessage('LANDING_HOOK_GACOUNTER_USE') )), 'COUNTER' => new Field\Text('COUNTER', array( 'title' => Loc::getMessage('LANDING_HOOK_GACOUNTER_COUNTER'), 'placeholder' => Loc::getMessage('LANDING_HOOK_GACOUNTER_PLACEHOLDER_1') )), 'COUNTER_GA4' => new Field\Text('COUNTER_GA4', array( 'title' => Loc::getMessage('LANDING_HOOK_GACOUNTER_COUNTER'), 'placeholder' => Loc::getMessage('LANDING_HOOK_GACOUNTER_PLACEHOLDER_2'), 'help' => $helpUrl ? '<a href="' . $helpUrl . '" target="_blank">' . Loc::getMessage('LANDING_HOOK_DETAIL_HELP') . '</a>' : '' )), 'SEND_CLICK' => new Field\Checkbox('SEND_CLICK', array( 'title' => Loc::getMessage('LANDING_HOOK_GACOUNTER_SEND_CLICK') )), 'CLICK_TYPE' => new Field\Select('CLICK_TYPE', array( 'title' => Loc::getMessage('LANDING_HOOK_GACOUNTER_CLICK_TYPE'), 'options' => [ 'href' => Loc::getMessage('LANDING_HOOK_GACOUNTER_CLICK_TYPE_HREF'), 'text' => Loc::getMessage('LANDING_HOOK_GACOUNTER_CLICK_TYPE_TEXT'), ] )), 'SEND_SHOW' => new Field\Checkbox('SEND_SHOW', array( 'title' => Loc::getMessage('LANDING_HOOK_GACOUNTER_SEND_SHOW'), )) ); } /** * Enable only in high plan. * @return boolean */ public function isFree() { return false; } /** * Locked or not current hook in free plan. * @return bool */ public function isLocked() { return !\Bitrix\Landing\Restriction\Manager::isAllowed( 'limit_sites_google_analytics' ); } /** * Enable or not the hook. * @return boolean */ public function enabled() { if ($this->isLocked()) { return false; } if ($this->issetCustomExec()) { return true; } return $this->fields['USE']->getValue() == 'Y'; } /** * Exec or not hook in edit mode. * @return boolean */ public function enabledInEditMode() { return false; } /** * Exec hook. * @return void */ public function exec() { if ($this->execCustom()) { return; } if ($this->fields['USE']->getValue() != 'Y') { return; } //Universal Analytics $this->setCounter($this->fields['COUNTER']); //Google Analytics 4 $this->setCounter($this->fields['COUNTER_GA4']); // send analytics $sendData = []; if ($this->fields['SEND_CLICK']->getValue() == 'Y') { $sendData[] = 'click'; } if ($this->fields['SEND_SHOW']->getValue() == 'Y') { $sendData[] = 'show'; } if (!empty($sendData)) { \Bitrix\Landing\Manager::setPageView( 'BodyTag', ' data-event-tracker=\'' . json_encode($sendData) . '\'' ); $clickType = $this->fields['CLICK_TYPE']->getValue(); if (!$clickType) { $clickType = 'text'; } if ($clickType) { \Bitrix\Landing\Manager::setPageView( 'BodyTag', ' data-event-tracker-label-from="' . \htmlspecialcharsbx($clickType) . '"' ); } } } /** * Sets counter to the page. * @param string $counter Counter code. * @return void */ public static function setCounter(string $counter): void { $counter = \htmlspecialcharsbx(trim($counter)); $counter = \CUtil::jsEscape($counter); if (!$counter) { return; } Manager::setPageView( 'AfterHeadOpen', '<script async src="https://www.googletagmanager.com/gtag/js?id=' . $counter . '" data-skip-moving="true" ></script>' ); Cookies::addCookieScript( 'ga', 'window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments)}; gtag("js", new Date()); gtag("config", "' . $counter . '");' ); } }