investigation : ajout système de routes /resume et /detail

Implémentation d'un routing personnalisé permettant d'afficher deux vues
(résumé et détail) à partir d'une seule source de données (investigation.txt).

- Ajout routes virtuelles /enquetes/:slug/resume et /detail
- Ajout controller pour redirection automatique vers /resume
- Mise à jour lien "Lire le rapport" vers page /detail
- URL de base redirige en 301 vers /resume

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
isUnknown 2026-01-08 15:36:09 +01:00
parent d9409e689a
commit 32b20a9305
4 changed files with 130 additions and 1 deletions

View file

@ -30,5 +30,53 @@ return [
'campaign_slug' => 'soutenir-index-en-2024', 'campaign_slug' => 'soutenir-index-en-2024',
'campaign_url' => 'https://donorbox.org/soutenir-index-en-2024', 'campaign_url' => 'https://donorbox.org/soutenir-index-en-2024',
'api_base_url' => 'https://donorbox.org/api/v1' 'api_base_url' => 'https://donorbox.org/api/v1'
],
'routes' => [
// Route pour /enquetes/:slug/resume - Page virtuelle résumé
[
'pattern' => 'enquetes/(:any)/resume',
'action' => function($slug) {
$parent = page('enquetes/' . $slug);
if (!$parent) {
return false;
}
if ($parent->intendedTemplate()->name() !== 'investigation') {
return false;
}
// Créer une page virtuelle avec le template investigation-summary
return Page::factory([
'slug' => 'resume',
'template' => 'investigation-summary',
'parent' => $parent,
'content' => $parent->content()->toArray()
]);
}
],
// Route pour /enquetes/:slug/detail - Page virtuelle détail
[
'pattern' => 'enquetes/(:any)/detail',
'action' => function($slug) {
$parent = page('enquetes/' . $slug);
if (!$parent) {
return false;
}
if ($parent->intendedTemplate()->name() !== 'investigation') {
return false;
}
// Créer une page virtuelle avec le template investigation
return Page::factory([
'slug' => 'detail',
'template' => 'investigation',
'parent' => $parent,
'content' => $parent->content()->toArray()
]);
}
]
] ]
]; ];

View file

@ -0,0 +1,62 @@
<?php
/**
* Routes pour les enquêtes (investigations)
*
* Structure des URLs :
* - /enquetes/:slug redirige vers /enquetes/:slug/resume (géré par le controller)
* - /enquetes/:slug/resume affiche le résumé (template investigation-summary)
* - /enquetes/:slug/detail affiche l'enquête complète (template investigation)
*
* Note : La redirection de /enquetes/:slug vers /resume est gérée par le controller
* investigation.php, pas par une route, car les routes ne peuvent pas intercepter
* les pages existantes.
*/
return [
// Route pour /enquetes/:slug/resume - Page virtuelle résumé
[
'pattern' => 'enquetes/(:any)/resume',
'action' => function($slug) {
$parent = page('enquetes/' . $slug);
if (!$parent) {
return false;
}
if ($parent->intendedTemplate()->name() !== 'investigation') {
return false;
}
// Créer une page virtuelle avec le template investigation-summary
return Page::factory([
'slug' => 'resume',
'template' => 'investigation-summary',
'parent' => $parent,
'content' => $parent->content()->toArray()
]);
}
],
// Route pour /enquetes/:slug/detail - Page virtuelle détail
[
'pattern' => 'enquetes/(:any)/detail',
'action' => function($slug) {
$parent = page('enquetes/' . $slug);
if (!$parent) {
return false;
}
if ($parent->intendedTemplate()->name() !== 'investigation') {
return false;
}
// Créer une page virtuelle avec le template investigation
return Page::factory([
'slug' => 'detail',
'template' => 'investigation',
'parent' => $parent,
'content' => $parent->content()->toArray()
]);
}
]
];

View file

@ -0,0 +1,19 @@
<?php
/**
* Controller pour le template investigation
* Redirige automatiquement vers la page /resume
* SAUF si c'est une page virtuelle (resume/detail)
*/
return function ($page) {
// Ne rediriger que si c'est la page "réelle" (pas une page virtuelle)
// Les pages virtuelles ont un slug 'resume' ou 'detail'
if ($page->slug() !== 'resume' && $page->slug() !== 'detail') {
// Redirection 301 vers la page résumé
go($page->url() . '/resume', 301);
}
// Si c'est une page virtuelle, laisser le template s'afficher normalement
return compact('page');
};

View file

@ -31,7 +31,7 @@
</nav> </nav>
<div class="btn--group"> <div class="btn--group">
<button class="btn--bold"><a href="#">Lire le rapport</a></button> <button class="btn--bold"><a href="<?= $page->parent()->url() ?>/detail">Lire le rapport</a></button>
<label for="share-banner__desktop" class="btn--bold-inline no-link">Partager</label> <label for="share-banner__desktop" class="btn--bold-inline no-link">Partager</label>
</div> </div>