feat: clean URLs pour catégories et pagination

This commit is contained in:
Cedric Abonnel
2026-05-12 10:07:26 +02:00
parent 70fd55be6f
commit 7e5280abcd
5 changed files with 23 additions and 7 deletions
+6
View File
@@ -11,6 +11,12 @@ RewriteRule ^ - [L]
# URL propre pour les articles : /post/<slug> # URL propre pour les articles : /post/<slug>
RewriteRule ^post/([a-z0-9][a-z0-9-]*)/?$ /index.php?action=view&slug=$1 [L,QSA] RewriteRule ^post/([a-z0-9][a-z0-9-]*)/?$ /index.php?action=view&slug=$1 [L,QSA]
# Filtre par catégorie : /categorie/<nom>
RewriteRule ^categorie/(.+?)/?$ /index.php?cat=$1 [L,QSA,NE]
# Pagination par curseur : /cursor/<uuid>
RewriteRule ^cursor/([0-9a-f-]{36})/?$ /index.php?cursor=$1 [L,QSA]
# Édition / création # Édition / création
RewriteRule ^edit/([0-9a-f-]{36})/?$ /index.php?action=edit&uuid=$1 [L,QSA] RewriteRule ^edit/([0-9a-f-]{36})/?$ /index.php?action=edit&uuid=$1 [L,QSA]
RewriteRule ^new/?$ /index.php?action=create [L,QSA] RewriteRule ^new/?$ /index.php?action=create [L,QSA]
+1 -1
View File
@@ -76,7 +76,7 @@
$isPriv = in_array($catName, $_layoutPrivateCats, true); ?> $isPriv = in_array($catName, $_layoutPrivateCats, true); ?>
<li class="nav-item"> <li class="nav-item">
<a class="nav-link nav-cat <?= $_layoutCurrentCat === $catName ? 'active' : '' ?>" <a class="nav-link nav-cat <?= $_layoutCurrentCat === $catName ? 'active' : '' ?>"
href="/?cat=<?= rawurlencode($catName) ?>"> href="/categorie/<?= rawurlencode($catName) ?>">
<?= htmlspecialchars($catName) ?> <?= htmlspecialchars($catName) ?>
<?php if ($isPriv): ?><span class="ms-1" style="font-size:.65em;opacity:.6">🔒</span><?php endif; ?> <?php if ($isPriv): ?><span class="ms-1" style="font-size:.65em;opacity:.6">🔒</span><?php endif; ?>
</a> </a>
+14 -4
View File
@@ -75,14 +75,24 @@ ob_start();
<?php if ($prevCursor !== null || $nextCursor !== null): ?> <?php if ($prevCursor !== null || $nextCursor !== null): ?>
<nav class="pagination-nav mt-5" aria-label="Navigation"> <nav class="pagination-nav mt-5" aria-label="Navigation">
<?php <?php
$catParam = $filterCat !== '' ? 'cat=' . rawurlencode($filterCat) . '&' : ''; $hasCat = $filterCat !== '';
$catBase = $hasCat ? '/categorie/' . rawurlencode($filterCat) : null;
?> ?>
<?php if ($prevCursor !== null): ?> <?php if ($prevCursor !== null): ?>
<?php $prevHref = $prevCursor === '' ? '/?' . rtrim($catParam, '&') : '/?' . $catParam . 'cursor=' . rawurlencode($prevCursor); ?> <?php
if ($prevCursor === '') {
$prevHref = $hasCat ? $catBase : '/';
} elseif ($hasCat) {
$prevHref = $catBase . '?cursor=' . rawurlencode($prevCursor);
} else {
$prevHref = '/cursor/' . rawurlencode($prevCursor);
}
?>
<a class="pagination-btn" href="<?= htmlspecialchars($prevHref) ?>">← Plus récents</a> <a class="pagination-btn" href="<?= htmlspecialchars($prevHref) ?>">← Plus récents</a>
<?php endif; ?> <?php endif; ?>
<?php if ($nextCursor !== null): ?> <?php if ($nextCursor !== null): ?>
<a class="pagination-btn ms-auto" href="/?<?= $catParam ?>cursor=<?= rawurlencode($nextCursor) ?>">Plus anciens →</a> <?php $nextHref = $hasCat ? $catBase . '?cursor=' . rawurlencode($nextCursor) : '/cursor/' . rawurlencode($nextCursor); ?>
<a class="pagination-btn ms-auto" href="<?= htmlspecialchars($nextHref) ?>">Plus anciens →</a>
<?php endif; ?> <?php endif; ?>
</nav> </nav>
<?php endif; ?> <?php endif; ?>
@@ -96,7 +106,7 @@ if (!empty($cursor)) {
$metaRobots = 'noindex, follow'; $metaRobots = 'noindex, follow';
$canonical = rtrim(APP_URL, '/') . '/'; $canonical = rtrim(APP_URL, '/') . '/';
} elseif ($filterCat !== '') { } elseif ($filterCat !== '') {
$canonical = rtrim(APP_URL, '/') . '/?' . http_build_query(['cat' => $filterCat]); $canonical = rtrim(APP_URL, '/') . '/categorie/' . rawurlencode($filterCat);
} else { } else {
$canonical = rtrim(APP_URL, '/') . '/'; $canonical = rtrim(APP_URL, '/') . '/';
} }
+1 -1
View File
@@ -39,7 +39,7 @@ $hasLeftSidebar = !empty($categorySidebar ?? []);
<aside class="left-sidebar"> <aside class="left-sidebar">
<?php foreach ($categorySidebar as $catName => $catArticles): ?> <?php foreach ($categorySidebar as $catName => $catArticles): ?>
<div class="left-sidebar-section"> <div class="left-sidebar-section">
<a href="/?cat=<?= rawurlencode($catName) ?>" class="left-sidebar-cat"> <a href="/categorie/<?= rawurlencode($catName) ?>" class="left-sidebar-cat">
<?= htmlspecialchars($catName) ?> <?= htmlspecialchars($catName) ?>
</a> </a>
<ul class="left-sidebar-list"> <ul class="left-sidebar-list">
+1 -1
View File
@@ -36,7 +36,7 @@
<article class="search-result"> <article class="search-result">
<div class="search-result-meta"> <div class="search-result-meta">
<?php if ($cat !== ''): ?> <?php if ($cat !== ''): ?>
<a class="search-result-cat" href="/?cat=<?= rawurlencode($cat) ?>"><?= htmlspecialchars($cat) ?></a> <a class="search-result-cat" href="/categorie/<?= rawurlencode($cat) ?>"><?= htmlspecialchars($cat) ?></a>
<?php endif; ?> <?php endif; ?>
<?php if ($date !== ''): ?> <?php if ($date !== ''): ?>
<time class="search-result-date"><?= $date ?></time> <time class="search-result-date"><?= $date ?></time>