templates/default/escapade-destination.html.twig line 1

Open in your IDE?
  1. {# templates/escapade/show.html.twig #}
  2. {% extends 'base.html.twig' %}
  3. {% block title %}O'Escapade — {{ offer.title }}{% endblock %}
  4. {# Header standard ou overlay si besoin sur le hero #}
  5. {% block header_classes %}header-overlay{% endblock %}
  6. {% block navbar_theme %}navbar-dark{% endblock %}
  7. {% block body %}
  8. {# -----------------------------
  9.    HERO Escapade (avec inclus)
  10. ------------------------------ #}
  11. <section class="position-relative text-white">
  12.   <div class="ratio ratio-21x9">
  13.   {% if offer.img %}
  14.       <img src="{{asset('img/offre/' ~ offer.img)}}" alt="Carnaval St Lucie" class="object-fit-cover w-100 h-100">
  15.   {% else %}
  16.       <img src="{{asset('img/destination/' ~ offer.destination.slug  ~ '/' ~ offer.destination.img)}}" alt="Carnaval St Lucie" class="object-fit-cover w-100 h-100">
  17.   {% endif %}
  18.   </div>
  19.   <div class="position-absolute top-0 start-0 w-100 h-100 d-flex align-items-center">
  20.     <div class="container">
  21.       <div class="bg-white text-dark p-4 p-md-5 rounded-4 shadow-sm" style="max-width: 600px;">
  22.         <h1 class="display-5 fw-bold txt-ot-green mb-3">{{offer.title}}</h1>
  23.         <p class="mb-3">{{offer.subtitle}}</p>
  24.         <div>
  25.         {% if offer.includedText %}
  26.           <h6 class="fw-bold txt-ot-green mb-2">Inclus :</h6>
  27.           <ul class="list-unstyled mb-0">
  28.             {% for line in offer.includedText|split("\n") %}
  29.                 {% if line|trim != '' %}
  30.                    <li class="mb-1">✔️ {{ line }}</li>
  31.                 {% endif %}
  32.             {% endfor %}
  33.           </ul>
  34.         {% endif %}
  35.         </div>
  36.       </div>
  37.     </div>
  38.   </div>
  39. </section>
  40. {# Fil d'Ariane #}
  41. <nav class="container my-4" aria-label="breadcrumb">
  42.   <ol class="breadcrumb small">
  43.     <li class="breadcrumb-item"><a href="{{ path('app') }}">Accueil</a></li>
  44.     <li class="breadcrumb-item"><a href="{{ path('o.escapade') }}">O'escapade</a></li>
  45.     <li class="breadcrumb-item active" aria-current="page">{{offer.destination.name}}</li>
  46.   </ol>
  47. </nav>
  48. {% if formules %}
  49. {# -----------------------------
  50.    Formules
  51. ------------------------------ #}
  52. <section class="container py-5">
  53.   <h2 class="display-6 lh-1 fw-bold txt-ot-green mb-4">Nos formules O’Escapade</h2>
  54.   <div class="row row-cols-1 row-cols-md-2 g-4">
  55.   {% for f in formules %}
  56.     {# Formule 1 #}
  57.     <div class="col">
  58.       <div class="card h-100 border-0 shadow-sm rounded-4 overflow-hidden">
  59.         <div class="card-body p-4">
  60.           <span class="badge bg-ot-green text-white mb-3">{{f.durationLabel}}</span>
  61.           <h3 class="h5 fw-bold mb-3">{{f.title}}</h3>
  62.           <p class="small text-muted mb-2"><i class="bi bi-calendar-week"></i> Départs :</p>
  63.           <ul class="small mb-3">
  64.             {% for line in f.departuresText|split("\n") %}
  65.                 {% if line|trim != '' %}
  66.                    <li class="mb-1">{{ line }}</li>
  67.                 {% endif %}
  68.             {% endfor %}
  69.           </ul>
  70.           <p class="small text-muted mb-2"><i class="bi bi-airplane"></i> Transports :</p>
  71.           <ul class="small mb-3">
  72.             {% for line in f.transportText|split("\n") %}
  73.                 {% if line|trim != '' %}
  74.                    <li class="mb-1">{{ line }}</li>
  75.                 {% endif %}
  76.             {% endfor %}
  77.           </ul>
  78.           <p class="text-muted small mb-4">{{f.description}}</p>
  79.           <a href="{{ path('o.devis') }}" class="btn btn-outline-ot-green rounded-pill">Demander un devis</a>
  80.         </div>
  81.       </div>
  82.     </div>
  83.     {% endfor %}
  84. </section>
  85.   {% endif %}
  86. {# -----------------------------
  87.    SECTION 1 — Hébergement (SÉLECTION D'HÔTELS)
  88. ------------------------------ #}
  89. <section class="container py-4 py-md-5">
  90.   <div class="row g-4">
  91.     <div class="col-12 col-lg-6">
  92.       <p class="text-muted small mb-1">{{offer.title}}</p>
  93.       <h2 class="display-6 lh-1 fw-bold txt-ot-green mb-3">Hébergement</h2>
  94.       <p class="text-muted">
  95.         Notre sélection d’hôtels partenaires pour une escapade sans fausse note : confort, localisation idéale et accueil au top.
  96.       </p>
  97.     </div>
  98.   </div>
  99.   <div class="row g-3 g-md-4 mt-2">
  100.     {% for h in offerHebergement %}
  101.       <div class="col-12 col-sm-6 col-lg-4">
  102.         <article class="card hotel-card border-0 shadow-sm h-100 rounded-4 overflow-hidden">
  103.           <a href="{#{ h.url }#}" class="stretched-link text-decoration-none">
  104.             <div class="ratio ratio-4x3">
  105.               <img src="{{asset('img/hotels/' ~ h.hebergement.country.slug ~ '/' ~ h.hebergement.slug ~ '/' ~ h.hebergement.img)}}" alt="{{ h.hebergement.name }} — photo de l’hôtel" class="object-fit-cover w-100 h-100">
  106.             </div>
  107.             <div class="card-body">
  108.               <h3 class="h6 mb-1 d-flex justify-content-between align-items-baseline">
  109.                 <span class="hotel-name">{{ h.hebergement.name }}</span>
  110.                 <span class="hotel-price">à partir de {{ h.priceFrom }}€</span>
  111.               </h3>
  112.               <p class="small text-muted mb-0">{{ h.blurb }}</p>
  113.             </div>
  114.           </a>
  115.         </article>
  116.       </div>
  117.     {% endfor %}
  118.   </div>
  119. </section>
  120. {# -----------------------------
  121.    SECTION 2 — Parade (texte gauche, image droite)
  122. ------------------------------ 
  123. <section class="container py-4 py-md-5">
  124.   <div class="row g-4 align-items-center">
  125.     <div class="col-12 col-lg-6 order-1 order-lg-0">
  126.       <p class="text-muted small mb-1">{{ escapade.kicker|default('Carnaval St Lucie') }}</p>
  127.       <h2 class="display-6 lh-1 fw-bold text-ot-green mb-3">Parade</h2>
  128.       <p class="text-muted">Lorem Ipsum is simply dummy text of the printing and typesetting industry…</p>
  129.     </div>
  130.     <div class="col-12 col-lg-6 order-0 order-lg-1">
  131.       <div class="ratio ratio-4x3 rounded-4 overflow-hidden shadow-sm">
  132.         <img src="{{ asset(escapade.parade_img|default('img/escapade/parade.jpg')) }}" alt="Parade" class="object-fit-cover w-100 h-100">
  133.       </div>
  134.     </div>
  135.   </div>
  136. </section>#}
  137. {# -----------------------------
  138.    SECTION 3 — Activités (image gauche, texte droite)
  139. ------------------------------ 
  140. <section class="container py-4 py-md-5">
  141.   <div class="row g-4 align-items-center">
  142.     <div class="col-12 col-lg-6">
  143.       <div class="ratio ratio-4x3 rounded-4 overflow-hidden shadow-sm">
  144.         <img src="{{ asset(escapade.activites_img|default('img/escapade/activity.jpg')) }}" alt="Activités" class="object-fit-cover w-100 h-100">
  145.       </div>
  146.     </div>
  147.     <div class="col-12 col-lg-6">
  148.       <p class="text-muted small mb-1">{{ escapade.kicker|default('Carnaval St Lucie') }}</p>
  149.       <h2 class="display-6 lh-1 fw-bold text-ot-green mb-3">Activités</h2>
  150.       <p class="text-muted">Lorem Ipsum is simply dummy text of the printing and typesetting industry…</p>
  151.     </div>
  152.   </div>
  153. </section> #}
  154. {# -----------------------------
  155.    OFFRES DU MOMENT — réutilisation grille cartes maquette
  156. ------------------------------ #}
  157. <section class="py-5 bg-white">
  158.   <div class="container">
  159.     <header class="mb-3">
  160.       <h2 class="h3 txt-ot-green mb-1 fw-bold">Nos O'offres du moment</h2>
  161.       <p class="text-muted mb-0">Découvrez nos dernières expériences en immersion !</p>
  162.     </header>
  163.     <div class="row g-3 g-md-4">
  164.       {% set offres = [
  165.         { title: 'Carnaval St Lucie', img: 'carnaval.jpg', url: '#' },
  166.         { title: 'Croisière Caraïbes', img: 'caraibes.jpg', url: '#' },
  167.         { title: 'Spring Break Cancun', img: 'cancun.jpg', url: '#' },
  168.         { title: 'Road trip Route 66', img: 'road-66.jpg', url: '#' }
  169.       ] %}
  170.       {% for o in offres %}
  171.       <div class="col-12 col-sm-6 col-lg-3">
  172.         <article class="card card-offer border-0 shadow-sm h-100 overflow-hidden rounded-4">
  173.           <a href="{{ o.url }}" class="stretched-link text-decoration-none text-white">
  174.             <div class="ratio ratio-4x5">
  175.               <img src="{{ asset('img/offre/' ~ o.img) }}" alt="{{ o.title }}" class="object-fit-cover w-100 h-100">
  176.             </div>
  177.             <div class="card-img-overlay d-flex flex-column justify-content-end p-3 p-md-4">
  178.               <h3 class="h5 fw-bold text-white text-shadow-sm mb-3">{{ o.title }}</h3>
  179.               <div>
  180.                 <span class="btn btn-outline-light btn-sm">Découvrir</span>
  181.               </div>
  182.             </div>
  183.           </a>
  184.         </article>
  185.       </div>
  186.       {% endfor %}
  187.     </div>
  188.     <div class="section-divider mx-auto my-5"></div>
  189.   </div>
  190. </section>
  191. {% endblock %}
  192. {% block extra_head %}
  193.   {{ parent() }}
  194.   <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css">
  195.   <style>
  196.     .text-shadow-sm{ text-shadow:0 2px 4px rgba(0,0,0,.35); }
  197.     .text-ot-green{ color: var(--ot-primary, #2ea37a); }
  198.   </style>
  199. {% endblock %}