, (*1)
A Yii2 extensions which provides a widget to render Google Tag Manager <script>
and <noscript>
snippets based on Yii2 params configuration. Further you can register it as component and use it to trigger dataLayer.push
requests., (*2)
Install
Using composer:, (*3)
composer require "mainaero/yii2-gtm-widget"
Configuration
Add in your params-local.php
file:, (*4)
'gtm_id' => '<YOUR_GTM_ID_WITHOUT_GTM_PREFIX> (required)',
'gtm_env' => '<YOUR_ENVIRONMENT_QUERY_STRING> (optional)'
E.g.:, (*5)
'gtm_id' => '1A2B3CD',
'gtm_env' => '>m_auth=<TOKEN>w>m_preview=<ENV_ID>>m_cookies_win=x'
If you don't set the gtm_id
param this widget will return an empty string., (*6)
As Component
If you want to use it as component add following code to your main.php
config:, (*7)
'components' => [
...
'gtmDataLayerPush' => [
'class' => 'mainaero\yii\gtm\component\DataLayerPush'
],
...
]
Usage
In your view file:, (*8)
<?php
use mainaero\yii\gtm\widget\GTM;
...
Render a <script>
snippet:
<?= GTM::widget(); ?>
which renders:, (*9)
<!-- Google Tag Manager -->
<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+'<YOUR_ENVIRONMENT_QUERY_STRING>';f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-<YOUR_ID>');</script>
<!-- End Google Tag Manager -->
Render a <noscript>
snippet:
<?= GTM::widget(['type' => 'noscript']); ?>
which renders:, (*10)
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-<YOUR_ID><YOUR_ENVIRONMENT_QUERY_STRING>"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
Use to trigger dataLayer.push
In your controller add seomthing with:, (*11)
Yii::$app->gtmDataLayerPush->add(['event' => 'myEvent', 'eventCategory' => 'myCategory']);
Somewhere in your view or layout file output it with:, (*12)
<?= GTM::widget(['type' => 'dataLayerPush']) ?>
You can leave this snipped in your layout file as it will only render something if you have added something before., (*13)