Tags catégorisés sur les articles #37

Closed
opened 2026-05-08 21:43:04 +00:00 by cedricAbonnel · 1 comment
Owner

Objectif

Ajouter un système de tags à deux niveaux (catégorie → tags) sur les articles. Les tags sont regroupés par catégorie dans meta.json et permettent de naviguer par sujet sur le site.

Structure de données

Ajout d'un champ tags dans meta.json de chaque article :

{
  "uuid": "...",
  "title": "...",
  "tags": {
    "tech": ["php", "postgresql"],
    "sujet": ["lecture", "hardware"]
  }
}

Les articles sans tags sont traités comme {} (rétrocompatibilité).

Composants à implémenter

1. ArticleManager

  • loadArticle() : lire le champ tags depuis meta.json (défaut {})
  • save() / update() : persister les tags dans meta.json
  • Ajouter getByTag(string $category, string $tag): array — retourne les articles portant un tag donné
  • Ajouter getAllTags(): array — retourne toutes les catégories et leurs tags distincts, avec le nombre d'articles

2. Formulaire article (post_form.php)

Interface d'édition des tags :

  • Affichage des catégories existantes + leurs tags (cases à cocher ou input dynamique)
  • Possibilité d'ajouter une nouvelle catégorie et de nouveaux tags à la volée
  • Saisie libre (pas de liste fermée imposée)

3. Affichage article (post_view.php)

  • Afficher les tags groupés par catégorie sous le titre ou en pied d'article
  • Chaque tag est un lien vers la page filtrée par tag

4. Liste des articles (post_list.php)

  • Afficher les tags de chaque article dans la vignette
  • Permettre le filtrage par tag via paramètre URL (?cat=tech&tag=php)

5. Page d'index des tags (optionnel)

  • Route /tags listant toutes les catégories, leurs tags, et le nombre d'articles associés

Migration

Les articles existants n'ont pas de champ tags — le code doit gérer l'absence du champ sans erreur. Pas de migration de données requise.

Critères d'acceptation

  • meta.json peut contenir un objet tags structuré par catégorie
  • ArticleManager lit/écrit les tags sans erreur, y compris si le champ est absent
  • Le formulaire d'édition permet d'ajouter/supprimer des tags par catégorie
  • Les tags s'affichent dans la vue article, groupés par catégorie
  • Chaque tag est cliquable et filtre la liste des articles
  • Le filtrage ?cat=X&tag=Y fonctionne sur la page liste
  • PHPStan passe sans erreur de type sur le champ tags
  • Pas de régression sur les articles sans tags
## Objectif Ajouter un système de tags à deux niveaux (catégorie → tags) sur les articles. Les tags sont regroupés par catégorie dans `meta.json` et permettent de naviguer par sujet sur le site. ## Structure de données Ajout d'un champ `tags` dans `meta.json` de chaque article : ```json { "uuid": "...", "title": "...", "tags": { "tech": ["php", "postgresql"], "sujet": ["lecture", "hardware"] } } ``` Les articles sans `tags` sont traités comme `{}` (rétrocompatibilité). ## Composants à implémenter ### 1. `ArticleManager` - `loadArticle()` : lire le champ `tags` depuis `meta.json` (défaut `{}`) - `save()` / `update()` : persister les tags dans `meta.json` - Ajouter `getByTag(string $category, string $tag): array` — retourne les articles portant un tag donné - Ajouter `getAllTags(): array` — retourne toutes les catégories et leurs tags distincts, avec le nombre d'articles ### 2. Formulaire article (`post_form.php`) Interface d'édition des tags : - Affichage des catégories existantes + leurs tags (cases à cocher ou input dynamique) - Possibilité d'ajouter une nouvelle catégorie et de nouveaux tags à la volée - Saisie libre (pas de liste fermée imposée) ### 3. Affichage article (`post_view.php`) - Afficher les tags groupés par catégorie sous le titre ou en pied d'article - Chaque tag est un lien vers la page filtrée par tag ### 4. Liste des articles (`post_list.php`) - Afficher les tags de chaque article dans la vignette - Permettre le filtrage par tag via paramètre URL (`?cat=tech&tag=php`) ### 5. Page d'index des tags (optionnel) - Route `/tags` listant toutes les catégories, leurs tags, et le nombre d'articles associés ## Migration Les articles existants n'ont pas de champ `tags` — le code doit gérer l'absence du champ sans erreur. Pas de migration de données requise. ## Critères d'acceptation - [ ] `meta.json` peut contenir un objet `tags` structuré par catégorie - [ ] `ArticleManager` lit/écrit les tags sans erreur, y compris si le champ est absent - [ ] Le formulaire d'édition permet d'ajouter/supprimer des tags par catégorie - [ ] Les tags s'affichent dans la vue article, groupés par catégorie - [ ] Chaque tag est cliquable et filtre la liste des articles - [ ] Le filtrage `?cat=X&tag=Y` fonctionne sur la page liste - [ ] PHPStan passe sans erreur de type sur le champ `tags` - [ ] Pas de régression sur les articles sans tags
Author
Owner

Ticket migré vers le dépôt Folio : cedricAbonnel/folio#26

Ticket migré vers le dépôt Folio : https://git.abonnel.fr/cedricAbonnel/folio/issues/26
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: cedricAbonnel/varlog#37