{% extends 'front/base.html.twig' %}{% block meta %} {{ parent() }}{% endblock %}{% block stylesheets %} {{ parent() }} <style> .see-more-link { font-size: 0.875rem; color: #222121; border: 1px solid #222121; border-radius: 20px; padding: 6px 12px; transition: all 0.3s ease-in-out; } .see-more-link:hover { background-color: #222121; color: #fff; } </style>{% endblock %}{% block body %}<main class="main pt-4 pb-5" style="background-color: #ffffff; color: #222121;"> {% if sliders %} <div class="container"> <section class="custom-slider-section"> <div class="custom-slider-wrapper"> {% for slider in sliders %} <div class="custom-slide" style="background-image: url('{{ asset(slider.image) }}');"> <div class="slide-content"> {% if slider.title %} <h2 class="slide-title">{{ slider.title }}</h2> {% endif %} {% if slider.description %} <div class="slide-description">{{ slider.description|raw }}</div> {% endif %} </div> {% if slider.description %} <a href="{{ slider.url }}" ></a> {% endif %} </div> {% endfor %} </div> <button class="slider-arrow left">❮</button> <button class="slider-arrow right">❯</button> </section> </div> {% endif %} <div id="app"> <section v-if="categories.length" v-for="(entry, index) in categories" class="pt-5 mb-5 border-top"> <div class="container"> <div class="d-flex justify-content-between align-items-end mb-4 mt-3 flex-wrap gap-3"> <h2 class="section-title d-flex align-items-center mb-0"> <i v-if="entry.category.name.includes('Robe')" class="me-2 bi bi-person-lines-fill"></i> <i v-else-if="entry.category.name.includes('Jean')" class="me-2 bi bi-pants"></i> <i v-else-if="entry.category.name.includes('Veste')" class="me-2 bi bi-journal"></i> <i v-else class="me-2 bi bi-bag"></i> ${ entry.category.name } </h2> <a href="#&" class="see-more-link text-decoration-none d-flex align-items-center fw-medium px-3 py-1 rounded-pill" @click="openCategory(entry.category.id, entry.category.name)"> Voir plus <i class="fi-rs-angle-double-small-right ms-1"></i> </a> </div> <div class="row g-4"> <div class="col-6 col-md-6 col-lg-6" v-for="prod in entry.products.slice(0, 6)" :key="prod.id"> <div class="card h-100 border-0"> <div class="product-img-container" @click="openProduct(prod.id, prod.name)"> <div class="badges-wrapper"> <span v-if="!prod.stock" class="badge badge-stockout">Rupture</span> <span v-if="prod.isNew" class="badge badge-new">Nouveau</span> <span v-if="prod.promo && prod.promo.isValid" class="badge badge-promo"> ${ prod.promo.discountType === 'amount' ? '-' + prod.promo.discountValue.toFixed(3) + ' TND' : '-' + prod.promo.discountValue + '%' } </span> </div> <img :src="'images/300-400/' + prod.image" :alt="prod.name" class="img-fluid product-img-fixed"> </div> <div class="card-body p-2 d-flex flex-column"> <h6 class="card-title"> <a href="#&" class="text-decoration-none" @click="openProduct(prod.id, prod.name)"> ${ prod.name } </a> </h6> <div class="product-price mb-2"> <span v-if="!prod.promo || (prod.promo && !prod.promo.isValid)"> ${ prod.priceTTC.toFixed(3) } TND </span> <span v-else> <strong class="old-price"> ${ prod.promo.discountType === 'amount' ? (prod.priceTTC - prod.promo.discountValue).toFixed(3) : (prod.priceTTC - (prod.priceTTC * prod.promo.discountValue / 100)).toFixed(3) } TND </strong> <del class="ms-1">${ prod.priceTTC.toFixed(3) } TND</del> </span> </div> <button class="btn btn-sm mt-auto" @click="getProduit(prod.id)" :disabled="!prod.stock"> <i class="fi-rs-shopping-bag-add me-1"></i> Ajouter </button> </div> </div> </div> </div> </div> </section> </div> </main>{% endblock %}{% block javascripts %} {{ parent() }} <script src="{{ asset('front/assets/scripts/home/home.js') }}"></script> <script> $(document).ready(function () { $("#preloader-active-loading").hide(); }); document.addEventListener('DOMContentLoaded', function () { const wrapper = document.querySelector('.custom-slider-wrapper'); const slides = document.querySelectorAll('.custom-slide'); const totalSlides = slides.length; let currentIndex = 0; // Définir la largeur dynamique wrapper.style.width = `${100 * totalSlides}%`; slides.forEach(slide => { slide.style.flex = `0 0 ${100 / totalSlides}%`; }); function showSlide(index) { wrapper.style.transform = `translateX(-${index * (100 / totalSlides)}%)`; } document.querySelector('.slider-arrow.left').addEventListener('click', () => { currentIndex = (currentIndex - 1 + totalSlides) % totalSlides; showSlide(currentIndex); }); document.querySelector('.slider-arrow.right').addEventListener('click', () => { currentIndex = (currentIndex + 1) % totalSlides; showSlide(currentIndex); }); showSlide(currentIndex); }); </script> {% endblock %}