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/offer/' ~ 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. {% if offer.widget %}
  121. <div class="container">
  122.   <h2 class="h3 txt-ot-green fw-bold mb-3">Activités</h2>
  123. <div class="widget">
  124.   {{offer.widget|raw}}
  125. </div>
  126. </div>
  127. {% endif %}
  128. {# -----------------------------
  129.    SECTION 2 — Parade (texte gauche, image droite)
  130. ------------------------------ 
  131. <section class="container py-4 py-md-5">
  132.   <div class="row g-4 align-items-center">
  133.     <div class="col-12 col-lg-6 order-1 order-lg-0">
  134.       <p class="text-muted small mb-1">{{ escapade.kicker|default('Carnaval St Lucie') }}</p>
  135.       <h2 class="display-6 lh-1 fw-bold text-ot-green mb-3">Parade</h2>
  136.       <p class="text-muted">Lorem Ipsum is simply dummy text of the printing and typesetting industry…</p>
  137.     </div>
  138.     <div class="col-12 col-lg-6 order-0 order-lg-1">
  139.       <div class="ratio ratio-4x3 rounded-4 overflow-hidden shadow-sm">
  140.         <img src="{{ asset(escapade.parade_img|default('img/escapade/parade.jpg')) }}" alt="Parade" class="object-fit-cover w-100 h-100">
  141.       </div>
  142.     </div>
  143.   </div>
  144. </section>#}
  145. {# -----------------------------
  146.    SECTION 3 — Activités (image gauche, texte droite)
  147. ------------------------------ 
  148. <section class="container py-4 py-md-5">
  149.   <div class="row g-4 align-items-center">
  150.     <div class="col-12 col-lg-6">
  151.       <div class="ratio ratio-4x3 rounded-4 overflow-hidden shadow-sm">
  152.         <img src="{{ asset(escapade.activites_img|default('img/escapade/activity.jpg')) }}" alt="Activités" class="object-fit-cover w-100 h-100">
  153.       </div>
  154.     </div>
  155.     <div class="col-12 col-lg-6">
  156.       <p class="text-muted small mb-1">{{ escapade.kicker|default('Carnaval St Lucie') }}</p>
  157.       <h2 class="display-6 lh-1 fw-bold text-ot-green mb-3">Activités</h2>
  158.       <p class="text-muted">Lorem Ipsum is simply dummy text of the printing and typesetting industry…</p>
  159.     </div>
  160.   </div>
  161. </section> #}
  162. {# -----------------------------
  163.    OFFRES DU MOMENT — réutilisation grille cartes maquette
  164. ------------------------------ #}
  165. <section class="py-5 bg-white">
  166.   <div class="container">
  167.     <header class="mb-3">
  168.       <h2 class="h3 txt-ot-green mb-1 fw-bold">Nos O'offres du moment</h2>
  169.       <p class="text-muted mb-0">Découvrez nos dernières expériences en immersion !</p>
  170.     </header>
  171.     <div class="row g-3 g-md-4">
  172.       {% set offres = [
  173.         { title: 'Carnaval St Lucie', img: 'carnaval.jpg', url: '#' },
  174.         { title: 'Croisière Caraïbes', img: 'caraibes.jpg', url: '#' },
  175.         { title: 'Spring Break Cancun', img: 'cancun.jpg', url: '#' },
  176.         { title: 'Road trip Route 66', img: 'road-66.jpg', url: '#' }
  177.       ] %}
  178.       {% for o in offres %}
  179.       <div class="col-12 col-sm-6 col-lg-3">
  180.         <article class="card card-offer border-0 shadow-sm h-100 overflow-hidden rounded-4">
  181.           <a href="{{ o.url }}" class="stretched-link text-decoration-none text-white">
  182.             <div class="ratio ratio-4x5">
  183.               <img src="{{ asset('img/offre/' ~ o.img) }}" alt="{{ o.title }}" class="object-fit-cover w-100 h-100">
  184.             </div>
  185.             <div class="card-img-overlay d-flex flex-column justify-content-end p-3 p-md-4">
  186.               <h3 class="h5 fw-bold text-white text-shadow-sm mb-3">{{ o.title }}</h3>
  187.               <div>
  188.                 <span class="btn btn-outline-light btn-sm">Découvrir</span>
  189.               </div>
  190.             </div>
  191.           </a>
  192.         </article>
  193.       </div>
  194.       {% endfor %}
  195.     </div>
  196.     <div class="section-divider mx-auto my-5"></div>
  197.   </div>
  198. </section>
  199. {% endblock %}
  200. {% block extra_head %}
  201.   {{ parent() }}
  202.   <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css">
  203.   <style>
  204.     .text-shadow-sm{ text-shadow:0 2px 4px rgba(0,0,0,.35); }
  205.     .text-ot-green{ color: var(--ot-primary, #2ea37a); }
  206.   </style>
  207. {% endblock %}