1<?php 2 3use dokuwiki\Extension\ActionPlugin; 4use dokuwiki\Extension\EventHandler; 5 6class action_plugin_googletagmanager extends ActionPlugin 7{ 8 public const GTMID = 'GTMID'; 9 10 /** 11 * Register its handlers with the DokuWiki's event controller 12 */ 13 public function register(EventHandler $controller) 14 { 15 $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'addHeaders'); 16 } 17 18 public function addHeaders(&$event, $param) 19 { 20 $GTMID = $this->getConf(self::GTMID); 21 if (!$GTMID) return; 22 23 $is_AW_tag = substr($GTMID, 0, 3) == 'AW-'; 24 25 if ($is_AW_tag) { 26 $script1 = "https://www.googletagmanager.com/gtag/js?id={$GTMID}"; 27 $script2 = <<<EOT 28 window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} 29 gtag('js', new Date()); gtag('config', '{$GTMID}');"; 30 EOT; 31 32 $event->data['script'][] = ['src' => $script1]; 33 $event->data['script'][] = ['type' => 'text/javascript', '_data' => $script2]; 34 } else { 35 $iframe = <<<EOT 36 <iframe src="https://www.googletagmanager.com/ns.html?id={$GTMID}" 37 height="0" width="0" style="display:none;visibility:hidden"></iframe> 38 EOT; 39 40 $script = <<<EOT 41 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 42 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 43 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 44 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 45 })(window,document,'script','dataLayer','{$GTMID}'); 46 EOT; 47 48 $event->data['noscript'][] = ['_data' => $iframe]; 49 $event->data['script'][] = ['type' => 'text/javascript', '_data' => $script]; 50 } 51 } 52} 53