```
✨ feat(reservation): Ajoute la page "Nos Formules" et son intégration.
```
This commit is contained in:
@@ -111,6 +111,13 @@ class ReserverController extends AbstractController
|
||||
'products' => $productRepository->findAll(),
|
||||
]);
|
||||
}
|
||||
#[Route('/reservation/formules', name: 'reservation_formules')]
|
||||
public function revervationFormules(): Response
|
||||
{
|
||||
|
||||
return $this->render('revervation/formules.twig',[
|
||||
]);
|
||||
}
|
||||
#[Route('/reservation/comment-reserver', name: 'reservation_workflow')]
|
||||
public function revervationWorkfkow(): Response
|
||||
{
|
||||
|
||||
@@ -93,6 +93,10 @@ class SiteMapListener implements EventSubscriberInterface
|
||||
$catUrl = new UrlConcrete($reservationUrl, $t, UrlConcrete::CHANGEFREQ_DAILY, 0.7);
|
||||
$urlContainer->addUrl($catUrl, 'reservation');
|
||||
|
||||
$reservationUrl = $urlGenerator->generate('reservation_formules', [], UrlGeneratorInterface::ABSOLUTE_URL);
|
||||
$catUrl = new UrlConcrete($reservationUrl, $t, UrlConcrete::CHANGEFREQ_DAILY, 0.7);
|
||||
$urlContainer->addUrl($catUrl, 'reservation');
|
||||
|
||||
$reservationUrl = $urlGenerator->generate('reservation_login', [], UrlGeneratorInterface::ABSOLUTE_URL);
|
||||
$catUrl = new UrlConcrete($reservationUrl, $t, UrlConcrete::CHANGEFREQ_DAILY, 0.7);
|
||||
$urlContainer->addUrl($catUrl, 'reservation');
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
|
||||
{# --- NAVIGATION --- #}
|
||||
<nav class="sticky top-0 z-50 bg-white/95 backdrop-blur-md border-b border-gray-100" role="navigation" aria-label="Menu principal">
|
||||
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div class="max-w-8xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div class="flex justify-between h-20">
|
||||
|
||||
{# Logo #}
|
||||
@@ -109,6 +109,7 @@
|
||||
<div class="hidden md:flex items-center space-x-8">
|
||||
<a href="{{ path('reservation') }}" class="text-gray-700 hover:text-blue-600 font-medium transition-colors">Accueil</a>
|
||||
<a href="{{ path('reservation_catalogue') }}" class="text-gray-700 hover:text-blue-600 font-medium transition-colors">Nos structures </a>
|
||||
<a href="{{ path('reservation_formules') }}" class="text-gray-700 hover:text-blue-600 font-medium transition-colors">Nos Formules </a>
|
||||
<a target="_blank" href="/provider/Catalogue.pdf" class="text-gray-700 hover:text-blue-600 font-medium transition-colors">Catalogue</a>
|
||||
<a href="{{ path('reservation_workflow') }}" class="text-gray-700 hover:text-blue-600 font-medium transition-colors">Comment Reserver</a>
|
||||
<a href="{{ path('reservation_contact') }}" class="text-gray-700 hover:text-blue-600 font-medium transition-colors">Contact</a>
|
||||
@@ -165,6 +166,8 @@
|
||||
<div class="px-4 pt-2 pb-6 space-y-2">
|
||||
<a href="{{ path('reservation') }}" class="block px-3 py-2 text-base font-medium text-gray-700 hover:bg-gray-50 rounded-xl">Accueil</a>
|
||||
<a href="{{ path('reservation_catalogue') }}" class="block px-3 py-2 text-base font-medium text-gray-700 hover:bg-gray-50 rounded-xl">Nos structures</a>
|
||||
<a href="{{ path('reservation_formules') }}" class="text-gray-700 hover:text-blue-600 font-medium transition-colors">Nos Formules </a>
|
||||
|
||||
<a target="_blank" href="/provider/Catalogue.pdf" class="block px-3 py-2 text-base font-medium text-gray-700 hover:bg-gray-50 rounded-xl">Catalogue</a>
|
||||
<a href="{{ path('reservation_workflow') }}" class="block px-3 py-2 text-base font-medium text-gray-700 hover:bg-gray-50 rounded-xl">Comment reserver</a>
|
||||
<a href="{{ path('reservation_search') }}" class="block px-3 py-2 text-base font-medium text-gray-700 hover:bg-gray-50 rounded-xl">Rechercher</a>
|
||||
|
||||
57
templates/revervation/formules.twig
Normal file
57
templates/revervation/formules.twig
Normal file
@@ -0,0 +1,57 @@
|
||||
{% extends 'revervation/base.twig' %}
|
||||
|
||||
{# --- SEO OPTIMISÉ --- #}
|
||||
{% block title %}Nos Formules Location | Packs Gonflables & Événements - Ludik Event{% endblock %}
|
||||
{% block description %}Économisez avec nos formules événementielles : packs châteaux gonflables, animations et gourmandises clés en main. Arrivée imminente de nos offres exclusives !{% endblock %}
|
||||
|
||||
{% block breadcrumb_json %}
|
||||
,{
|
||||
"@type": "ListItem",
|
||||
"position": 1,
|
||||
"name": "Nos Formules",
|
||||
"item": "{{ url('reservation_formules') }}"
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<utm-event event="view_formules_teasing"></utm-event>
|
||||
<div class="min-h-screen bg-gray-50/50 font-sans antialiased pb-20">
|
||||
|
||||
{# --- HEADER --- #}
|
||||
<div class="max-w-7xl mx-auto pt-16 pb-8 px-4 text-center">
|
||||
<nav class="flex justify-center space-x-4 text-[10px] mb-8 uppercase tracking-[0.3em] font-black italic">
|
||||
<a href="{{ url('reservation') }}" class="text-slate-600 hover:text-[#fc0e50] transition">ACCUEIL</a>
|
||||
<span class="text-slate-500">/</span>
|
||||
<span class="text-amber-700 underline decoration-2 underline-offset-4">Nos Formules</span>
|
||||
</nav>
|
||||
|
||||
<h1 class="text-5xl md:text-7xl font-black text-slate-900 uppercase tracking-tighter italic leading-none mb-6">
|
||||
Nos <span class="text-[#fc0e50]">Formules</span>
|
||||
</h1>
|
||||
<p class="max-w-2xl mx-auto text-slate-600 font-medium">
|
||||
Nous préparons des packs exclusifs pour simplifier l'organisation de vos fêtes. Restez connectés !
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{# --- BENTO GRID : ARRIVÉE PROCHAINEMENT --- #}
|
||||
<div class="max-w-6xl mx-auto px-4 mt-12">
|
||||
<div class="md:col-span-2 md:row-span-2 bg-white border-2 border-slate-900 rounded-3xl p-8 flex flex-col justify-center relative overflow-hidden group shadow-[8px_8px_0px_0px_rgba(15,23,42,1)]">
|
||||
<div class="relative z-10">
|
||||
<span class="bg-amber-100 text-amber-700 text-xs font-bold px-3 py-1 rounded-full mb-4 inline-block">COMING SOON</span>
|
||||
<h2 class="text-4xl font-black text-slate-900 italic leading-tight uppercase">Bientôt disponible !</h2>
|
||||
<p class="mt-4 text-slate-500 font-medium">Nos experts concoctent des packs regroupant structures, alimentaire, etc pour des tarifs imbattables.</p>
|
||||
</div>
|
||||
{# Décoration de fond #}
|
||||
<div class="absolute -bottom-10 -right-10 text-9xl opacity-5 group-hover:rotate-12 transition-transform duration-500">🎈</div>
|
||||
</div>
|
||||
|
||||
{# --- BOUTON DE RETOUR --- #}
|
||||
<div class="mt-16 text-center">
|
||||
<p class="text-slate-400 text-sm mb-4">Besoin d'un devis sur mesure en attendant ?</p>
|
||||
<a href="{{ url('reservation_catalogue') }}" class="inline-block bg-white border-2 border-slate-900 px-8 py-4 rounded-full font-black uppercase italic tracking-wider hover:bg-slate-900 hover:text-white transition-all shadow-[4px_4px_0px_0px_rgba(15,23,42,1)] active:translate-y-1 active:shadow-none">
|
||||
Voir le catalogue
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -121,8 +121,8 @@
|
||||
<h2 class="text-4xl font-black text-gray-900 uppercase italic tracking-tighter">Nos <span class="text-[#f39e36]">Best-Sellers</span></h2>
|
||||
<p class="text-gray-600 mt-2 italic">Sélectionnés pour le succès de vos fêtes.</p>
|
||||
</div>
|
||||
<a href="{{ path('reservation_contact') }}" class="group text-[#fc0e50] font-bold flex items-center gap-2 uppercase text-xs tracking-[0.2em] bg-orange-50 px-6 py-3 rounded-full over:text-white transition-all">
|
||||
Tout l'univers
|
||||
<a href="{{ path('reservation_catalogue') }}" class="group text-[#fc0e50] font-bold flex items-center gap-2 uppercase text-xs tracking-[0.2em] bg-orange-50 px-6 py-3 rounded-full over:text-white transition-all">
|
||||
Tout le catalogue
|
||||
<svg class="w-4 h-4 transition-transform group-hover:translate-x-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M14 5l7 7m0 0l-7 7m7-7H3"/>
|
||||
</svg>
|
||||
@@ -188,5 +188,26 @@
|
||||
{% endfor %}
|
||||
</div>
|
||||
</section>
|
||||
<section id="catalogue" class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div class="flex flex-col md:flex-row justify-between items-end mb-12 gap-4">
|
||||
<div>
|
||||
<h2 class="text-4xl font-black text-gray-900 uppercase italic tracking-tighter">Nos <span class="text-[#f39e36]">Formules</span></h2>
|
||||
<p class="text-gray-600 mt-2 italic">Sélectionnés pour le succès de vos fêtes.</p>
|
||||
</div>
|
||||
<a href="{{ path('reservation_formules') }}" class="group text-[#fc0e50] font-bold flex items-center gap-2 uppercase text-xs tracking-[0.2em] bg-orange-50 px-6 py-3 rounded-full over:text-white transition-all">
|
||||
Tout les formules
|
||||
<svg class="w-4 h-4 transition-transform group-hover:translate-x-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M14 5l7 7m0 0l-7 7m7-7H3"/>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8">
|
||||
{# Message si aucun produit (Correction contraste) #}
|
||||
<div class="col-span-full py-20 text-center bg-white rounded-[3rem] border-2 border-dashed border-gray-200">
|
||||
<p class="text-gray-600 font-bold italic uppercase tracking-widest">Le formules est en cours de mise à jour...</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user