1<?php 2 3class action_plugin_googletagmanager extends DokuWiki_Action_Plugin 4{ 5 public const GTMID = 'GTMID'; 6 7 /** 8 * return some info 9 */ 10 public function getInfo() 11 { 12 return array( 13 'author' => 'Alexander Lehmann', 14 'email' => 'alexlehm@gmail.com', 15 'date' => '2022-12-29', 16 'name' => 'Google Tag Manager Plugin', 17 'desc' => 'Plugin to embed Google Tag Manager in your wiki.', 18 'url' => 'https://www.lehmann.cx/wiki/projects:dokuwiki_gtm', 19 ); 20 } 21 22 /** 23 * Register its handlers with the DokuWiki's event controller 24 */ 25 public function register(Doku_Event_Handler $controller) 26 { 27 $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'addHeaders'); 28 } 29 30 public function addHeaders(&$event, $param) 31 { 32 $GTMID = $this->getConf(self::GTMID); 33 if (!$GTMID) return; 34 35 $is_AW_tag = substr($GTMID, 0, 3) == 'AW-'; 36 37 if ($is_AW_tag) { 38 $event->data['script'][] = array ( 39 'src' => "https://www.googletagmanager.com/gtag/js?id=" . $GTMID, 40 ); 41 $event->data['script'][] = array ( 42 'type' => 'text/javascript', 43 '_data' => "window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);}" . 44 " gtag('js', new Date()); gtag('config', '" . 45 $GTMID . 46 "');", 47 ); 48 } else { 49 $event->data['noscript'][] = array ( 50 '_data' => '<iframe src="https://www.googletagmanager.com/ns.html?id=' . 51 $GTMID . 52 '" height="0" width="0" style="display:none;visibility:hidden"></iframe>', 53 ); 54 $event->data['script'][] = array ( 55 'type' => 'text/javascript', 56 '_data' => "(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 57new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 58j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 59'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 60})(window,document,'script','dataLayer','" . 61 $GTMID . 62 "');", 63 ); 64 } 65 } 66} 67