0

高度な電子商取引分析を設定して注文確認ページから取引データを読み込もうとしています。Googleタグマネージャと先進電子商取引 - 取引商品

これは私にとって利用可能な唯一のオプションであるため、Dom要素からデータをスクレイプしています。

私はtransactionId、transactionTotal、transactionShippingなどのフィールドを読み取ることができますが、transactionProductsは読み取れません。 (私は1つの製品しか読めませんが、複数の製品がある場合はそれ以上はありません)。

私のデータ層は、そのようなカスタムHTMLタグとして追加されました -

<script>  
window.dataLayer = window.dataLayer || [] 
    dataLayer.push({ 
     'transactionId': {{transactionId}}, 
     'transactionAffiliation': 'Company name',  
     'transactionTotal': {{transactionTotal}}, 
     'transactionTax': 0, 
     'transactionShipping': {{transactionShipping}}, 
     'transactionProducts': [{ 
      'sku': {{productCode}}, 
      'name': {{transactionName}}, 
      'category': 'Generic category', 
      'price': {{transactionPrice}}, 
      'quantity': {{transactionQuantity}} 
     }] 
    }); 
</script> 

フィールドはカスタムのJavaScript変数です。

TransactionIdの - - たとえば

function() { 
    var transactionId = document.querySelector([id*='OrderNumberValue']").textContent; 
return transactionId; 
} 

タグは、データ層は、(あなたが見ることができるように、唯一の1トランザクション製品はときに返されるので、のように見える確認ページで解雇されたら注文には2種類の商品があります) -

Window Loaded: 
    {event: 'gtm.load'} 
    transactionId: '1000001', 
    transactionAffiliation: 'Company name', 
    transactionTotal: '10.00', 
    transactionTax: 0, 
    transactionShipping: '0.00', 
    transactionProducts: [ 
    { 
     sku: 'SAMPLE1', 
     name: 'Sample product', 
     category: 'Generic category', 
     price: '5.00', 
     quantity: '1' 
    }] 
} 
{gtm.start: 1474472447660, event: 'gtm.js'} 

本当にありがとうございました。あなたはあなたの製品のためのHTMLが見えますが、基本的にあなたが製品を含む要素にDocument.querySelectorAllを使用して、結果を反復処理したい方法を示していない限り、本当に釈明はありません

おかげ

答えて

0

個々の結果について内部要素から値を選択します。反復ごとに(一時的な)製品オブジェクトに割り当て、トランザクションプロダクトに追加するなど。

var results= document.querySelectorAll('.product'); 

transactionProducts = []; 
for (i = 0; i < results.length; ++i) { 
result = results[i]; 
tmp = {}; 
tmp.price = result.querySelector('.sku').textContent; 
tmp.price = result.querySelector('.price').textContent; 
transactionProducts.push(tmp); 
} 

本当にテストか何か(とnodelistsを反復処理するよりエレガントな方法は確かにあります)が、これはあなたのアイデアを与える必要はありません。

+0

応答ありがとうございました。これは、問題を解決する正しい方向に私を向けるのを助けました。 –

関連する問題