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

Open in your IDE?
  1. {# templates/croisiere/show.html.twig #}
  2. {% extends 'base.html.twig' %}
  3. {% block title %}O’Croisière - {{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. {% block body %}
  17. {# HERO #}
  18. <section class="hero hero--offer hero--cruise is-animated position-relative text-white">
  19.   <div class="hero__media ratio ratio-21x9">
  20.     <img src="{{ asset('img/offer/' ~ offer.file ~ '/' ~ offer.slug ~ '/' ~ offer.img) }}"
  21.          alt="{{ offer.title }}"
  22.          class="hero__img w-100 h-100 object-fit-cover">
  23.   </div>
  24.   <div class="hero__overlay">
  25.     <div class="hero__card">
  26.       <h1 class="hero__title display-5 fw-bold mb-2">
  27.         {{ offer.title }}
  28.       </h1>
  29.       <p class="hero__subtitle lead mb-0">
  30.         {{ offer.subtitle }}
  31.       </p>
  32.     </div>
  33.   </div>
  34. </section>
  35. <section class="container py-5">
  36.   <div class="row g-4">
  37.     {# NAVIRE + META + BLOCS TEXTE #}
  38.     <div class="col-12 col-lg-5">
  39.       <div class="card border-0 shadow-sm rounded-4">
  40.         <div class="ratio ratio-4x3 rounded-top-4 overflow-hidden">
  41.           <div id="circuitCarousel"
  42.                class="carousel slide rounded-4 overflow-hidden shadow-sm w-100"
  43.                data-bs-ride="carousel"
  44.                data-bs-interval="5000"
  45.                data-bs-pause="hover"
  46.                data-bs-touch="true"
  47.                aria-label="Galerie circuit">
  48.             <div class="carousel-inner">
  49.               {% for p in photoItinerary %}
  50.                 <div class="carousel-item {% if loop.first %}active{% endif %}">
  51.                   <div class="ratio ratio-4x3">
  52.                     <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 }}">
  53.                   </div>
  54.                 </div>
  55.               {% endfor %}
  56.             </div>
  57.              <button class="carousel-control-prev" type="button" data-bs-target="#circuitCarousel" data-bs-slide="prev">
  58.               <span class="carousel-control-prev-icon" aria-hidden="true"></span>
  59.               <span class="visually-hidden">Précédent</span>
  60.             </button>
  61.             <button class="carousel-control-next" type="button" data-bs-target="#circuitCarousel" data-bs-slide="next">
  62.               <span class="carousel-control-next-icon" aria-hidden="true"></span>
  63.               <span class="visually-hidden">Suivant</span>
  64.             </button>
  65.             <div class="carousel-indicators">
  66.               {% for p in photoItinerary %}
  67.                 <button type="button"
  68.                         data-bs-target="#circuitCarousel"
  69.                         data-bs-slide-to="{{ loop.index0 }}"
  70.                         class="{% if loop.first %}active{% endif %}"
  71.                         aria-current="{{ loop.first ? 'true' : 'false' }}"
  72.                         aria-label="Slide {{ loop.index }}"></button>
  73.               {% endfor %}
  74.             </div>
  75.           </div>
  76.         </div>
  77.         <div class="card-body">
  78.           <h2 class="h4 txt-ot-blue fw-bold mb-1">Les atouts de la croisiere</h2>
  79.           <div class="d-flex flex-wrap gap-2 mb-2">
  80.           {% for h in highlight %}<span class="badge rounded-pill bg-success-subtle text-success-emphasis">{{ h.title }}</span>{% endfor %} 
  81.           </div>
  82.          {# <ul class="small text-muted list-unstyled mb-0">
  83.            <li><strong>Opérateur :</strong> {{ program.operator }} fly</li>
  84.             <li><strong>Embarquement :</strong> {{ program.embark_port }} aéoport</li>
  85.             <li><strong>Débarquement :</strong> {{ program.disembark_port }} wesh</li>
  86.             <li><strong>Départ aéroport :</strong> {{ program.home_airport }} aeoport</li> 
  87.           </ul> #}
  88.         </div>
  89.       </div>
  90.       <div class="card border-0 shadow-sm rounded-4 mt-4">
  91.         <div class="card-body">
  92.           <h3 class="h6 txt-ot-blue fw-bold mb-2">Inclus</h3>
  93.           <ul class="list-unstyled small m-0">
  94.           {% for line in offer.included|split("\n") %}
  95.               <li class="mb-1">✔️ {{ line }}</li>
  96.             {% endfor %}
  97.           </ul>
  98.           <hr>
  99.           <h3 class="h6 txt-ot-blue fw-bold mb-2">Non inclus</h3>
  100.           <ul class="list-unstyled m-0">
  101.            {% for line in offer.notIncluded|split("\n") %}
  102.               <li class="mb-1">- {{ line }}</li>
  103.             {% endfor %}
  104.           </ul>
  105.         </div>
  106.       </div>
  107.       <div class="card border-0 shadow-sm rounded-4 mt-4">
  108.         <div class="card-body small">
  109.          <h3 class="h6 txt-ot-blue fw-bold mb-2">Formalités</h3>
  110.            <ul class="list-unstyled m-0">
  111.            {% for line in offer.formalities|split("\n") %}
  112.               <li class="mb-1">✔️ {{ line }}</li>
  113.             {% endfor %}
  114.           </ul>
  115.           <hr>
  116.            <h3 class="h6 txt-ot-blue fw-bold mb-2">Modalités de paiement</h3>
  117.             <ul class="list-unstyled m-0">
  118.          {% for line in offer.paymentMethod|split("\n") %}
  119.               <li class="mb-1">✔️ {{ line }}</li>
  120.             {% endfor %}
  121.           </ul>
  122.         </div>
  123.       </div>
  124.     </div>
  125.     {# ITINÉRAIRE + DATES/PRIX #}
  126.     <div class="col-12 col-lg-7">
  127.   <!-- Ligne 1 : Durée / Vols / Tarif -->
  128.   <div class="row g-3 mb-4">
  129.     <!-- Durée -->
  130.     <div class="col-12 col-md-4">
  131.       <div class="card rounded-4 shadow-sm h-100">
  132.         <div class="card-body">
  133.           <h6 class="fw-bold txt-ot-blue mb-1">Durée</h6>
  134.           <p class="mb-0 text-muted">{{ offer.summaryDuration }}</p>
  135.         </div>
  136.       </div>
  137.     </div>
  138.     <!-- Vols -->
  139.     <div class="col-12 col-md-4">
  140.       <div class="card rounded-4 shadow-sm h-100">
  141.         <div class="card-body">
  142.           <h6 class="fw-bold txt-ot-blue mb-1">Vols</h6>
  143.           <ul class="mb-0 ps-3">
  144.             {% for line in offer.summaryFlights|split("\n") %}
  145.               {% if line|trim != '' %}
  146.                 <li>{{ line }}</li>
  147.               {% endif %}
  148.             {% endfor %}
  149.           </ul>
  150.         </div>
  151.       </div>
  152.     </div>
  153.     <!-- Tarif -->
  154.     <div class="col-12 col-md-4">
  155.       <div class="card rounded-4 shadow-sm h-100">
  156.         <div class="card-body">
  157.           <h6 class="fw-bold txt-ot-blue mb-1">Tarif à partir de</h6>
  158.           <p class="mb-0 text-muted">{{ offer.priceFrom }} €</p>
  159.         </div>
  160.       </div>
  161.     </div>
  162.   </div>
  163.   <!-- Ligne 2 : Rythme -->
  164.   <div class="row g-3 mb-4">
  165.     <div class="col-12">
  166.       <div class="card rounded-4 shadow-sm h-100">
  167.         <div class="card-body">
  168.           <h6 class="fw-bold txt-ot-blue mb-1">Rythme</h6>
  169.           <ul class="mb-0 ps-3">
  170.             {% for line in offer.summaryPaceMeals|split("\n") %}
  171.               {% if line|trim != '' %}
  172.                 <li>{{ line }}</li>
  173.               {% endif %}
  174.             {% endfor %}
  175.           </ul>
  176.         </div>
  177.       </div>
  178.     </div>
  179. </div>
  180.       <div class="card border-0 shadow-sm rounded-4 mb-4">
  181.         <div class="card-body">
  182.          <h2 class="h5 txt-ot-blue fw-bold mb-3">Itinéraire — jour par jour</h2>
  183.           <div class="list-group list-group-flush">
  184.             {% for it in itinerary %}
  185.               <div class="list-group-item px-0">
  186.                 <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">
  187.                   <span class="fw-bold">Jour {{loop.index}} - {{it.title }}{% if it.kmLabel %} <span class="text-muted fw-normal"> ({{ it.kmLabel }}) km</span>{% endif %}</span>
  188.                   <i class="bi bi-chevron-down"></i>
  189.                 </button>
  190.                 <div id="day{{ loop.index }}" class="collapse mt-2">
  191.                   <p class="small text-muted mb-0">{{ it.details }}</p>
  192.                 </div>
  193.               </div>
  194.             {% endfor %}
  195.           </div>
  196.          {# {% if program.map_image %}
  197.             <img src="{{ asset(program.map_image) }}" class="img-fluid rounded-3 mt-3" alt="Carte">
  198.           {% endif %} #}
  199.         </div>
  200.       </div>
  201.   {% if hebergementOffer %}
  202. {# =====================================================
  203.    5) HÔTELS — liste ou tableau simple
  204. ===================================================== #}
  205.     <h3 class="h5 txt-ot-blue fw-bold mt-3 mb-3">Hébergements prévus (ou similaires)</h3>
  206.     <ul class="list-group">
  207.       {% for h in hebergementOffer %}<li class="list-group-item">{{ h.name }}</li>{% endfor %}
  208.     </ul>
  209. {% endif %}
  210. {% if flight %}
  211. {# =====================================================
  212.    7) VOLS & HORAIRES — bloc détaillé
  213. ===================================================== #}
  214.     <h3 class="h5 txt-ot-blue fw-bold mt-3 mb-3">Vols & horaires (indicatifs)</h2>
  215.     <div class="row g-4">
  216.       <div class="col-12 col-lg-6">
  217.         <div class="card border-0 shadow-sm rounded-4 h-100">
  218.           <div class="card-body">
  219.             <h3 class="h6 fw-bold mb-2">Aller</h3>
  220.             <ul class="small mb-0">
  221.             {% for f in flight %}
  222.               {% if f.type == '1' %}
  223.                 <li>{{ f.departureCity }} → {{ f.departureCity }}  {{f.departureTime}} / {{f.arrivalTime}} </li>
  224.               {% endif %}
  225.             {% endfor %}
  226.             </ul>
  227.           </div>
  228.         </div>
  229.       </div>
  230.       <div class="col-12 col-lg-6">
  231.         <div class="card border-0 shadow-sm rounded-4 h-100">
  232.           <div class="card-body">
  233.             <h3 class="h6 fw-bold mb-2">Retour</h3>
  234.             <ul class="small mb-0">
  235.             {% for f in flight %}
  236.               {% if f.type == '2' %}
  237.                 <li>{{ f.departureCity }} → {{ f.departureCity }}  {{f.departureTime}} / {{f.arrivalTime}} </li>
  238.               {% endif %}
  239.             {% endfor %}
  240.             </ul>
  241.           </div>
  242.         </div>
  243.       </div>
  244.     </div>
  245.     <p class="small text-muted mt-3 mb-0">Horaires et compagnies susceptibles d’évolution. À confirmer à l’émission des billets.</p>
  246. {% endif %}
  247.     {#  <div class="card border-0 shadow-sm rounded-4">
  248.         <div class="card-body">
  249.           <h3 class="h5 fw-bold mb-3">Dates </h3>
  250.           <div class="table-responsive">
  251.             <table class="table table-striped table-sm">
  252.               <thead class="table-light">
  253.                 <tr><th>Période</th></tr>
  254.               </thead>
  255.               <tbody>
  256.                 {% for p in program.prices %}
  257.                   <tr>
  258.                     <td>{{ p.period_label }}</td>
  259.                     <td>{{ p.price_inside }}€</td>
  260.                     <td>{{ p.price_oceanview }}€</td>
  261.                     <td>{{ p.price_balcony }}€</td>
  262.                     <td>{{ p.price_3rd4th_adult ?? '—' }}</td>
  263.                     <td>{{ p.price_3rd4th_child ?? '—' }}</td>
  264.                   </tr>
  265.                 {% endfor %}
  266.               </tbody>
  267.             </table>
  268.           </div>
  269.         </div>
  270.       </div>
  271.       <div class="d-flex justify-content-end mt-4">
  272.         <a href="{#{ path('app_demander_devis') }}" class="btn btn-primary rounded-pill px-4">Demander un devis</a>
  273.       </div>#}
  274.     </div>
  275.   </div>
  276. </section>
  277. {% endblock %}