Adobe DTM - 使用GTM dataLayer

时间:2016-03-04 15:06:59

标签: javascript google-tag-manager adobe-analytics web-analytics data-layers

更新:YannisG关于此主题的一篇有趣文章:http://digitalinsightsworld.com/tag-manager/push-datalayer-values-adobe-sitecatalyst-variables-via-dtm/

有一个安装了Google跟踪代码管理器和dataLayer的网站。我想尝试使用相同的dataLayer的另一个标签管理解决方案(Adobe DTM),因此不需要进一步的开发。

dataLayer是一个对象列表。其中一个对象包含“pageview”属性,我想在所有网页浏览中将其发送到Adobe Analytics。

Object {
event: "virtual PV",
pageview: "/page1",
__proto__: Object}

假设我想从dataLayer的某个对象获取pageview属性并将其放入Adobe Analytics“prop1”变量中。

我在Adobe DTM中做了什么:

  1. 将自定义数据元素“dataLayer - pageview - page1”设置为自定义脚本(该脚本返回一个字符串“/ page1”,该字符串应作为“prop1”添加到Adobe Analytics:

    var result = dataLayer.filter(function( obj ) {
        return obj.event == 'virtual PV';
        });
    return result[0].pageview
    
  2. 设置页面加载规则(在DOM就绪时启动)并将“prop1”变量设置为:%dataLayer - pageview - page1%。

  3. prop1 =“%dataLayer - pageview - page1%”

    理论上这个设置应该有效,每个页面视图应该有一个prop1 =“/ page1”,但是在控制台中我看到错误:

    SATELLITE: TypeError - Cannot read property 'pageview' of undefined
    

    可能是什么原因?当我在控制台中键入数据元素代码时 - 它正确获取了网页浏览量值。也许GTM的dataLayer对象没有准备好,当DTM想要从中提取数据时,我应该推迟DTM - 但是如何?

1 个答案:

答案 0 :(得分:2)

使用数据层助手

为此目的而设计的精彩图书馆:https://github.com/google/data-layer-helper

它与GTM dataLayer非常相似,但你可以自己设计它。

完全异步!

如何使用?

实施此库:

(function(){/*
 jQuery v1.9.1 (c) 2005, 2012
 jQuery Foundation, Inc. jquery.org/license.
*/
var g=/\[object (Boolean|Number|String|Function|Array|Date|RegExp)\]/;function h(a){return null==a?String(a):(a=g.exec(Object.prototype.toString.call(Object(a))))?a[1].toLowerCase():"object"}function k(a,b){return Object.prototype.hasOwnProperty.call(Object(a),b)}function m(a){if(!a||"object"!=h(a)||a.nodeType||a==a.window)return!1;try{if(a.constructor&&!k(a,"constructor")&&!k(a.constructor.prototype,"isPrototypeOf"))return!1}catch(b){return!1}for(var c in a);return void 0===c||k(a,c)};/*
 Copyright 2012 Google Inc. All rights reserved. */
function n(a,b,c){this.b=a;this.f=b||function(){};this.d=!1;this.a={};this.c=[];this.e=p(this);r(this,a,!c);var d=a.push,e=this;a.push=function(){var b=[].slice.call(arguments,0),c=d.apply(a,b);r(e,b);return c}}window.DataLayerHelper=n;n.prototype.get=function(a){var b=this.a;a=a.split(".");for(var c=0;c<a.length;c++){if(void 0===b[a[c]])return;b=b[a[c]]}return b};n.prototype.flatten=function(){this.b.splice(0,this.b.length);this.b[0]={};s(this.a,this.b[0])};
function r(a,b,c){for(a.c.push.apply(a.c,b);!1===a.d&&0<a.c.length;){b=a.c.shift();if("array"==h(b))a:{var d=b,e=a.a;if("string"==h(d[0])){for(var f=d[0].split("."),u=f.pop(),d=d.slice(1),l=0;l<f.length;l++){if(void 0===e[f[l]])break a;e=e[f[l]]}try{e[u].apply(e,d)}catch(v){}}}else if("function"==typeof b)try{b.call(a.e)}catch(w){}else if(m(b))for(var q in b)s(t(q,b[q]),a.a);else continue;c||(a.d=!0,a.f(a.a,b),a.d=!1)}}
function p(a){return{set:function(b,c){s(t(b,c),a.a)},get:function(b){return a.get(b)}}}function t(a,b){for(var c={},d=c,e=a.split("."),f=0;f<e.length-1;f++)d=d[e[f]]={};d[e[e.length-1]]=b;return c}function s(a,b){for(var c in a)if(k(a,c)){var d=a[c];"array"==h(d)?("array"==h(b[c])||(b[c]=[]),s(d,b[c])):m(d)?(m(b[c])||(b[c]={}),s(d,b[c])):b[c]=d}};})();

然后初始化辅助对象。

function listener(message, model) {
  // Message has been pushed. 
  // The helper has merged it onto the model.
  // Now use the message and the updated model to do something.
}
var helper = new DataLayerHelper(dataLayer, listener, true);

消息

每条消息等于dataLayer.push。它是仅在侦听器回调内有效的对象。

模型

模型保持不断更新的所有dataLayer信息的模型。它会在每次侦听器迭代时更新。

模型由消息更新。

您的案例

function listener(message, model) {

   if(message.event == "Virtual PV"){
       s.prop1=model.page;
       s.t();
   }

}
var helper = new DataLayerHelper(dataLayer, listener, true);