{# templates/croisiere/show.html.twig #}{% extends 'base.html.twig' %}{% block title %}O’Croisière - {{offer.title}} | O Tropik – Agence de voyage en Guadeloupe{% endblock %}{% block seo %} <meta name="description" content="{{offer.description}}" > <meta property="og:title" content="{{offer.metaTitle}}" /> <meta property="og:type" content="Website" /> <meta property="og:description" content="{{offer.metaDescription}}" /> <meta property="og:url" content="{{absolute_url( app.request.uri)}}" /> <meta property="og:image" content="{#{asset('img/asset/cardimg-fb.jpg')}#}" /> <meta name ="twitter:card" content="summary_large_image" /> <meta name="twitter:title" content="{{offer.metaTitle}}"> <meta name="twitter:description" content="{{offer.metaDescription}}"> <meta name="twitter:image" content="{#{asset('img/asset/cardimg-fb.jpg')}#}">{% endblock %}{% block body %}{# HERO #}<section class="hero hero--offer hero--cruise is-animated position-relative text-white"> <div class="hero__media ratio ratio-21x9"> <img src="{{ asset('img/offer/' ~ offer.file ~ '/' ~ offer.slug ~ '/' ~ offer.img) }}" alt="{{ offer.title }}" class="hero__img w-100 h-100 object-fit-cover"> </div> <div class="hero__overlay"> <div class="hero__card"> <h1 class="hero__title display-5 fw-bold mb-2"> {{ offer.title }} </h1> <p class="hero__subtitle lead mb-0"> {{ offer.subtitle }} </p> </div> </div></section><section class="container py-5"> <div class="row g-4"> {# NAVIRE + META + BLOCS TEXTE #} <div class="col-12 col-lg-5"> <div class="card border-0 shadow-sm rounded-4"> <div class="ratio ratio-4x3 rounded-top-4 overflow-hidden"> <div id="circuitCarousel" class="carousel slide rounded-4 overflow-hidden shadow-sm w-100" data-bs-ride="carousel" data-bs-interval="5000" data-bs-pause="hover" data-bs-touch="true" aria-label="Galerie circuit"> <div class="carousel-inner"> {% for p in photoItinerary %} <div class="carousel-item {% if loop.first %}active{% endif %}"> <div class="ratio ratio-4x3"> <img src="{{asset('img/' ~ p.offer.file ~ '/' ~ p.offer.slug ~ '/itinerary/' ~ p.img)}}" class="d-block w-100 h-100 object-fit-cover" alt="Photo circuit {{ loop.index }}"> </div> </div> {% endfor %} </div> <button class="carousel-control-prev" type="button" data-bs-target="#circuitCarousel" data-bs-slide="prev"> <span class="carousel-control-prev-icon" aria-hidden="true"></span> <span class="visually-hidden">Précédent</span> </button> <button class="carousel-control-next" type="button" data-bs-target="#circuitCarousel" data-bs-slide="next"> <span class="carousel-control-next-icon" aria-hidden="true"></span> <span class="visually-hidden">Suivant</span> </button> <div class="carousel-indicators"> {% for p in photoItinerary %} <button type="button" data-bs-target="#circuitCarousel" data-bs-slide-to="{{ loop.index0 }}" class="{% if loop.first %}active{% endif %}" aria-current="{{ loop.first ? 'true' : 'false' }}" aria-label="Slide {{ loop.index }}"></button> {% endfor %} </div> </div> </div> <div class="card-body"> <h2 class="h4 txt-ot-blue fw-bold mb-1">Les atouts de la croisiere</h2> <div class="d-flex flex-wrap gap-2 mb-2"> {% for h in highlight %}<span class="badge rounded-pill bg-success-subtle text-success-emphasis">{{ h.title }}</span>{% endfor %} </div> {# <ul class="small text-muted list-unstyled mb-0"> <li><strong>Opérateur :</strong> {{ program.operator }} fly</li> <li><strong>Embarquement :</strong> {{ program.embark_port }} aéoport</li> <li><strong>Débarquement :</strong> {{ program.disembark_port }} wesh</li> <li><strong>Départ aéroport :</strong> {{ program.home_airport }} aeoport</li> </ul> #} </div> </div> <div class="card border-0 shadow-sm rounded-4 mt-4"> <div class="card-body"> <h3 class="h6 txt-ot-blue fw-bold mb-2">Inclus</h3> <ul class="list-unstyled small m-0"> {% for line in offer.included|split("\n") %} <li class="mb-1">✔️ {{ line }}</li> {% endfor %} </ul> <hr> <h3 class="h6 txt-ot-blue fw-bold mb-2">Non inclus</h3> <ul class="list-unstyled m-0"> {% for line in offer.notIncluded|split("\n") %} <li class="mb-1">- {{ line }}</li> {% endfor %} </ul> </div> </div> <div class="card border-0 shadow-sm rounded-4 mt-4"> <div class="card-body small"> <h3 class="h6 txt-ot-blue fw-bold mb-2">Formalités</h3> <ul class="list-unstyled m-0"> {% for line in offer.formalities|split("\n") %} <li class="mb-1">✔️ {{ line }}</li> {% endfor %} </ul> <hr> <h3 class="h6 txt-ot-blue fw-bold mb-2">Modalités de paiement</h3> <ul class="list-unstyled m-0"> {% for line in offer.paymentMethod|split("\n") %} <li class="mb-1">✔️ {{ line }}</li> {% endfor %} </ul> </div> </div> </div> {# ITINÉRAIRE + DATES/PRIX #} <div class="col-12 col-lg-7"> <!-- Ligne 1 : Durée / Vols / Tarif --> <div class="row g-3 mb-4"> <!-- Durée --> <div class="col-12 col-md-4"> <div class="card rounded-4 shadow-sm h-100"> <div class="card-body"> <h6 class="fw-bold txt-ot-blue mb-1">Durée</h6> <p class="mb-0 text-muted">{{ offer.summaryDuration }}</p> </div> </div> </div> <!-- Vols --> <div class="col-12 col-md-4"> <div class="card rounded-4 shadow-sm h-100"> <div class="card-body"> <h6 class="fw-bold txt-ot-blue mb-1">Vols</h6> <ul class="mb-0 ps-3"> {% for line in offer.summaryFlights|split("\n") %} {% if line|trim != '' %} <li>{{ line }}</li> {% endif %} {% endfor %} </ul> </div> </div> </div> <!-- Tarif --> <div class="col-12 col-md-4"> <div class="card rounded-4 shadow-sm h-100"> <div class="card-body"> <h6 class="fw-bold txt-ot-blue mb-1">Tarif à partir de</h6> <p class="mb-0 text-muted">{{ offer.priceFrom }} €</p> </div> </div> </div> </div> <!-- Ligne 2 : Rythme --> <div class="row g-3 mb-4"> <div class="col-12"> <div class="card rounded-4 shadow-sm h-100"> <div class="card-body"> <h6 class="fw-bold txt-ot-blue mb-1">Rythme</h6> <ul class="mb-0 ps-3"> {% for line in offer.summaryPaceMeals|split("\n") %} {% if line|trim != '' %} <li>{{ line }}</li> {% endif %} {% endfor %} </ul> </div> </div> </div></div> <div class="card border-0 shadow-sm rounded-4 mb-4"> <div class="card-body"> <h2 class="h5 txt-ot-blue fw-bold mb-3">Itinéraire — jour par jour</h2> <div class="list-group list-group-flush"> {% for it in itinerary %} <div class="list-group-item px-0"> <button class="btn w-100 d-flex justify-content-between align-items-center text-start" data-bs-toggle="collapse" data-bs-target="#day{{ loop.index }}" aria-expanded="false"> <span class="fw-bold">Jour {{loop.index}} - {{it.title }}{% if it.kmLabel %} <span class="text-muted fw-normal"> ({{ it.kmLabel }}) km</span>{% endif %}</span> <i class="bi bi-chevron-down"></i> </button> <div id="day{{ loop.index }}" class="collapse mt-2"> <p class="small text-muted mb-0">{{ it.details }}</p> </div> </div> {% endfor %} </div> {# {% if program.map_image %} <img src="{{ asset(program.map_image) }}" class="img-fluid rounded-3 mt-3" alt="Carte"> {% endif %} #} </div> </div> {% if hebergementOffer %}{# ===================================================== 5) HÔTELS — liste ou tableau simple===================================================== #} <h3 class="h5 txt-ot-blue fw-bold mt-3 mb-3">Hébergements prévus (ou similaires)</h3> <ul class="list-group"> {% for h in hebergementOffer %}<li class="list-group-item">{{ h.name }}</li>{% endfor %} </ul>{% endif %}{% if flight %}{# ===================================================== 7) VOLS & HORAIRES — bloc détaillé===================================================== #} <h3 class="h5 txt-ot-blue fw-bold mt-3 mb-3">Vols & horaires (indicatifs)</h2> <div class="row g-4"> <div class="col-12 col-lg-6"> <div class="card border-0 shadow-sm rounded-4 h-100"> <div class="card-body"> <h3 class="h6 fw-bold mb-2">Aller</h3> <ul class="small mb-0"> {% for f in flight %} {% if f.type == '1' %} <li>{{ f.departureCity }} → {{ f.departureCity }} {{f.departureTime}} / {{f.arrivalTime}} </li> {% endif %} {% endfor %} </ul> </div> </div> </div> <div class="col-12 col-lg-6"> <div class="card border-0 shadow-sm rounded-4 h-100"> <div class="card-body"> <h3 class="h6 fw-bold mb-2">Retour</h3> <ul class="small mb-0"> {% for f in flight %} {% if f.type == '2' %} <li>{{ f.departureCity }} → {{ f.departureCity }} {{f.departureTime}} / {{f.arrivalTime}} </li> {% endif %} {% endfor %} </ul> </div> </div> </div> </div> <p class="small text-muted mt-3 mb-0">Horaires et compagnies susceptibles d’évolution. À confirmer à l’émission des billets.</p>{% endif %} {# <div class="card border-0 shadow-sm rounded-4"> <div class="card-body"> <h3 class="h5 fw-bold mb-3">Dates </h3> <div class="table-responsive"> <table class="table table-striped table-sm"> <thead class="table-light"> <tr><th>Période</th></tr> </thead> <tbody> {% for p in program.prices %} <tr> <td>{{ p.period_label }}</td> <td>{{ p.price_inside }}€</td> <td>{{ p.price_oceanview }}€</td> <td>{{ p.price_balcony }}€</td> <td>{{ p.price_3rd4th_adult ?? '—' }}</td> <td>{{ p.price_3rd4th_child ?? '—' }}</td> </tr> {% endfor %} </tbody> </table> </div> </div> </div> <div class="d-flex justify-content-end mt-4"> <a href="{#{ path('app_demander_devis') }}" class="btn btn-primary rounded-pill px-4">Demander un devis</a> </div>#} </div> </div></section>{% endblock %}