custom/plugins/KmAnalytics/src/Resources/views/storefront/component/analytics.html.twig line 1

Open in your IDE?
  1. {% sw_extends '@Storefront/storefront/component/analytics.html.twig' %}
  2. {% block component_head_analytics %}
  3.     {{ parent() }}
  4.     {#
  5.         <script>console.log({{ context|json_encode|raw }});</script> 
  6.         <script>console.log({{ page|json_encode|raw }});</script> 
  7.     #}
  8.     
  9.      
  10.     <script>
  11.         const statsCookiesAccepted = document.cookie.includes('cookie-preference=1');
  12.         const matomoSettingExists = document.cookie.includes('matomo-enabled=');
  13.         if (!statsCookiesAccepted || (statsCookiesAccepted && !matomoSettingExists)) {
  14.             document.cookie = "matomo-enabled=1; path=/; max-age=2592000";
  15.         }
  16.         (() => {
  17.             const matomoEnabled = document.cookie.split(';').some((item) => item.trim().includes('matomo-enabled=1'));
  18.             const fbpEnabled = document.cookie.split(';').some((item) => item.trim().includes('fbp-enabled=1'));
  19.             const pinterestEnabled = document.cookie.split(';').some((item) => item.trim().includes('pinterest-enabled=1'));
  20.             if(matomoEnabled == true){
  21.                 enableMatomo();
  22.             }
  23.             
  24.             if(fbpEnabled == true){
  25.                 enableFbp();
  26.             } 
  27.             if(pinterestEnabled == true){
  28.                 enablePinterest();
  29.             } 
  30.             
  31.         })();
  32.         // Matomo
  33.         function enableMatomo(){
  34.             // return;
  35.             console.log('Matomo is aktiv');
  36.             var simpleABScript = document.createElement('script');
  37.             simpleABScript.type = 'text/javascript';
  38.             simpleABScript.src = '//matomo.kartenmachen.de/plugins/SimpleABTesting/public/kartenmachen.de.js?v={{ "now"|date("Y-m-d-H") }}';
  39.             document.head.prepend(simpleABScript);
  40.             var _paq = window._paq = window._paq || [];
  41.     
  42.             {% if page.product is defined %}
  43.                 // Product view tracking
  44.                 _paq.push(['setEcommerceView',
  45.                     "{{ page.product.productNumber }}",
  46.                     "{{ page.product.translated.name }}",
  47.                     "{{ page.product.manufacturer.translated.name }}",
  48.                     {{ page.product.calculatedPrice.unitPrice }}
  49.                 ]);
  50.                 _paq.push(['trackPageView']);
  51.             {% elseif page.cmsPage is defined and page.cmsPage.type == 'product_list' %}
  52.                 // Category view tracking
  53.                 _paq.push(['setEcommerceView',
  54.                     false,
  55.                     false,
  56.                     "{{ page.header.navigation.active.translated.name }}"
  57.                 ]);
  58.                 _paq.push(['trackPageView']);
  59.             {% elseif page.cart is defined %}
  60.                 // Cart update tracking
  61.                 {% for lineItem in page.cart.lineItems %}
  62.                     _paq.push(['addEcommerceItem',
  63.                         "{{ lineItem.payload.productNumber }}",
  64.                         "{{ lineItem.label }}",
  65.                         "{{ lineItem.payload.productNumber|slice(0, 3) }}",
  66.                         {{ lineItem.price.unitPrice }},
  67.                         {{ lineItem.quantity }}
  68.                     ]);
  69.                 {% endfor %}
  70.                 _paq.push(['trackEcommerceCartUpdate', {{ page.cart.price.totalPrice }}]);
  71.             {% elseif page.order is defined %}
  72.                 // Order tracking
  73.                 {% for lineItem in page.order.lineItems %}
  74.                     _paq.push(['addEcommerceItem',
  75.                         "{{ lineItem.payload.productNumber }}",
  76.                         "{{ lineItem.label }}",
  77.                         "{{ lineItem.payload.productNumber|slice(0, 3) }}",
  78.                         {{ lineItem.price.unitPrice }},
  79.                         {{ lineItem.quantity }}
  80.                     ]);
  81.                 {% endfor %}
  82.                 _paq.push(['trackEcommerceOrder',
  83.                     "{{ page.order.orderNumber }}",
  84.                     {{ page.order.amountTotal }},
  85.                     {{ page.order.amountNet }},
  86.                     {{ page.order.amountTotal - page.order.amountNet }},
  87.                     {{ page.order.shippingTotal }},
  88.                     false
  89.                 ]);
  90.             {% else %}
  91.                 // Default page view tracking for other pages
  92.                 _paq.push(['trackPageView']);
  93.             {% endif %}
  94.             _paq.push(['enableLinkTracking']);
  95.             (function() {
  96.                 var u="//matomo.kartenmachen.de/";
  97.                 _paq.push(['setTrackerUrl', u+'matomo.php']);
  98.                 _paq.push(['setSiteId', '2']);
  99.                 var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
  100.                 g.async=true; g.src=u+'matomo.js';
  101.                 document.head.appendChild(g); 
  102.                 // s.parentNode.insertBefore(g,s);
  103.             })();
  104.         }
  105.         // Facebook Pixel
  106.         function enableFbp(){
  107.             // return;
  108.             console.log('Facebook Pixel ist aktiv');
  109.             !function(f,b,e,v,n,t,s)
  110.             {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
  111.             n.callMethod.apply(n,arguments):n.queue.push(arguments)};
  112.             if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
  113.             n.queue=[];t=b.createElement(e);t.async=!0;
  114.             t.src=v;s=b.getElementsByTagName(e)[0];
  115.             s.parentNode.insertBefore(t,s)}(window, document,'script',
  116.             'https://connect.facebook.net/en_US/fbevents.js');
  117.             fbq('init', '565664260238957');
  118.             {% if page.product is defined and page.product %}
  119.                 fbq('track', 'ViewContent', {
  120.                     content_name: '{{ page.product.translated.name }}',
  121.                     content_ids: ['{{ page.product.productNumber }}'],
  122.                     content_type: 'product',
  123.                     value: {{ page.product.calculatedPrice.unitPrice|round(2) }},
  124.                     currency: '{{ page.header.activeCurrency.isoCode }}'
  125.                 });
  126.             {% elseif page.cart is defined and page.cart.lineItems|length > 0 %}
  127.                 fbq('track', 'AddToCart', {
  128.                     content_ids: [{% for lineItem in page.cart.lineItems %}
  129.                         "{{ lineItem.payload.productNumber }}"{% if not loop.last %},{% endif %}
  130.                     {% endfor %}],
  131.                     content_type: 'product',
  132.                     value: {{ page.cart.price.totalPrice|round(2) }},
  133.                     currency: '{{ page.header.activeCurrency.isoCode }}'
  134.                 });
  135.             {% elseif page.isCheckout is defined and page.isCheckout %}
  136.                 fbq('track', 'InitiateCheckout', {
  137.                     content_ids: [{% for lineItem in page.cart.lineItems %}
  138.                         "{{ lineItem.payload.productNumber }}"{% if not loop.last %},{% endif %}
  139.                     {% endfor %}],
  140.                     content_type: 'product',
  141.                     value: {{ page.cart.price.totalPrice|round(2) }},
  142.                     num_items: {{ page.cart.lineItems|length }},
  143.                     currency: '{{ page.header.activeCurrency.isoCode }}'
  144.                 });
  145.             {% elseif page.order is defined and page.order %}
  146.                 fbq('track', 'Purchase', {
  147.                     content_ids: [{% for lineItem in page.order.lineItems %}
  148.                         "{{ lineItem.payload.productNumber }}"{% if not loop.last %},{% endif %}
  149.                     {% endfor %}],
  150.                     content_type: 'product',
  151.                     value: {{ page.order.amountTotal|round(2) }},
  152.                     num_items: {{ page.order.lineItems|length }},
  153.                     currency: '{{ page.header.activeCurrency.isoCode }}'
  154.                 });
  155.             {% else %}
  156.                 fbq('track', 'PageView');
  157.             {% endif %}
  158.         }
  159.         // Pinterest Tag
  160.         function enablePinterest(){
  161.             console.log('Pinterest Tag ist aktiv');
  162.             !function(e){if(!window.pintrk){window.pintrk = function () {
  163.             window.pintrk.queue.push(Array.prototype.slice.call(arguments))};var
  164.             n=window.pintrk;n.queue=[],n.version="3.0";var
  165.             t=document.createElement("script");t.async=!0,t.src=e;var
  166.             r=document.getElementsByTagName("script")[0];
  167.             r.parentNode.insertBefore(t,r)}}("https://s.pinimg.com/ct/core.js");
  168.             
  169.             {% if context.customer %}
  170.                 pintrk('load', '2614386789046', {em: '{{ context.customer.email|lower|sha256 }}'});
  171.             {% else %}
  172.                 pintrk('load', '2614386789046', {em: ''});
  173.             {% endif %}
  174.             pintrk('page');
  175.             {% if page.product is defined and page.product %}
  176.                 pintrk('track', 'pagevisit', {
  177.                     event_id: 'product_view_{{ page.product.productNumber }}',
  178.                     value: {{ page.product.calculatedPrice.unitPrice|round(2) }},
  179.                     currency: '{{ page.header.activeCurrency.isoCode }}',
  180.                     line_items: [
  181.                         {
  182.                             product_id: '{{ page.product.productNumber }}',
  183.                             product_name: '{{ page.product.translated.name }}'
  184.                         }
  185.                     ]
  186.                 });
  187.             {% elseif page.cart is defined and page.cart.lineItems|length > 0 %}
  188.                 pintrk('track', 'addtocart', {
  189.                     event_id: 'cart_update_{{ page.cart.name }}',
  190.                     value: {{ page.cart.price.totalPrice|round(2) }},
  191.                     order_quantity: {{ page.cart.lineItems|length }},
  192.                     currency: '{{ page.header.activeCurrency.isoCode }}',
  193.                     line_items: [
  194.                         {% for lineItem in page.cart.lineItems %}
  195.                         {
  196.                             product_id: '{{ lineItem.payload.productNumber }}',
  197.                             product_name: '{{ lineItem.label }}',
  198.                             product_price: {{ lineItem.price.unitPrice|round(2) }},
  199.                             product_quantity: {{ lineItem.quantity }}
  200.                         }{% if not loop.last %},{% endif %}
  201.                         {% endfor %}
  202.                     ]
  203.                 });
  204.             {% elseif page.order is defined and page.order %}
  205.                 pintrk('track', 'checkout', {
  206.                     event_id: 'order_{{ page.order.orderNumber }}',
  207.                     value: {{ page.order.amountTotal|round(2) }},
  208.                     order_quantity: {{ page.order.lineItems|length }},
  209.                     currency: '{{ page.header.activeCurrency.isoCode }}',
  210.                     order_id: '{{ page.order.orderNumber }}',
  211.                     line_items: [
  212.                         {% for lineItem in page.order.lineItems %}
  213.                         {
  214.                             product_id: '{{ lineItem.payload.productNumber }}',
  215.                             product_name: '{{ lineItem.label }}',
  216.                             product_price: {{ lineItem.price.unitPrice|round(2) }},
  217.                             product_quantity: {{ lineItem.quantity }}
  218.                         }{% if not loop.last %},{% endif %}
  219.                         {% endfor %}
  220.                     ]
  221.                 });
  222.             {% elseif page.cmsPage is defined and page.cmsPage.type == 'product_list' %}
  223.                 pintrk('track', 'viewcategory', {
  224.                     event_id: 'category_{{ page.header.navigation.active.id }}',
  225.                     category_name: '{{ page.header.navigation.active.translated.name }}'
  226.                 });
  227.             {% else %}
  228.                 pintrk('track', 'pagevisit', {
  229.                     event_id: 'page_{{ page.header.navigation.active.id ?? "home" }}'
  230.                 });
  231.             {% endif %}
  232.         }
  233.     </script>
  234. {% endblock %}