mainaero / yii2-gtm-widget
Google Tag Manager Widget for the Yii2 Framework
Installs: 18 525
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:yii2-extension
Requires
- yiisoft/yii2: ^2.0.13
Requires (Dev)
- codeclimate/php-test-reporter: ^0.4.4
- phpunit/phpunit: ^6.5
This package is auto-updated.
Last update: 2025-06-11 22:08:06 UTC
README
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.
Install
Using composer:
composer require "mainaero/yii2-gtm-widget"
Configuration
Add in your params-local.php
file:
'gtm_id' => '<YOUR_GTM_ID_WITHOUT_GTM_PREFIX> (required)', 'gtm_env' => '<YOUR_ENVIRONMENT_QUERY_STRING> (optional)'
E.g.:
'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.
As Component
If you want to use it as component add following code to your main.php
config:
'components' => [ ... 'gtmDataLayerPush' => [ 'class' => 'mainaero\yii\gtm\component\DataLayerPush' ], ... ]
Usage
In your view file:
<?php use mainaero\yii\gtm\widget\GTM; ...
Render a <script>
snippet:
<?= GTM::widget(); ?>
which renders:
<!-- 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:
<!-- 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:
Yii::$app->gtmDataLayerPush->add(['event' => 'myEvent', 'eventCategory' => 'myCategory']);
Somewhere in your view or layout file output it with:
<?= 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.