Вставка кода Google tag manager через сохранение ID GoogleTagManager в настройках контекста.

как можно вставить код счетчика Google Tag Manager через настройки контекста? Чтобы для каждого контекста прописывать номер счетчика в настройки контекста? А код Google Tag Manager был универсальный. Например я хочу сохранить номер ID GoogleTagManager в настройках контекста, а код сниппета/чанка вставки кода GoogleTagManager сделать универсальный один для всех контекстов?
Олег Захаров
03 апреля 2018, 15:44
modx.pro
1
4 471
0

Комментарии: 4

Олег Захаров
03 апреля 2018, 18:46
0
Делюсь наработкой до которой сам дошел путем долгих мучений и борьбы с fenom. Вроде работает, может кому пригодится:

Сниппет вставки кода в (вызываем соответственно сниппет в блоке head, в коде добавлены пробелы до и после { и } чтобы fenom не ругался):
<?php
$idgtm = $modx->getOption("GoogLeTagManagerID");
$hostname=$modx->getOption("http_host");
print '<!-- Google Tag Manager for '.$hostname.' -->
<script>
(function(w,d,s,l,i) { 
	w[l]=w[l]||[];
	w[l].push( { 
		"gtm.start": new Date().getTime(),event:"gtm.js" 
	 } );
	var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!="dataLayer"?"&l="+l:"";
	j.async=true;j.src="https://www.googletagmanager.com/gtm.js?id="+i+dl;
	f.parentNode.insertBefore(j,f);
  } ) (window,document,"script","dataLayer","'.$idgtm.'");</script> <!-- End Google Tag Manager -->';
А для кода который вставляется в начало тега body сделал такой чанк (с конструкциями fenom — fenom должен быть включен -если не хотите включать переделайте в сниппет как в примере кода сниппета выше)
<!-- Google Tag Manager (noscript) for {$modx->getOption("http_host")} -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id={$modx->getOption("GoogLeTagManagerID")}"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
В контекст добавил ключ GoogLeTagManagerID со значением ID GoogleTagManager (который выглядит как GTM-ABCDEFG)
    Олег Захаров
    03 апреля 2018, 18:47
    0
    Подскажите более элегантный способ кода.
      Павел Романов
      03 апреля 2018, 18:55
      +1
      Можно просто в чанке стандартными тегами прописать:
      <!-- Google Tag Manager for [[++http_host]] -->
      <script>
       (function(w,d,s,l,i) { 
      	w[l]=w[l]||[];
      	w[l].push( { 
      		"gtm.start": new Date().getTime(),event:"gtm.js" 
      	 } );
      	var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!="dataLayer"?"&l="+l:"";
      	j.async=true;j.src="https://www.googletagmanager.com/gtm.js?id="+i+dl;
      	f.parentNode.insertBefore(j,f);
        } ) (window,document,"script","dataLayer","[[++GoogLeTagManagerID]]");
      </script> 
      <!-- End Google Tag Manager -->
        Олег Захаров
        03 апреля 2018, 22:09
        0
        Спасибо! Я вроде так же пробовал вначале, но видимо чтото не так написал, сайт не грузил страницу, я грешил на fenom. А ваш код заработал без проблем.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        4