Advertisement
NonplayerCharacter

JS | GA4 ecommerce example lite

Nov 22nd, 2022 (edited)
1,333
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <!DOCTYPE html>
  2. <head>
  3.   <meta charset="utf-8" />
  4.   <title>Title</title>
  5.  
  6. <script>
  7. dataLayer = window.dataLayer || [];
  8. dataLayer.push({
  9.   'ecommerce': {
  10.     'currencyCode': 'CAD',
  11.     'impressions': [
  12.      {
  13.        'name': 'Triblend Android T-Shirt',       // Either name or ID is required, I prefer both
  14.        'currency' : 'CAD',
  15.        'id': '12345',
  16.        'price': '15.25',
  17.        'brand': 'Google',
  18.        'category': 'Widgets',
  19.        'variant': 'Gray',
  20.        'list': 'Search Results',
  21.        'position': 1
  22.      },
  23.      {
  24.        'name': 'Donut Friday Scented T-Shirt',
  25.        'currency' : 'CAD',
  26.        'id': '67890',
  27.        'price': '33.75',
  28.        'brand': 'Google',
  29.        'category': 'Spidgets',
  30.        'variant': 'Black',
  31.        'list': 'Search Results',
  32.        'position': 2
  33.      }]
  34.   }
  35. });
  36. (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
  37. new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
  38. j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
  39. 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
  40. })(window,document,'script','dataLayer','GTM-XXX');
  41. </script>
  42.  
  43. </head>
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58. <body>
  59.  
  60. <!-- Google Tag Manager -->
  61. <noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-XXX" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  62.  
  63.   <article>
  64.  
  65.    <header>
  66.     <h1>Site name</h1>
  67.     <h2>Tag line</h2>
  68.   </header>
  69. <dl>
  70.     <dt>Triblend Android T-Shirt</dt>
  71.     <dd>
  72.         <ul>
  73.             <li>Price: $15.55</li>
  74.             <li>Category: Widgets</li>
  75.             <li>ID: 12345</li>
  76.         </ul>
  77.         <button class="add_to_cart" data-item_id="12345">Add to cart</button>
  78.     </dd>
  79.    
  80.     <dt>Donut Friday Scented T-Shirt</dt>
  81.     <dd>
  82.         <ul>
  83.             <li>Price: $33.75</li>
  84.             <li>Category: Spidgets</li>
  85.             <li>ID: 67890</li>
  86.         </ul>
  87.         <button class="add_to_cart" data-item_id="67890">Add to cart</button>  // data-item_id identifies the right data layer list item
  88.     </dd>
  89. </dl>
  90. </article>
  91.  
  92.  
  93.  
  94.  
  95. <script>
  96.     var addTCs = document.querySelectorAll('.add_to_cart');
  97.     var thisItemEcomm = {};
  98.  
  99.     function getMatchingEcommerceObject(x){
  100.         var list = dataLayer[0].ecommerce.impressions; // TODO: use v5 from https://pastebin.com/kbRrkPJJ, because it's not guaranteed to be in dataLayer[0]
  101.         for (var i=0; i<list.length; i++){
  102.             if(list[i].id == x){
  103.                 thisItemEcomm = list[i];
  104.             }
  105.         }  
  106.         return thisItemEcomm;
  107.     }
  108.    
  109.    
  110.     addTCs.forEach(
  111.         function(el){
  112.             el.addEventListener(
  113.                 "mousedown",
  114.                 function(){
  115.                     dataLayer.push({
  116.                         'event' : 'add_to_cart',
  117.                         'ecommerce' : getMatchingEcommerceObject(this.dataset.item_id)
  118.                     });
  119.                 });
  120.     });
  121. </script>
  122.   </body>
  123.  
  124. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement