2017-02-21 13 views
0

데이터 레이어에 맞춤 자바 스크립트를 작성하는 데 도움이 필요합니다. 나는 이름을 얻으려고 노력하고있다.Google 태그 관리자 변수 데이터 레이어 맞춤 자바 스크립트 정의되지 않음

promotionImpression는 :

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

나는 그것이 정의되지 않은 반환 자바 스크립트하지만이 시도했다. 내가 로컬로 시도했을 때 이름을 완벽하게 반환합니다.

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) 객체가 아니며 객체의 배열입니다. 그래서 당신은 점 표기법을 통해 전자 상거래 데이터를 처리 할 수없는, 당신은 데이터 영역의 배열 요소의 인덱스를 줄 필요가 것 :

dataLayer[index].ecommerce.promoView.promotions 

는 여기서 "인덱스"는 전자 상거래 데이터가 포함 된 데이터 영역 요소의 인덱스입니다. 이제는 분명히 (특히 인덱스가 데이터 레이어에 어떤 순서로 푸시되었는지에 따라 항상 동일하지 않을 수도 있기 때문에) 더 나은 방법이 있습니다.

GTM은 내부 데이터 모델 (불가 피한 Simo Ahava has written a lot about this)에서 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}}). splice (0, 3); }이 코드는 내 문제를 해결했습니다. 도와 주셔서 감사합니다 – riyaz