Relations entre entités
🔗 Entity Reference
Section intitulée « 🔗 Entity Reference »Le champ Entity Reference permet de créer des relations entre différentes entités Drupal :
- Contenu → Taxonomie
- Contenu → Contenu
- Contenu → Utilisateur
- Contenu → Média
C’est le cœur du modèle relationnel de Drupal !
🛒 Champs de référence pour le type “Product”
Section intitulée « 🛒 Champs de référence pour le type “Product” »1. Champ Catégorie (field_category)
Section intitulée « 1. Champ Catégorie (field_category) »Ce champ a normalement été créé dans l’Étape 2. Vérifions sa configuration :
-
Allez dans Structure → Content types → Product → Manage fields
-
Si le champ
field_categoryn’existe pas, créez-le : -
Create a new field → Reference → Taxonomy term
Configuration du widget
Section intitulée « Configuration du widget »Dans Manage form display :
| Widget | Utilisation |
|---|---|
| Select list | Peu d’options (< 20) |
| Autocomplete | Beaucoup d’options |
| Check boxes/radio | Afficher toutes les options |
→ Choisissez Select list pour ce champ
2. Champ Marque (field_brand)
Section intitulée « 2. Champ Marque (field_brand) »-
Create a new field → Reference → Taxonomy term
-
Configurez :
| Paramètre | Valeur |
|---|---|
| Label | Marque |
| Machine name | field_brand |
| Allowed vocabularies | ✓ Marque |
| Required | Yes |
| Allowed number of values | 1 |
Widget : Select list
3. Champ Tailles (field_sizes)
Section intitulée « 3. Champ Tailles (field_sizes) »Ce champ permet de sélectionner plusieurs tailles disponibles.
| Paramètre | Valeur |
|---|---|
| Label | Tailles disponibles |
| Machine name | field_sizes |
| Allowed vocabularies | ✓ Taille |
| Required | No |
| Allowed number of values | Unlimited |
Widget : Checkboxes/radio buttons
4. Champ Couleurs (field_colors)
Section intitulée « 4. Champ Couleurs (field_colors) »Même logique que les tailles.
| Paramètre | Valeur |
|---|---|
| Label | Couleurs disponibles |
| Machine name | field_colors |
| Allowed vocabularies | ✓ Couleur |
| Required | No |
| Allowed number of values | Unlimited |
Widget : Checkboxes/radio buttons
📝 Champ de référence pour “Blog Article”
Section intitulée « 📝 Champ de référence pour “Blog Article” »Champ Catégorie Blog (field_blog_category)
Section intitulée « Champ Catégorie Blog (field_blog_category) »-
Allez dans Structure → Content types → Blog Article → Manage fields
-
Create a new field → Reference → Taxonomy term
-
Configurez :
| Paramètre | Valeur |
|---|---|
| Label | Catégorie |
| Machine name | field_blog_category |
| Allowed vocabularies | ✓ Catégorie Blog |
| Required | Yes |
| Allowed number of values | 1 |
Widget : Select list
🎨 Configurer l’affichage des références
Section intitulée « 🎨 Configurer l’affichage des références »Manage display
Section intitulée « Manage display »Allez dans Manage display de chaque type de contenu.
Options de formatage pour les références taxonomie
Section intitulée « Options de formatage pour les références taxonomie »| Formatter | Rendu |
|---|---|
| Label | Texte simple : “Nike” |
| Label (linked) | Lien vers la page du terme : <a href="/taxonomy/term/1">Nike</a> |
| Entity ID | Juste l’ID : “1” |
| Rendered entity | Affiche le terme avec son template |
Recommandations :
Labelpour affichage simpleLabel (linked)si la page du terme existe et est utileRendered entitypour les marques avec logo
Exemple de configuration
Section intitulée « Exemple de configuration »Pour le type Product :
| Champ | Formatter | Format |
|---|---|---|
| field_category | Label (linked) | - |
| field_brand | Label | - |
| field_sizes | Label | Inline, séparé par ”, “ |
| field_colors | Label | Inline, séparé par ”, ” |
📊 Récapitulatif des relations
Section intitulée « 📊 Récapitulatif des relations »┌──────────────────────────────────────────────────────────┐│ PRODUCT │├──────────────────────────────────────────────────────────┤│ ││ field_category ──────► product_category (1) ││ └── Hommes, Femmes, etc. ││ ││ field_brand ──────► brand (1) ││ └── Nike, Adidas, etc. ││ ││ field_sizes ──────► size (*) ││ └── S, M, L, XL... ││ ││ field_colors ──────► color (*) ││ └── Rouge, Bleu, Noir... ││ │└──────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────┐│ BLOG ARTICLE │├──────────────────────────────────────────────────────────┤│ ││ field_blog_category ──────► blog_category (1) ││ └── Tendances, Conseils... ││ │└──────────────────────────────────────────────────────────┘
Légende : (1) = une seule valeur, (*) = valeurs multiples🔧 Création via YAML (configuration)
Section intitulée « 🔧 Création via YAML (configuration) »Utilisez l’interface comme décrit ci-dessus.
Exemple de field.field.node.product.field_brand.yml :
langcode: frstatus: truedependencies: config: - field.storage.node.field_brand - node.type.product - taxonomy.vocabulary.brandid: node.product.field_brandfield_name: field_brandentity_type: nodebundle: productlabel: Marquedescription: 'Sélectionnez la marque du produit'required: truetranslatable: falsedefault_value: []default_value_callback: ''settings: handler: 'default:taxonomy_term' handler_settings: target_bundles: brand: brand sort: field: name direction: asc auto_create: falsefield_type: entity_reference🧪 Tester les relations
Section intitulée « 🧪 Tester les relations »Créer un produit de test
Section intitulée « Créer un produit de test »- Allez dans Content → Add content → Product
- Remplissez les champs :
- Titre :
T-shirt Nike Sportswear - Catégorie :
T-shirts - Marque :
Nike - Tailles :
S,M,L,XL - Couleurs :
Noir,Blanc,Rouge - Prix :
39.99 - Description :
T-shirt confortable pour le sport
- Titre :
- Save
Vérifier les valeurs
Section intitulée « Vérifier les valeurs »# Voir les champs d'un nœuddrush ev "\$node = \Drupal::entityTypeManager()->getStorage('node')->load(1);echo 'Catégorie: ' . \$node->field_category->entity->label() . PHP_EOL;echo 'Marque: ' . \$node->field_brand->entity->label() . PHP_EOL;echo 'Tailles: ';foreach (\$node->field_sizes as \$size) { echo \$size->entity->label() . ' ';}echo PHP_EOL;"🔍 Requêtes sur les relations
Section intitulée « 🔍 Requêtes sur les relations »Trouver les produits d’une catégorie
Section intitulée « Trouver les produits d’une catégorie »// Via Entity Query$query = \Drupal::entityTypeManager() ->getStorage('node') ->getQuery() ->accessCheck(TRUE) ->condition('type', 'product') ->condition('status', 1) ->condition('field_category.entity.name', 'T-shirts');
$nids = $query->execute();Trouver les produits d’une marque
Section intitulée « Trouver les produits d’une marque »// Récupérer le TID de la marque$brand_tid = \Drupal::entityTypeManager() ->getStorage('taxonomy_term') ->getQuery() ->accessCheck(FALSE) ->condition('vid', 'brand') ->condition('name', 'Nike') ->execute();
$brand_tid = reset($brand_tid);
// Trouver les produits de cette marque$query = \Drupal::entityTypeManager() ->getStorage('node') ->getQuery() ->accessCheck(TRUE) ->condition('type', 'product') ->condition('field_brand', $brand_tid);
$nids = $query->execute();💾 Exporter la configuration
Section intitulée « 💾 Exporter la configuration »# Exporter tous les fichiers de configurationdrush cex -y
# Vérifier les fichiers de champs créésls config/sync/field.field.node.product.field_*.ymlFichiers attendus :
field.field.node.product.field_category.ymlfield.field.node.product.field_brand.ymlfield.field.node.product.field_sizes.ymlfield.field.node.product.field_colors.ymlfield.field.node.blog_article.field_blog_category.yml✅ Points de validation
Section intitulée « ✅ Points de validation »Vérifiez que :
- field_category créé et lié à product_category
- field_brand créé et lié à brand
- field_sizes créé (multiple) et lié à size
- field_colors créé (multiple) et lié à color
- field_blog_category créé et lié à blog_category
- Widgets configurés dans Manage form display
- Formatters configurés dans Manage display
- Au moins un produit de test créé avec les références
- Configuration exportée
🔜 Prochaine étape
Section intitulée « 🔜 Prochaine étape »Excellent ! Les taxonomies et les relations sont en place. Passons aux Exercices pour consolider ces acquis.