Taxonomies
Les taxonomies permettent de classer et organiser vos contenus selon différents critères. ArtisanCMS propose un système flexible supportant les catégories hiérarchiques, les tags plats et les taxonomies personnalisées.
Architecture
Section intitulée « Architecture »Le système de taxonomies repose sur deux modèles principaux :
- Taxonomy : définit un type de classement (ex: “Catégories”, “Tags”)
- TaxonomyTerm : représente un terme individuel au sein d’une taxonomie (ex: “Tutoriels”, “Laravel”)
// Exemple de structure$taxonomy = Taxonomy::where('slug', 'categories')->first();$terms = $taxonomy->terms; // Collection de TaxonomyTermModèle Taxonomy
Section intitulée « Modèle Taxonomy »Le modèle Taxonomy (App\Models\Taxonomy) définit un type de classement :
| Champ | Type | Description |
|---|---|---|
name | string | Nom de la taxonomie (ex: “Catégories”) |
slug | string | Identifiant unique |
description | text | Description de la taxonomie |
is_hierarchical | boolean | Support de la hiérarchie parent-enfant |
content_types | json | Types de contenu associés |
Taxonomies par défaut
Section intitulée « Taxonomies par défaut »ArtisanCMS crée automatiquement deux taxonomies lors de l’installation :
- Catégories (
categories) : taxonomie hiérarchique pour la classification principale - Tags (
tags) : taxonomie plate pour le marquage transversal
Modèle TaxonomyTerm
Section intitulée « Modèle TaxonomyTerm »Chaque terme (App\Models\TaxonomyTerm) appartient à une taxonomie :
| Champ | Type | Description |
|---|---|---|
taxonomy_id | integer | Référence vers la taxonomie parente |
name | string | Nom du terme |
slug | string | Identifiant URL |
description | text | Description du terme |
parent_id | integer | Terme parent (taxonomies hiérarchiques) |
order | integer | Ordre d’affichage |
Hiérarchie des catégories
Section intitulée « Hiérarchie des catégories »Les taxonomies hiérarchiques supportent des termes imbriqués :
Développement web├── Frontend│ ├── React│ └── Vue.js└── Backend ├── Laravel └── Node.jsRelation polymorphique
Section intitulée « Relation polymorphique »L’association entre les termes et les contenus utilise une table pivot polymorphique cms_termables :
// Table cms_termablesSchema::create('cms_termables', function (Blueprint $table) { $table->id(); $table->foreignId('taxonomy_term_id'); $table->morphs('termable'); // termable_id + termable_type});Cette approche permet d’associer les memes termes à des pages, articles et entrées de contenu personnalisées sans tables de jonction supplémentaires.
Utilisation avec les contenus
Section intitulée « Utilisation avec les contenus »Associer des termes
Section intitulée « Associer des termes »// Associer des catégories à un article$post->taxonomyTerms()->attach([$termId1, $termId2]);
// Remplacer toutes les catégories$post->taxonomyTerms()->sync([$termId1, $termId3]);Requeter par terme
Section intitulée « Requeter par terme »// Articles d'une catégorie spécifique$posts = Post::whereHas('taxonomyTerms', function ($query) { $query->where('slug', 'tutoriels');})->published()->get();Types de contenu supportés
Section intitulée « Types de contenu supportés »Les taxonomies sont utilisables avec :
- Pages : classement thématique des pages
- Articles : catégories et tags de blog
- Entrées de contenu : classification des types personnalisés
Le trait HasContentFeatures fournit automatiquement la relation taxonomyTerms() à tous ces modèles.
Administration
Section intitulée « Administration »Le Admin\TaxonomyController gère l’ensemble des opérations CRUD :
- Création et édition de taxonomies
- Gestion des termes (ajout, suppression, réorganisation)
- Interface drag-and-drop pour l’arborescence des catégories
- Assignation aux types de contenu
TaxonomyService
Section intitulée « TaxonomyService »Le TaxonomyService encapsule la logique métier :
class TaxonomyService{ public function createTerm(Taxonomy $taxonomy, array $data): TaxonomyTerm; public function updateTerm(TaxonomyTerm $term, array $data): TaxonomyTerm; public function deleteTerm(TaxonomyTerm $term): bool; public function reorderTerms(array $order): void; public function getTermTree(Taxonomy $taxonomy): Collection;}Ce service est utilisé par le contrôleur et peut etre injecté dans vos propres plugins ou extensions.
Créer une taxonomie personnalisée
Section intitulée « Créer une taxonomie personnalisée »Pour ajouter une taxonomie adaptée à vos besoins (ex: “Niveaux de difficulté” pour des tutoriels) :
- Accédez à la section Taxonomies dans l’administration
- Cliquez sur “Nouvelle taxonomie”
- Définissez le nom, le slug et le type (hiérarchique ou plate)
- Assignez-la aux types de contenu souhaités
- Ajoutez vos termes