Entités personnalisées
Introduction
Drupal offre la possibilité de créer des entités personnalisées. Elles permettent de définir des structures de données entièrement spécifiques à vos besoins.
Par exemple, dans un contexte d’e-commerce, vous pourriez créer une entité personnalisée telle que « Product » pour mieux répondre aux exigences du projet.
Contrairement aux nodes, les entités personnalisées ne sont pas limitées par les fonctionnalités éditoriales prédéfinies et n’ont pas forcément vocation à être affichées aux visiteurs. Elles peuvent représenter n’importe quel type de données, qu’il s’agisse de produits dans un système de commerce électronique, d’événements dans un calendrier, ou de tout autre concept défini par le projet.
1. Cas d’utilisation
Lorsqu’il s’agit de choisir entre la création d’un nouveau type de contenu (node) ou d’une entité personnalisée, il est essentiel de prendre en compte la nature et l’objectif des données que vous manipulez.
Les entités personnalisées dans Drupal offrent une approche flexible et puissante pour modéliser des données au-delà des fonctionnalités des nodes standards.
Voyons quelques cas d’utilisation afin de vous aider à envisager comment...
Entités simples et bundleables
Lorsque vous explorez le concept des entités personnalisées dans Drupal, deux notions importantes émergent : les entités dites « simples » (simple entities) et les entités « bundleables » (bundleable entities). Comprendre cette distinction est fondamental pour une modélisation efficace de vos données.
1. Entité simple
Une entité simple est une unité autonome, ne disposant pas de sous-ensembles ou de catégories. Elle représente une instance unique de données sans nécessiter de regroupement avec d’autres entités similaires. Un exemple concret d’entité simple pourrait être un enregistrement de journal, où chaque entrée est indépendante et ne nécessite pas de classification particulière.
2. Entité bundleable
Une entité bundleable est structurée de manière à permettre la création de sous-ensembles, également appelés bundles. Chaque bundle est une catégorie ou une variation particulière de l’entité, partageant une structure de base commune, ce qui la rend assez proche de la gestion des nodes par type de contenu. Prenons l’exemple d’un système de gestion de produits pour un site e-commerce où l’entité principale...
Générer une entité simple
Créez une entité simple que vous appellerez « Project ».
Pour rappel, votre module cible doit être désinstallé avant de poursuivre la génération d’entité.
Si votre projet n’est pas versionné avec GIT, il est judicieux de versionner a minima votre module cible au préalable afin de mieux visualiser les modifications apportées par Drush.
Voici la liste des questions qui vous sont posées lors d’utilisation de la commande :
drush generate entity:content
-
Module machine name : il s’agit du nom de machine du module dans lequel l’entité sera générée.
-
Entity type label : c’est l’étiquette (label) qui sera associée à votre type d’entité. Dans ce cas, c’est le label Project.
-
Entity type ID : c’est l’identifiant de votre type d’entité. Par défaut, il est généré à partir du nom du module et du label. Vous pouvez le laisser vide.
-
Entity class : c’est la classe associée à votre entité. Par défaut, elle est générée à partir du label.
-
Entity base path : il s’agit du chemin de base pour les routes associées à votre entité. Par exemple, /Project signifie que les routes commenceront par /Project.
-
Make the entity type fieldable? : on vous demande si votre entité peut profiter du système de champs Drupal qui est utilisé pour les nodes. Si vous répondez No, les champs seront définissables uniquement en code.
-
Make the entity type revisionable? : on vous demande si les instances de votre entité doivent être versionnées. Répondez No si vous ne souhaitez pas de gestion de révision.
-
Make the entity type translatable? : on vous demande si votre entité doit être traduisible. Répondez No si votre entité n’a pas besoin de support multilingue.
-
The entity type has bundle? : on vous demande si votre entité sera bundleable. Répondez No pour une entité simple.
-
Create canonical page? : on vous demande si une page canonique (d’affichage principal) doit être créée pour cette entité. Répondez Yes pour générer...
Générer une entité bundleable
Dans la continuité de votre exploration du développement d’entités Drupal, nous allons maintenant aborder un concept plus avancé : les entités bundleables. Contrairement aux entités simples que vous avez créées précédemment, les entités bundleables permettent de regrouper des objets sous différentes catégories : les bundles. Cette approche offre une flexibilité accrue pour organiser et gérer des données complexes dans vos projets Drupal.
Pour mieux comprendre ce concept, comparez-le aux types de contenu (node) que vous connaissez déjà. Si les types de contenu représentent des structures génériques pour des contenus similaires (par exemple des articles et des pages), les entités bundleables permettent de créer des bundles spécifiques, agissant comme des sous-types d’entités.
Dans cette section, nous travaillerons avec un exemple concret : la création d’une entité « Product » bundleable. Chaque Product pourra appartenir à une catégorie spécifique, définissant ainsi un bundle. Par exemple, vous pourrez avoir des Products regroupés en Electronics, Clothing ou Books. Cette approche offre une manière structurée de gérer différents types de produits au sein d’un même système.
Il est important de noter que Drupal offre déjà un module puissant pour la gestion de produits et de transactions commerciales, appelé Commerce. Ce module étend considérablement les fonctionnalités liées aux produits, à la gestion de catalogue, aux paniers d’achats et aux processus de paiement.
Dans cette section, vous allez néanmoins créer une entité Product à des fins pédagogiques, afin de vous donner une compréhension approfondie de la création d’entités bundleables dans Drupal. Bien que nous n’utilisions pas le module Commerce pour cette démonstration, il pourrait être plus judicieux d’explorer le module Commerce pour des projets réels de gestion de produits en ligne. Ce module offre des solutions robustes et éprouvées pour répondre...