feat : notion de livre — grouper des pages en série ordonnée
Ajoute un concept de "livre" (série de pages ordonnées) avec : - BookManager : CRUD JSON dans data/books/<slug>.json - Route /book/<slug> → page de sommaire (table des matières) - Navigation chapitre ← → en bas de chaque article membre du livre - Bandeau "Chapitre X/N — Nom du livre" en haut de l'article - Admin → onglet Livres : créer, éditer, supprimer un livre, ajouter/ordonner les pages via textarea slug Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -70,6 +70,19 @@ $externalLinks = $article['external_links'] ?? [];
|
||||
<!-- Colonne principale -->
|
||||
<div class="col">
|
||||
|
||||
<?php if (!empty($bookContext)): ?>
|
||||
<div class="book-article-banner mb-3">
|
||||
<a href="/book/<?= rawurlencode($bookContext['book']['slug']) ?>" class="book-article-banner-link">
|
||||
<span class="book-article-banner-icon">📖</span>
|
||||
<span class="book-article-banner-text">
|
||||
Chapitre <?= $bookContext['position'] ?>/<?= $bookContext['total'] ?> —
|
||||
<strong><?= htmlspecialchars($bookContext['book']['title']) ?></strong>
|
||||
</span>
|
||||
<span class="book-article-banner-cta">Voir le sommaire →</span>
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="card mb-4">
|
||||
<?php if (!$article['published']): ?>
|
||||
<div class="draft-ribbon">Brouillon</div>
|
||||
@@ -163,6 +176,41 @@ $hasSources = (!empty($externalLinks) || !empty($files))
|
||||
<div class="card-text post-content">
|
||||
<?= $_renderedContent ?>
|
||||
</div>
|
||||
|
||||
<?php if (!empty($bookContext)): ?>
|
||||
<nav class="book-chapter-nav">
|
||||
<div class="book-chapter-nav-inner">
|
||||
<?php if (!empty($bookContext['prev_article'])): ?>
|
||||
<a href="/post/<?= rawurlencode($bookContext['prev_article']['slug'] ?? '') ?>"
|
||||
class="book-nav-btn book-nav-btn--prev">
|
||||
<span class="book-nav-dir">← Précédent</span>
|
||||
<span class="book-nav-title"><?= htmlspecialchars($bookContext['prev_article']['title'] ?? '') ?></span>
|
||||
</a>
|
||||
<?php else: ?>
|
||||
<span class="book-nav-btn book-nav-btn--prev book-nav-btn--disabled">
|
||||
<span class="book-nav-dir">Premier chapitre</span>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
|
||||
<a href="/book/<?= rawurlencode($bookContext['book']['slug']) ?>"
|
||||
class="book-nav-toc" title="Sommaire du livre">
|
||||
☰
|
||||
</a>
|
||||
|
||||
<?php if (!empty($bookContext['next_article'])): ?>
|
||||
<a href="/post/<?= rawurlencode($bookContext['next_article']['slug'] ?? '') ?>"
|
||||
class="book-nav-btn book-nav-btn--next">
|
||||
<span class="book-nav-dir">Suivant →</span>
|
||||
<span class="book-nav-title"><?= htmlspecialchars($bookContext['next_article']['title'] ?? '') ?></span>
|
||||
</a>
|
||||
<?php else: ?>
|
||||
<span class="book-nav-btn book-nav-btn--next book-nav-btn--disabled">
|
||||
<span class="book-nav-dir">Dernier chapitre</span>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</nav>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user