Types de contenu
Les types de contenu (content types ou node types) sont la base de la modélisation dans Drupal. Chaque type définit une structure de données réutilisable.
🤔 Qu’est-ce qu’un type de contenu ?
Section intitulée « 🤔 Qu’est-ce qu’un type de contenu ? »Un type de contenu est un modèle pour créer du contenu. Il définit :
- Les champs disponibles (titre, image, prix…)
- Les paramètres de publication
- Les modes d’affichage
- Les permissions associées
Exemples concrets
Section intitulée « Exemples concrets »| Type de contenu | Utilisation |
|---|---|
| Article | Actualités, blog |
| Page | Pages statiques |
| Produit | Articles à vendre |
| Événement | Calendrier |
| Témoignage | Avis clients |
Types par défaut dans Drupal
Section intitulée « Types par défaut dans Drupal »Drupal installe deux types par défaut :
- Article : Pour les contenus chronologiques (blog, actualités)
- Page de base : Pour les pages statiques (À propos, Contact)
📝 Conventions de nommage importantes
Section intitulée « 📝 Conventions de nommage importantes »Exemples de correction
Section intitulée « Exemples de correction »| Nom d’affichage | Machine name généré | Machine name correct |
|---|---|---|
| Produit | produit ❌ | product ✅ |
| Article de Blog | article_de_blog ❌ | blog_article ✅ |
| Slide | slide ✅ | slide ✅ |
| Témoignage | témoignage ❌ | testimonial ✅ |
🏗️ Créer un type de contenu
Section intitulée « 🏗️ Créer un type de contenu »Via l’interface
Section intitulée « Via l’interface »-
Aller à Structure > Types de contenu (
/admin/structure/types) -
Cliquer sur Ajouter un type de contenu
-
Remplir les informations de base :
- Nom : Produit
- Nom système (machine name) :
product(généré automatiquement - corrigez si nécessaire) - Description : Articles de la boutique TailStore
-
Configurer les paramètres de soumission :
- Instructions de soumission (optionnel)
- Aperçu avant envoi : Optionnel
-
Configurer les paramètres de publication :
- Publié (par défaut)
- Promu en page d’accueil
- Épinglé en haut des listes
-
Configurer les paramètres d’affichage :
- Afficher les informations de l’auteur
- Afficher la date de publication
-
Configurer les options de menu :
- Menus disponibles : (selon besoin)
-
Cliquer sur Enregistrer et gérer les champs
Important
N’oubliez pas de corriger le machine name si Drupal génère un nom français !
Configuration YAML
Section intitulée « Configuration YAML »Après création, le fichier config/sync/node.type.product.yml ressemble à :
langcode: frstatus: truedependencies: { }name: Produittype: productdescription: 'Articles de la boutique TailStore'help: ''new_revision: truepreview_mode: 1display_submitted: false🛍️ Créer le type “Produit”
Section intitulée « 🛍️ Créer le type “Produit” »Créons le type de contenu principal de TailStore :
-
Accéder à la création
/admin/structure/types/add -
Informations de base
Champ Valeur Nom Produit Nom système (Machine name) product Description Articles de la boutique TailStore -
Paramètres de publication
- ✅ Publié
- ❌ Promu en page d’accueil
- ✅ Créer une nouvelle révision
-
Paramètres d’affichage
- ❌ Afficher les informations de l’auteur
- ❌ Afficher la date de publication
-
Enregistrer
📝 Créer le type “Article de Blog”
Section intitulée « 📝 Créer le type “Article de Blog” »-
Accéder à la création
/admin/structure/types/add -
Informations de base
Champ Valeur Nom Article de Blog Nom système (Machine name) blog_article Description Articles du blog TailStore -
Paramètres de publication
- ✅ Publié
- ✅ Promu en page d’accueil (pour le bloc blog)
- ✅ Créer une nouvelle révision
-
Paramètres d’affichage
- ✅ Afficher les informations de l’auteur
- ✅ Afficher la date de publication
-
Enregistrer
🎠 Créer le type “Slide”
Section intitulée « 🎠 Créer le type “Slide” »-
Accéder à la création
/admin/structure/types/add -
Informations de base
Champ Valeur Nom Slide Nom système (Machine name) slide Description Slides du carrousel de la page d’accueil -
Paramètres de publication
- ✅ Publié
- ❌ Promu en page d’accueil
- ❌ Créer une nouvelle révision
-
Paramètres d’affichage
- ❌ Afficher les informations de l’auteur
- ❌ Afficher la date de publication
-
Enregistrer
🔧 Modifier un type existant
Section intitulée « 🔧 Modifier un type existant »Pour modifier un type de contenu :
- Aller à
/admin/structure/types - Cliquer sur Modifier à côté du type
- Effectuer les changements
- Enregistrer
Via Drush
Section intitulée « Via Drush »# Voir les informations d'un typedrush config:get node.type.product
# Modifier une propriétédrush config:set node.type.product description "Nouvelle description"🗑️ Supprimer un type de contenu
Section intitulée « 🗑️ Supprimer un type de contenu »Méthode sûre : Suppression manuelle
Section intitulée « Méthode sûre : Suppression manuelle »Pour supprimer un type de contenu en toute sécurité :
-
Vérifiez s’il y a du contenu :
Fenêtre de terminal # Compter les contenus par typedrush sql-query "SELECT type, COUNT(*) as count FROM node GROUP BY type;" -
Supprimez le contenu au préalable :
Fenêtre de terminal # Via l'interface : /admin/content# OU via Drush (supprime TOUS les contenus du type) :drush entity:delete node --bundle=product -
Supprimez le type :
- Aller à
/admin/structure/types - Cliquer sur Supprimer dans le menu déroulant
- Aller à
-
Exportez la configuration :
Fenêtre de terminal drush cex -y
❌ Méthode dangereuse : Suppression manuelle des fichiers YAML
Section intitulée « ❌ Méthode dangereuse : Suppression manuelle des fichiers YAML »NE FAITES PAS ÇA :
# Supprimer manuellement le fichier de configrm config/sync/node.type.product.yml
# Importer (❌ PLANTE si contenu existe)drush cim -yPourquoi ça plante ?
- Vous supprimez directement le fichier YAML
- Drupal essaie de supprimer le type de contenu à l’import
- Mais il y a encore des nœuds qui référencent ce type
- Contrainte de base de données violée → erreur fatale
Note : Si vous faites les modifications via l’interface et exportez (drush cex), il n’y a aucun danger.
💡 Solution de secours
Section intitulée « 💡 Solution de secours »Si vous avez déjà fait l’erreur :
# Recréer temporairement le typedrush php-eval "\Drupal\node\Entity\NodeType::create([ 'type' => 'product', 'name' => 'Product',])->save();"
# Supprimer le contenudrush entity:delete node --bundle=product
# Maintenant supprimer le type normalement📋 Propriétés communes
Section intitulée « 📋 Propriétés communes »Tous les types de contenu partagent des propriétés de base :
| Propriété | Description |
|---|---|
title | Titre du contenu (obligatoire) |
body | Corps du texte (optionnel, peut être supprimé) |
nid | ID du nœud (auto) |
uuid | Identifiant universel unique (auto) |
created | Date de création (auto) |
changed | Date de modification (auto) |
uid | Auteur (référence utilisateur) |
status | Publié/non publié |
promote | Promu en page d’accueil |
sticky | Épinglé |
📊 Architecture de notre projet
Section intitulée « 📊 Architecture de notre projet »Après cette section, vous aurez créé :
Types de contenu├── product # Produits de la boutique│ └── (champs à ajouter)├── blog_article # Articles du blog│ └── (champs à ajouter)└── slide # Carrousel page d'accueil └── (champs à ajouter)💾 Exporter la configuration
Section intitulée « 💾 Exporter la configuration »N’oubliez pas d’exporter après chaque création :
drush cex -ygit add config/sync/node.type.*.ymlgit commit -m "feat: add product, blog_article and slide content types"⚠️ Import de configuration dangereux
Scénarios :
- ✅ Sûr : Modifications via interface →
drush cex→ OK - ❌ Dangereux : Suppression directe du fichier YAML →
drush cim→ PLANTE
✅ Vérification
Section intitulée « ✅ Vérification »Vérifiez que vos types sont créés :
drush entity:type:list --group=content | grep -E "product|blog|slide"Ou dans l’interface : /admin/structure/types
🚀 Étape suivante
Section intitulée « 🚀 Étape suivante »Passez aux Champs pour ajouter les champs personnalisés à nos types de contenu.