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