templates/product/detail.html.twig line 1

Open in your IDE?
  1. {% extends base_layout() %}
  2. {% if category.oms is not empty and subcategory.oms is not empty and product.oms is not empty %}
  3.     {% if category.combinedCategoryName is not empty %}
  4.         {% set categorieName = category.combinedCategoryName|capitalize %}
  5.     {% else %}
  6.         {% set categorieName = category.oms|capitalize %}
  7.     {% endif %}
  8.     {% set head_title = product.oms ~ ' | ' ~ subcategory.oms ~ ' | ' ~ categorieName %}
  9. {% endif %}
  10. {% if product.extrainfo is not empty %}
  11.     {% set head_description = product.extrainfo|truncate(200, '...') %}
  12. {% endif %}
  13. {% block content %}
  14.     <div class="container">
  15.         <div class="row">
  16.             <div class="col-12 mb-3 pt-5 position-relative">
  17.                 <h3 class="text-primary">{{ subcategory.oms|capitalize }}</h3>
  18.                 <span class="position-absolute top-0 pt-3">
  19.                     <a href="{% if check_websitesetting('product_document', 'document') %}{{ inotherlang('LocalizedDocument', pimcore_website_config('product_document')) }}{% endif %}">{{ 'Aanbod'|trans }}</a>
  20.                     /
  21.                     {% set categoryLink = app_product_grouplink(category) %}
  22.                     <a href="{{ categoryLink }}">
  23.                         {% if category.combinedCategoryName is not empty %}
  24.                             {{ category.combinedCategoryName|capitalize }}
  25.                         {% else %}
  26.                             {{ category.oms|capitalize }}
  27.                         {% endif %}
  28.                     </a>
  29.                     /
  30.                     {% set subcategoryLink = app_product_subgrouplink(category, subcategory) %}
  31.                     <a href="{{ subcategoryLink }}">{{ subcategory.oms|capitalize }}</a>
  32.                     /
  33.                 </span>
  34.             </div>
  35.         </div>
  36.         <div class="row justify-content-between">
  37.             {% if product.getFotos() is defined %}
  38.                 {% if product.getFotos()|length > 0 %}
  39.                     <div class="col-12 col-lg-6 mb-3 mb-lg-0">
  40.                         <img src="{{ product.getFotos().getThumbnail('prod-thumb') }}" class="img-fluid">
  41.                     </div>
  42.                 {% endif %}
  43.             {% endif %}
  44.             {# {% if product.getImages()|length > 0 %} #}
  45.             {# <div class="col-6"> #}
  46.             {# <ul id="lightSlider"> #}
  47.             {# {% if product.getImages() is defined %} #}
  48.             {# <div class="col-md-4 fotoframe" > #}
  49.             {# {% for productImage in product.getImages() %} #}
  50.             {# {% if productImage is defined %} #}
  51.             {# <li data-thumb="{{ productImage.getThumbnail('slideshow-thumb') }}"><img src="{{ productImage.getThumbnail('slideshow-product') }}" alt="{{ product.title }}" class="img-responsive"></li> #}
  52.             {# {% endif %} #}
  53.             {# {% endfor %} #}
  54.             {# </div> #}
  55.             {# {% endif %} #}
  56.             {# </ul> #}
  57.             {# </div> #}
  58.             {# {% endif %} #}
  59.             <div class="col-12 col-lg-6 ps-lg-5">
  60.                 <div class="row mb-3">
  61.                     <div class="col-12">
  62.                         <h2 class="text-primary">{{ product.oms }}</h2>
  63.                         <i class="text-black text-opacity-50">{{ 'Code:'|trans }} {{ product.code }}</i><br>
  64.                         {% if product.merk is not empty %}
  65.                             <span>{{ 'Merk:'|trans }} {{ product.merk }}</span><br>
  66.                         {% endif %}
  67.                         <div class="mt-3">
  68.                         {{ product.extrainfo|raw }}</div>
  69.                     </div>
  70.                 </div>
  71.                 <div class="row mb-5">
  72.                     <div class="col-12">
  73.                       {#  {% if product.stock <= 0 %}
  74.                             <p><span class="stockrood me-1">
  75.                              <i class="fas fa-xs fa-circle"></i>
  76.                          </span>{{ 'momenteel niet voorradig'|trans|raw }}</p>
  77.                         {% elseif product.stock <= product.aantalVerkochtLaatsteMaand %}
  78.                             <span class="stockoranje ms-1">
  79.                                     <i class="fas fa-xs  fa-circle"></i>
  80.                                 {{ 'beperkte voorraad'|trans|raw }}</span>
  81.                         {% elseif product.stock > product.aantalVerkochtLaatsteMaand %}
  82.                             <span class="stockgroen ms-1">
  83.                                     <i class="fas fa-xs fa-circle"></i>
  84.                                 {{ 'voldoende vooraad'|trans|raw }}</span>
  85.                         {% endif %}#}
  86.                         {% if product.productAPE %}
  87.                             {% set productUnit = product.APEeenheid  %}
  88.                         {% else %}
  89.                             {% set productUnit = 'stuk(s)'  %}
  90.                         {% endif %}
  91.                         {% if product.stock <= 0 %}
  92.                             <p><span class="stockrood me-1">
  93.                              <i class="fas fa-xs fa-circle"></i>
  94.                          </span>{{ 'momenteel niet voorradig *'|trans|raw }}</p>
  95.                         {% elseif product.stock <= product.aantalVerkochtLaatsteMaand %}
  96.                             <span class="stockoranje ms-1">
  97.                                     <i class="fas fa-xs  fa-circle"></i>
  98.                                 {{ 'Beperkt op voorraad, er zijn momenteel '|trans|raw }} {{  product.stock }} {{ productUnit |trans|raw }} {{' in voorraad. *'|trans|raw }}</span>
  99.                         {% elseif product.stock > product.aantalVerkochtLaatsteMaand %}
  100.                             <span class="stockgroen ms-1">
  101.                                     <i class="fas fa-xs fa-circle"></i>
  102.                                 {{ 'Voldoende voorraad, er zijn momenteel '|trans|raw }} {{  product.stock }} {{ productUnit |trans|raw }} {{' in voorraad. *'|trans|raw }}</span>
  103.                         {% endif %}
  104.                     </div>
  105.                 </div>
  106.                 <script>
  107.                     $(document).ready(function(){
  108.                         $("#myModal").modal('show');
  109.                     });
  110.                 </script>
  111.                 {% if product.stock <= 0 %}
  112.                     <div id="myModal" class="modal fade" tabindex="-1">
  113.                         <div class="modal-dialog">
  114.                             <div class="modal-content">
  115.                                 <div class="modal-header">
  116.                                     <h5 class="modal-title">{{ 'Momenteel niet op voorraad'|trans }}</h5>
  117.                                     <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  118.                                 </div>
  119.                                 <div class="modal-body">
  120.                                     <p>{{ 'Opgepast, dit product is momenteel niet op voorraad en levering kan langer duren dan gebruikelijk.'|trans }}</p>
  121.                                 </div>
  122.                                 <div class="modal-footer">
  123.                                     <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{{ 'Oke'|trans }}</button>
  124.                                 </div>
  125.                             </div>
  126.                         </div>
  127.                     </div>
  128.                 {% endif %}
  129.                 <div class="row">
  130.                     <div class="col-12">
  131.                             {% if product.promoprijs is defined %}
  132.                                 <div class="p-3 bg-light-grey bg-opacity-50 w-75 mb-3">
  133.                                 {% if product.promoprijs > 0 %}
  134.                                     {% if product.productAPE %}
  135.                                         {% set APE = product.prijs * product.AantalPerEenheid %}
  136.                                         {% set APEpromo = product.promoprijs * product.AantalPerEenheid %}
  137.                                         <span class="fs-7 text-decoration-underline">   {{ 'per'|trans }} € {{ product.promoprijs|number_format(2, ',', ' ') }} {{ product.APEeenheid  | trans}} </span>
  138.                                         <br>
  139.                                         <strike>€ {{ APE|number_format(2, ',', ' ') }} | {{ product.AantalPerEenheid }} {{ product.APEeenheid  | trans}}</strike><br>
  140.                                         <span class="fw-bold fs-4 text-red">€ {{ APEpromo|number_format(2, ',', ' ') }}  {{ '/'|trans }} {{ product.AantalPerEenheid }} {{ product.APEeenheid | trans}}</span>
  141.                                     {% else %}
  142.                                         <strike>€ {{ product.prijs|number_format(2, ',', ' ') }}</strike><br>
  143.                                         <span class="fw-bold text-red">€ {{ product.promoprijs|number_format(2, ',', ' ') }}</span>
  144.                                     {% endif %}
  145.                                 {% else %}
  146.                                     {% if product.productAPE %}
  147.                                     <span class="fs-7 fw-bold py-5 text-decoration-underline">
  148.                                        € {{ product.prijs|number_format(2, ',', ' ') }}   {{ 'per'|trans }} {{ product.APEeenheid  | trans }}
  149.                                     </span>
  150.                                 <br>
  151.                                     <div class="mt-3 col-6">
  152.                                         <label for="length">{{ orderByQuantity |trans }}</label>
  153.                                         <input class="form-control col-3" type="number" id="length" name="length" step="0.1" required>
  154.                                     </div>
  155.                                     <div class="col-6 d-none">
  156.                                         <label for="width">{{ 'Breedte in m:'|trans }}</label>
  157.                                         <input class="form-control col-3" type="number" id="width" name="width" step="0.1"
  158.                                                value="{{ product.AantalPerEenheid|number_format(2, '.', ' ') }}" readonly>
  159.                                     </div>
  160.                                     <div class="row g-3 align-items-start mt-1">
  161.                                         <div class="col-auto">
  162.                                             <label for="product_amount" class="col-form-label">{{ ('Aantal ' ~  product.APEeenheid ~  ':') |trans }}</label>
  163.                                         </div>
  164.                                         <div class="col-auto">
  165.                                             <input type="number" id="product_amount" min="1" max="999" value="" readonly class="form-control"/>
  166.                                         </div>
  167.                                         <div class="col-auto pt-1">
  168.             <span class="fs-7 fw-bold" id="amount_price">
  169.                 € {{ product.prijs|number_format(2, ',', ' ') }}
  170.             </span>
  171.                                         </div>
  172.                                         <div class="col-auto">
  173.                                             <button id="add_to_cart" class="btn btn-secondary">
  174.                                                 <i class="fas fa-cart-plus"></i>
  175.                                             </button>
  176.                                         </div>
  177.                                     </div>
  178.                                     <script>
  179.                                         document.addEventListener('DOMContentLoaded', () => {
  180.                                             const lengthInput = document.getElementById('length');
  181.                                             const widthInput = document.getElementById('width');
  182.                                             const totalInput = document.getElementById('product_amount');
  183.                                             const amountPriceSpan = document.getElementById('amount_price');
  184.                                             const pricePerSquareMeter = {{ product.prijs|number_format(2, '.', '') }};
  185.                                             const updateTotal = () => {
  186.                                                 const length = parseFloat(lengthInput.value);
  187.                                                 const width = parseFloat(widthInput.value);
  188.                                                 if (!isNaN(length) && !isNaN(width)) {
  189.                                                     const totalArea = length * width; // Bereken het aantal m²
  190.                                                     const roundedArea = Math.ceil(totalArea); // Rond naar boven af
  191.                                                     const totalPrice = roundedArea * pricePerSquareMeter; // Bereken de totale prijsvolgens afgerond opp
  192.                                                     totalInput.value = roundedArea; // Update aantal m²
  193.                                                     amountPriceSpan.textContent = `€ ${totalPrice.toFixed(2).replace('.', ',')}`; // Update de prijs
  194.                                                 } else {
  195.                                                     totalInput.value = '';
  196.                                                     amountPriceSpan.textContent = `€ ${pricePerSquareMeter.toFixed(2).replace('.', ',')}`;
  197.                                                 }
  198.                                             };
  199.                                             lengthInput.addEventListener('input', updateTotal);
  200.                                             // Zorg ervoor dat de prijs bij het laden correct wordt weergegeven
  201.                                             updateTotal();
  202.                                         });
  203.                                     </script>
  204.                                     {% else %}
  205.                                         <span class="fw-bold fs-4">€ {{ product.prijs|number_format(2, ',', ' ') }}</span>
  206.                                     <div class="row g-3 align-items-start mt-1">
  207.                                         <div class="col-auto">
  208.                                             <label for="product_amount" class="col-form-label">{{ 'Aantal:'|trans }}</label>
  209.                                         </div>
  210.                                         <div class="col-auto">
  211.                                             <input type="number" id="product_amount" min="1" max="999" value="1" class="form-control"/></div>
  212.                                         <div class="col-auto">
  213.                                             <button id="add_to_cart" class="btn btn-secondary"><i class="fas fa-cart-plus"></i></button>
  214.                                         </div>
  215.                                     </div>
  216.                                     {% endif %}
  217.                                 {% endif %}
  218.                                 </div>
  219.                                 <input type="hidden" id="product_id" value="{{ product.id }}">
  220.                                 <span id="product_added_confirmation" class="w-100" style="display: none;"><i class="fas fa-check"></i> {{ "Toegevoegd aan winkelwagen." | trans }}</span>
  221.                             {% endif %}
  222.                     </div>
  223.                 </div>
  224.             </div>
  225.         </div>
  226.     </div>
  227.     <div class="row my-5">
  228.         <div class="col-12 text-center">
  229.             {% set subcategoryLink = app_product_subgrouplink(category, subcategory) %}
  230.             <a class="btn btn-outline-secondary" href="{{ subcategoryLink }}">
  231.                     <span class="material-symbols-outlined inline-icon">
  232. chevron_left
  233. </span> {{ 'Terug naar'|trans }} {{ subcategory.oms }}
  234.             </a>
  235.         </div>
  236.     </div>
  237.     {% if shortLink is defined %}
  238.         {% if shortLink == true %}
  239.             <script>
  240.                 $('#add_to_cart').click((e)=>{
  241.                     e.preventDefault();
  242.                     let productId = $('#product_id').val();
  243.                     let amount = $('#product_amount').val();
  244.                     let fetchUrl = `/${jsLanguage}/cart/update`;
  245.                     let productAddedCheckMark = $('#product_added_confirmation');
  246.                     productAddedCheckMark.show();
  247.                     productAddedCheckMark.fadeOut(3000);
  248.                     $.ajax({
  249.                         url: fetchUrl,
  250.                         cache: false,
  251.                         type:'GET',
  252.                         data: {
  253.                             productId: productId,
  254.                             amount: amount,
  255.                             action: 'add'
  256.                         },
  257.                         success: (data)=>{
  258.                             if (data) {
  259.                                 $('#amount_in_cart').html(data.cartCount);
  260.                             }
  261.                         },
  262.                         error: function (jqXHR, textStatus, errorThrown) {
  263.                             let errorObj = JSON.parse(jqXHR.responseText);
  264.                         },
  265.                         complete: function () {
  266.                         }
  267.                     })
  268.                 })
  269.             </script>
  270.         {% endif %}
  271.     {% endif %}
  272. {% endblock %}