templates/entreprise/nos_services.html.twig line 1

Open in your IDE?
  1. {% extends 'base.html.twig' %}
    {% block title  %}
    {{ parent() }} | Nos services
    {% endblock title  %}
    
    {% block stylesheets  %}
    {{ parent() }}
    <style>
        .element-services{
            margin: 20px;
        }
    
         .slider-container {
                width: 100%;
                /*max-width: 900px;*/
                position: relative;
                overflow: hidden;
                border-radius: 12px;
                box-shadow: 0 4px 20px rgba(0,0,0,0.1);
            }
    
            .slider {
                display: flex;
                transition: transform 0.3s ease-out;
                cursor: grab;
                padding: 20px 0;
            }
    
            .slider.grabbing {
                cursor: grabbing;
                transition: none;
            }
    
            .slide {
                flex: 0 0 calc(33.333% - 20px);
                margin: 0 10px;
                background: white;
                border-radius: 8px;
                overflow: hidden;
                box-shadow: 0 2px 10px rgba(0,0,0,0.1);
                user-select: none;
            }
    
            .slide img {
                width: 100%;
                height: 200px;
                object-fit: cover;
                display: block;
            }
    
            .slide-content {
                padding: 20px;
            }
    
            .slide-content h3 {
                margin-bottom: 10px;
                color: #333;
            }
    
            .slide-content p {
                color: #666;
                line-height: 1.5;
            }
    
            /* Navigation dots */
            .dots {
                display: flex;
                justify-content: center;
                gap: 10px;
                margin-top: 20px;
                padding-bottom: 20px;
            }
    
            .dot {
                width: 10px;
                height: 10px;
                border-radius: 50%;
                background: #ccc;
                cursor: pointer;
                transition: background 0.3s;
            }
    
            .dot.active {
                background: #333;
            }
    
            /* Navigation arrows */
            .nav-arrow {
                position: absolute;
                top: 50%;
                transform: translateY(-50%);
                width: 40px;
                height: 40px;
                background: white;
                border-radius: 50%;
                display: flex;
                justify-content: center;
                align-items: center;
                cursor: pointer;
                box-shadow: 0 2px 10px rgba(0,0,0,0.2);
                z-index: 10;
                opacity: 0.8;
                transition: opacity 0.3s;
                font-size: 20px;
            }
    
            .nav-arrow:hover {
                opacity: 1;
            }
    
            .nav-arrow.prev {
                left: 10px;
            }
    
            .nav-arrow.next {
                right: 10px;
            }
    
            @media (max-width: 768px) {
                .slide {
                    flex: 0 0 calc(50% - 20px);
                }
                
                .nav-arrow {
                    width: 35px;
                    height: 35px;
                    font-size: 18px;
                }
            }
    
            @media (max-width: 480px) {
                .slide {
                    flex: 0 0 calc(100% - 20px);
                }
            }
    </style>
    
    {% endblock stylesheets  %}
    
    {% block body  %}
        <br/><br/><br/>
        <h3 class="text-center">Nos services</h3>
        <hr/>
        <h4 class="text-center">Des experts pour tous vos besoins !</h4>
        <p class="text-center">
            Une large gamme de services professionnels à domicile pour simplifier votre quotidien
        </p>
        
         <br/>
    
    <div class="container">
        <div class="row">
            <div class="col-md-12">
                <div class="slider-container">
                    <div class="nav-arrow prev">←</div>
                    <div class="nav-arrow next">→</div>
                    
                    <div class="slider" id="slider">
    
                        
                    </div>
                    
                    <div class="dots" id="dots"></div>
                </div>
            </div>
        </div>
    
        <div class="row">
            <div class="col-md-12">
            <br/>
                <h3 class="text-center">les raisons de nous choisir</h3>
                <p class="text-center">HelpPlace votre partenaire de confiance pour tous vos besoins à domicile.</p>
            </div>
        </div>
        <div class="row">
            <div class="col-md-3">
                <div class="assie-card">
                    <div class="assie-card-body">
                        <h3 class="text-center"><i class="bi bi-cash"></i></h3>
                        <p class="text-center"><strong>Inscription gratuite</strong></p>
                        <p class="text-center">
                            Créez votre compte gratuitement, sans engagement et accédez à tous nos services.
                            <br/><br/>
                        </p>
                    </div>
                </div>
            </div>
            
             <div class="col-md-3">
                <div class="assie-card">
                    <div class="assie-card-body">
                        <h3 class="text-center"><i class="bi bi-clock"></i></h3>
                        <p class="text-center"><strong>Service simple, rapide et sécurisé</strong></p>
                        <p class="text-center">
                            Trouvez un prestataire en 2 minutes et réservez directement en ligne en toute sécurité.
                        </p>
                    </div>
                </div>
            </div>
    
            <div class="col-md-3">
                <div class="assie-card">
                    <div class="assie-card-body">
                        <h3 class="text-center"><i class="bi bi-shield-lock"></i></h3>
                        <p class="text-center"><strong>Prestataire vérifié et fiable</strong></p>
                        <p class="text-center">
                            Tous nos professionnels sont soigneusement sélectionnés et vérifiés avec document à l'appui.
                            <br/><br/>
                        </p>
                    </div>
                </div>
            </div>
    
    
            <div class="col-md-3">
                <div class="assie-card">
                    <div class="assie-card-body">
                        <h3 class="text-center"><i class="bi bi-journal-bookmark"></i></h3>
                        <p class="text-center"><strong>Qualité garantie</strong></p>
                        <p class="text-center">
                            Satisfaction client garantie avec notre système d'évaluation et de notation.
                            <br/><br/>
                        </p>
                    </div>
                </div>
            </div>
    
    
        </div>
        <hr/>
        <br/>
        <div class="row">
            <div class="col-md-12">
               <h3 class="text-center"> Comment ça marche ?</h3>
               <p class="text-center">
                Trouvez votre prestataire en 2 minutes
                Simplement, rapidement et en toute sécurité
                </p>
    
            </div>
        </div>
    
        <div class="row">
            <div class="col-md-3">
                <div class="assie-card">
                    <div class="assie-card-body">
                        <h3 class="text-center"><i class="bi bi-1-circle-fill"></i></h3>
                        <h3 class="text-center"><i class="bi bi-search"></i></h3>
                        <p class="text-center"><strong>Recherche</strong></p>
                        <p class="text-center">
                            Décrivez votre besoin et votre localisation en quelques clics.
                             <br/> <br/>
                        </p>
                    </div>
                </div>
            </div>
            
            <div class="col-md-3">
                <div class="assie-card">
                    <div class="assie-card-body">
                        <h3 class="text-center"><i class="bi bi-2-circle-fill"></i></h3>
                        <h3 class="text-center"><i class="bi bi-person-check"></i></h3>
                        <p class="text-center"><strong>Choisissez</strong></p>
                        <p class="text-center">
                            Comparez les profils, avis et tarifs des prestataires disponibles.
                        </p>
                    </div>
                </div>
            </div>
    
            <div class="col-md-3">
                <div class="assie-card">
                    <div class="assie-card-body">
                        <h3 class="text-center"><i class="bi bi-3-circle-fill"></i></h3>
                        <h3 class="text-center"><i class="bi bi-calendar-check"></i></h3>
                        <p class="text-center"><strong>Reservez</strong></p>
                        <p class="text-center">
                            Planifiez votre intervention au moment qui vous convient.
                             <br/> <br/>
                        </p>
                    </div>
                </div>
            </div>
    
             <div class="col-md-3">
                <div class="assie-card">
                    <div class="assie-card-body">
                        <h3 class="text-center"><i class="bi bi-4-circle-fill"></i></h3>
                        <h3 class="text-center"><i class="bi bi-star"></i></h3>
                        <p class="text-center"><strong>Evaluez</strong></p>
                        <p class="text-center">
                            Partagez votre expérience et aidez la communauté.
                            <br/> <br/>
                        </p>
                    </div>
                </div>
                <br/> <br/>
            </div>
            <br/> <br/>
    
        </div>
        </div>
        <span hidden id="slidesData">{{ slidesData }}</span>
    {% endblock body  %}
    
    {% block javascripts  %}
    {{ parent() }}
    
      <script type="text/javascript">
           class SwipeSlider {
                constructor() {
                    
                    this.slider = document.getElementById('slider');
                    this.dotsContainer = document.getElementById('dots');
                    this.prevBtn = document.querySelector('.prev');
                    this.nextBtn = document.querySelector('.next');
                    this.listeCategorie = document.getElementById('slidesData');
    
                    this.slidesData = JSON.parse(this.listeCategorie.innerText);
                    
                    this.currentIndex = 0;
                    this.startX = 0;
                    this.currentX = 0;
                    this.isDragging = false;
                    this.visibleSlides = this.getVisibleSlidesCount();
                    
                    this.init();
                }
                
                getVisibleSlidesCount() {
                    if (window.innerWidth <= 480) return 1;
                    if (window.innerWidth <= 768) return 2;
                    return 3;
                }
                
                init() {
                    this.createSlides();
                    this.createDots();
                    this.updateSliderPosition();
                    this.setupEventListeners();
                    window.addEventListener('resize', () => this.handleResize());
                }
                
                createSlides() {
                    this.slider.innerHTML = this.slidesData.map(slide => `
                        <div class="slide">
                            <img src="${slide.img}" alt="${slide.title}">
                            <div class="slide-content">
                                <h3>${slide.title}</h3>
                            </div>
                        </div>
                    `).join('');
                }
                
                createDots() {
                    const maxIndex = Math.max(0, this.slidesData.length - this.visibleSlides);
                    const dots = [];
                    for (let i = 0; i <= maxIndex; i++) {
                        dots.push(`<div class="dot${i === this.currentIndex ? ' active' : ''}" data-index="${i}"></div>`);
                    }
                    this.dotsContainer.innerHTML = dots.join('');
                    
                    document.querySelectorAll('.dot').forEach(dot => {
                        dot.addEventListener('click', (e) => {
                            const index = parseInt(e.target.dataset.index);
                            this.goToSlide(index);
                        });
                    });
                }
                
                setupEventListeners() {
                    // Mouse events
                    this.slider.addEventListener('mousedown', (e) => this.startDrag(e));
                    window.addEventListener('mousemove', (e) => this.drag(e));
                    window.addEventListener('mouseup', () => this.endDrag());
                    
                    // Touch events
                    this.slider.addEventListener('touchstart', (e) => this.startDrag(e));
                    window.addEventListener('touchmove', (e) => this.drag(e), { passive: false });
                    window.addEventListener('touchend', () => this.endDrag());
                    
                    // Navigation buttons
                    this.prevBtn.addEventListener('click', () => this.prev());
                    this.nextBtn.addEventListener('click', () => this.next());
                    
                    // Prevent context menu on slider
                    this.slider.addEventListener('contextmenu', (e) => e.preventDefault());
                }
                
                startDrag(e) {
                    e.preventDefault();
                    this.isDragging = true;
                    this.startX = e.type === 'mousedown' ? e.pageX : e.touches[0].pageX;
                    this.currentX = this.startX;
                    this.slider.classList.add('grabbing');
                }
                
                drag(e) {
                    if (!this.isDragging) return;
                    e.preventDefault();
                    
                    const currentX = e.type === 'mousemove' ? e.pageX : e.touches[0].pageX;
                    const diff = currentX - this.startX;
                    
                    // Limiter le dépassement
                    const maxDrag = 50; // pixels
                    const boundedDiff = Math.max(-maxDrag, Math.min(maxDrag, diff));
                    
                    this.slider.style.transform = `translateX(calc(-${this.currentIndex * (100 / this.visibleSlides)}% + ${boundedDiff}px))`;
                }
                
                endDrag() {
                    if (!this.isDragging) return;
                    
                    this.slider.classList.remove('grabbing');
                    
                    const diff = this.currentX - this.startX;
                    
                    if (Math.abs(diff) > 50) {
                        if (diff > 0 && this.currentIndex > 0) {
                            this.prev();
                        } else if (diff < 0 && this.currentIndex < this.slidesData.length - this.visibleSlides) {
                            this.next();
                        } else {
                            this.updateSliderPosition();
                        }
                    } else {
                        this.updateSliderPosition();
                    }
                    
                    this.isDragging = false;
                }
                
                updateSliderPosition() {
                    const percentage = -(this.currentIndex * (100 / this.visibleSlides));
                    this.slider.style.transform = `translateX(${percentage}%)`;
                    
                    // Update dots
                    document.querySelectorAll('.dot').forEach((dot, index) => {
                        dot.classList.toggle('active', index === this.currentIndex);
                    });
                }
                
                goToSlide(index) {
                    this.currentIndex = Math.max(0, Math.min(index, this.slidesData.length - this.visibleSlides));
                    this.updateSliderPosition();
                }
                
                prev() {
                    this.goToSlide(this.currentIndex - 1);
                }
                
                next() {
                    this.goToSlide(this.currentIndex + 1);
                }
                
                handleResize() {
                    const newVisibleSlides = this.getVisibleSlidesCount();
                    if (newVisibleSlides !== this.visibleSlides) {
                        this.visibleSlides = newVisibleSlides;
                        this.currentIndex = Math.min(this.currentIndex, this.slidesData.length - this.visibleSlides);
                        this.createDots();
                        this.updateSliderPosition();
                    }
                }
            }
            
            // Initialiser le slider
            document.addEventListener('DOMContentLoaded', () => {
                new SwipeSlider();
            });
        </script>
    {% endblock javascripts  %}