From 8e01cbe611da515669b99fc6b1019d298fc70f93 Mon Sep 17 00:00:00 2001 From: isUnknown Date: Thu, 19 Feb 2026 12:38:07 +0100 Subject: [PATCH] Feat: navigation par slides horizontaux MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Nouveau store slides.svelte.js : gestion de l'état des slides (activeIndex, pendingPath, chargement progressif) - Réécriture du router : remplace navaid par une logique custom avec chargement de la slide initiale puis des autres en arrière-plan - App.svelte : layout slides-wrapper avec translateX, transition 1000ms - Header.svelte : menu 100% dynamique depuis slides.all (ordre et titres multilingues depuis Kirby) - site/controllers/site.php : navigation exposée via site->pages()->listed() avec titres par langue, home prependue Co-Authored-By: Claude Sonnet 4.5 --- site/controllers/site.php | 23 +++-- src/App.svelte | 85 ++++++++++------- src/components/layout/Header.svelte | 93 ++++--------------- src/router/index.js | 138 ++++++++++++++++------------ src/state/slides.svelte.js | 76 +++++++++++++++ 5 files changed, 241 insertions(+), 174 deletions(-) create mode 100644 src/state/slides.svelte.js diff --git a/site/controllers/site.php b/site/controllers/site.php index 5ee297d..75b5cdb 100644 --- a/site/controllers/site.php +++ b/site/controllers/site.php @@ -1,6 +1,11 @@ find('home'); + $navPages = $homePage + ? $site->pages()->listed()->prepend($homePage->id(), $homePage) + : $site->pages()->listed(); + // Generic page data available in all templates $genericData = [ 'title' => $page->title()->value(), @@ -19,13 +24,19 @@ return function ($page, $kirby, $site) { 'name' => $l->name() ]; })->values(), - 'navigation' => $site->main_navigation()->toStructure()->map(function($item) use ($kirby) { - $linkedPage = $item->link()->toPages()->first(); + 'navigation' => $navPages->map(function($p) use ($kirby) { + $titles = []; + foreach ($kirby->languages() as $lang) { + $titles[$lang->code()] = $p->content($lang->code())->title()->value(); + } + if (empty($titles)) { + $titles['fr'] = $p->title()->value(); + } return [ - 'label_fr' => $item->label_fr()->value(), - 'label_en' => $item->label_en()->value(), - 'url' => $linkedPage?->url(), - 'isActive' => $linkedPage?->isOpen() ?? false + 'id' => $p->uid(), + 'url' => '/' . $p->uri(), + 'title' => $p->title()->value(), + 'titles' => $titles ]; })->values() ] diff --git a/src/App.svelte b/src/App.svelte index a640dc0..81a143d 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -1,8 +1,7 @@
@@ -40,14 +37,22 @@
- {#if pageData && View} - - {/if} +
+ {#each slides.all as slide} +
+ {#if slide.loaded} + + {/if} +
+ {/each} +
- - {#if showFooter} -
- {/if}
diff --git a/src/components/layout/Header.svelte b/src/components/layout/Header.svelte index 33be62a..1fae4fc 100644 --- a/src/components/layout/Header.svelte +++ b/src/components/layout/Header.svelte @@ -1,27 +1,20 @@