2017-02-21 9 views
0

データレイヤーにカスタムJavaScriptを書き込むためのヘルプが必要です。私は名前を取得しようとしています。Googleタグマネージャの可変データレイヤーカスタムjavascriptが定義されていません

promotionImpression:

{ 
event: 'promoImp', 
ecommerce: { 
    promoView: { 
     promotions: { 
      142398:{ 
       id: '142398', 
       name: 'sadr' 
      }, 
      142312:{ 
       id: '142312', 
       name: 'qas' 
      } 
     } 
    } 
} },gtm.uniqueEventId: 470 

私はこのJavaScriptを試してみましたが、それはundefinedを返します。私はこれをローカルで試してみると、名前を完全に返します。

function() { 
var names = []; 
for (promotion in ecommerce.promoView.promotions) { 
    names.push(ecommerce.promoView.promotions[promotion].name); 
} 
return names.join(); } 

誰でもこれを助けることができます。前もって感謝します。

+0

このカスタムJS変数はいつ呼び出すのですか?それは "promoImp"イベントにあるはずです。 – nyuen

答えて

3

私はあなたのカスタム関数内から直接dataLayerにアクセスしようとしているようです。 dataLayerは(JSON)オブジェクトではありませんが、という配列のオブジェクトです。ですから、ドット表記を経由してeコマースのデータを扱うことができない、あなたはdataLayerの配列要素のインデックスを与える必要があるだろう:

dataLayer[index].ecommerce.promoView.promotions 

ここで、「インデックスが」eコマースデータが含まれているdataLayer要素のインデックスです。今や明らかにそれはうまくいくでしょう(特にインデックスがdataLayerにどのような順序でプッシュしたかによってインデックスが常に同じになるわけではないため)、より良い方法があります。それに

内部データモデルの(不可避Simo Ahava has written a lot about this)GTMは、単一のオブジェクトにdataLayer要素を平坦化します。代わりにdataLayer型の変数を使用して、直接このデータモデルにアクセスしません:

enter image description here

は、今すぐあなたのカスタム関数であることを使用します。

適切にテストされていない
function() { 
var names = []; 
for (promotion in promotions) { 
    names.push(promotions[promotion].name); 
} 
return names.join(); 
} 

、その機能のかもしれません微調整が必​​要ですが、基本的にそれは行く方法です。

+0

function(){ return Object.keys({{Promotions}})。スプライス(0,3); }このコードは私の問題を解決しました。お手伝いありがとう – riyaz

関連する問題