themes/BootstrapChildTheme/SyliusShopBundle/views/Product/Index/_main.html.twig line 1

Open in your IDE?
  1. {% import '@SyliusShop/Common/Macro/messages.html.twig' as messages %}
  2. {% import '@SyliusShop/Common/Macro/pagination.html.twig' as pagination %}
  3. {% import "@SyliusShop/Common/Macro/money.html.twig" as money %}
  4. {# Povodny search nad kategoriou
  5. <div class="mb-3">
  6.     {{ sylius_template_event('sylius.shop.product.index.search', _context) }}
  7.     <div class="clearfix"></div>
  8. </div>
  9. #}
  10. {{ sylius_template_event('sylius.shop.product.index.before_list', {'products': resources.data}) }}
  11. {{ sylius_template_event('app.shop.category_view', _context) }}
  12. {% if resources.data|length > 0 %}
  13.     <script>
  14.         (function () {
  15.             const rawItems = [
  16.                 {% for product in resources.data %}
  17.                 {
  18.                     {# json_encode pridá úvodzovky a ošetrí pomlčky v kóde #}
  19.                     item_id: {{ product.code|json_encode|raw }},
  20.                     item_name: {{ product.name|json_encode|raw }},
  21.                     item_category: {{ product.mainTaxon ? product.mainTaxon.name|json_encode|raw : (taxon.name|json_encode|raw) }},
  22.                     {# Odstránená čiarka za cenou kvôli čistote objektu #}
  23.                     price: {{ product.variants.empty ? 0 : (product.variants.first.channelPricings.first.price / 100)|default(0) }},
  24.                     quantity: 1
  25.                 }{{ not loop.last ? ',' : '' }}
  26.                 {% endfor %}
  27.             ];
  28.             // Mapovanie položiek do správneho formátu pre GA4
  29.             const formattedItems = rawItems.map((item, i) => {
  30.                 return {
  31.                     ...item,
  32.                     item_list_id: {{ taxon.code|json_encode|raw }},
  33.                     item_list_name: {{ taxon.name|json_encode|raw }},
  34.                     index: i + 1 // GA4 indexy sa zvyčajne číslujú od 1
  35.                 };
  36.             });
  37.             pushEcommerceEvent("view_item_list", {
  38.                 item_list_id: {{ taxon.code|json_encode|raw }},
  39.                 item_list_name: {{ taxon.name|json_encode|raw }},
  40.                 items: formattedItems
  41.             });
  42.             // Nahraď ten nefunkčný querySelector týmto:
  43.             document.addEventListener('click', function (e) {
  44.                 // Toto nájde najbližšieho rodiča s triedou .js-select-product,
  45.                 // aj keď klikneš na obrázok alebo názov vnútri
  46.                 const el = e.target.closest('.js-select-product');
  47.                 if (el) {
  48.                     const payload = {
  49.                         item_list_id: el.dataset.itemListId || '',
  50.                         item_list_name: el.dataset.itemListName || '',
  51.                         items: [
  52.                             {
  53.                                 item_id: el.dataset.itemId || '',
  54.                                 item_name: el.dataset.itemName || '',
  55.                                 item_category: el.dataset.itemCategory || '',
  56.                                 item_variant: el.dataset.itemVariant || '',
  57.                                 price: parseFloat(el.dataset.price || '0'),
  58.                                 quantity: parseInt(el.dataset.quantity || '1', 10),
  59.                                 index: parseInt(el.dataset.index || '0', 10)
  60.                             }
  61.                         ]
  62.                     };
  63.                     window.dataLayer.push({ ecommerce: null }); // Vynulovanie pre GA4
  64.                     window.dataLayer.push({
  65.                         event: 'select_item',
  66.                         ecommerce: payload
  67.                     });
  68.                     console.log('🖱️ GA4: select_item (Delegované)', payload);
  69.                 }
  70.             });
  71.         })();
  72.     </script>
  73.     <div class="product-list-wrap" {{ sylius_test_html_attribute('products') }}>
  74.         <div class="product-list">
  75.             <div class="product-list-content row row-cols-2 row-cols-sm-3 row-cols-md-2 row-cols-lg-3 row-cols-xxl-4 row-cols-xxxxl-6">
  76.                 {% for product in resources.data %}
  77.                     {% include '@SyliusShop/Product/_box.html.twig' %}
  78.                 {% endfor %}
  79.             </div>
  80.         </div>
  81.     </div>
  82.     {{ sylius_template_event('sylius.shop.product.index.before_pagination', {'products': resources.data}) }}
  83.     <div class="d-flex justify-content-end mt-3">
  84.         {{ pagination.simple(resources.data) }}
  85.     </div>
  86. {% else %}
  87.     {{ messages.info('sylius.ui.no_results_to_display') }}
  88. {% endif %}