SilverStripe Data Layer for GTM | OpsBlu Docs

SilverStripe Data Layer for GTM

Build comprehensive data layer for Google Tag Manager using SilverStripe templates and PHP.

Implement structured data layer for advanced tracking with Google Tag Manager.

Base Data Layer

Initialize in Template

File: themes/yourtheme/templates/Page.ss

<script>
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
    'event': 'pageDataReady',
    'pageType': '$ClassName',
    'pageTitle': '$Title.JS',
    'pageURL': '$AbsoluteLink',
    <% if $CurrentMember %>
    'userStatus': 'logged_in',
    'userId': '$CurrentMember.ID',
    'userRole': '$CurrentMember.ClassName',
    <% else %>
    'userStatus': 'guest',
    <% end_if %>
});
</script>

Content-Specific Data Layers

Blog Posts

File: themes/yourtheme/templates/Layout/BlogPost.ss

<script>
window.dataLayer.push({
    'event': 'contentView',
    'contentType': 'blog_post',
    'contentId': '$ID',
    'contentTitle': '$Title.JS',
    'contentCategory': '$Category.Title.JS',
    'contentAuthor': '$Author.Name.JS',
    'publishDate': '$PublishDate.Nice'
});
</script>

Form Data Layer Events

File: app/src/PageController.php

public function doSubmitContact($data, $form)
{
    Requirements::customScript(<<<JS
if (window.dataLayer) {
    window.dataLayer.push({
        'event': 'formSubmission',
        'form': {
            'name': 'contact',
            'id': '{$form->FormName()}',
            'fields': {
                'name': '{$data['Name']}',
                'email': '{$data['Email']}'
            }
        }
    });
}
JS
    );

    return $this->redirectBack();
}

Using Data Layer Variables in GTM

Create variables in GTM:

  • Variable Type: Data Layer Variable
  • Variable Name: pageType, contentId, etc.

Next Steps


Additional Resources