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