Maison >développement back-end >tutoriel php >Construisez vos propres entités personnalisées à Drupal - Configuration

Construisez vos propres entités personnalisées à Drupal - Configuration

William Shakespeare
William Shakespeareoriginal
2025-02-21 10:59:08340parcourir

Build Your Own Custom Entities in Drupal - Setup

Points clés

  • Les entités de Drupal sont un moyen puissant d'organiser des données et peuvent être personnalisées pour représenter un type spécifique d'informations. Ce didacticiel montre comment créer un type d'entité personnalisé appelé projet qui comprend des attributs tels que le titre, la description et la date limite.
  • Pour créer un nouveau type d'entité, sa définition de schéma doit être déclarée, qui générera une table de données de données de données de données d'entité. Ce tutoriel fournit un exemple de code pour créer une table "Demo_Projects" avec quatre colonnes (ID, nom, description et échéance).
  • Le module API de l'entité doit être activé sur votre site et défini comme une dépendance pour les modules personnalisés, qui fournit de nombreuses capacités de traitement des entités qui manquent Drupal Core. Cela comprend la création de nouvelles entités, les enregistrer dans la base de données et les afficher.
  • Ce didacticiel explique également comment remplacer la méthode BuildContent () de la classe EntityApIController par défaut pour afficher votre entité, et comment créer une liste d'entités via la fonction d'assistance Entity_View (). La deuxième partie du tutoriel introduira la création d'une page pour afficher des entités de projet individuelles, les rendant dans le champ via l'interface utilisateur et les exposant aux vues pour les requêtes et la liste d'affichage.

Les entités Drupal sont un excellent moyen d'organiser des données. Si vous connaissez les nœuds, les termes de classification, les commentaires ou les utilisateurs, vous devez également savoir que ce sont des entités depuis Drupal 7. Un autre aspect important à leur sujet est qu'ils peuvent être sur le terrain via l'API Field. Dans ce tutoriel, je vais vous montrer comment définir votre propre type d'entité personnalisé et commencer avec. Pourquoi quelqu'un veut faire cela au lieu d'utiliser des nœuds? Parce que même s'ils sont super, les nœuds peuvent parfois être trop complexes. Vous n'avez peut-être pas besoin de nombreuses fonctionnalités, telles que des révisions ou des commentaires.

Dans ce didacticiel, nous définirons notre propre type d'entité personnalisé appelé "Project" pour représenter nos informations simples sur le projet (titre, description et échéance). Nous apprendrons ensuite un peu sur l'utilisation de ce type d'entité.

Pour continuer à apprendre, je suppose que vous savez comment écrire un module personnalisé de base (mon module est nommé démo). Vous pouvez trouver d'excellents tutoriels sur ce sujet ici. Continuez à écrire le fichier .info et à la création d'un fichier .module et .install vide. J'ai également configuré un référentiel GIT où vous pouvez obtenir tout le code source de ce didacticiel (une branche pour chaque section, deux sections seront publiées).

De plus, vous devez activer le module API Contrib de l'entité sur votre site et le définir comme dépendance du module personnalisé. Le module API de l'entité est très puissant lorsqu'il s'agit d'entités car il fournit de nombreuses fonctionnalités qui manquent le noyau Drupal.

Définissez notre propre type d'entité Drupal

La création d'un nouveau type d'entité nécessite d'abord de déclarer sa définition de schéma. C'est-à-dire d'écrire du code qui générera la table de base de données de données d'entité. Dans mon fichier démo.install, j'ai le code suivant:

<code class="language-php">/**
 * Implements hook_schema().
 */
function demo_schema() {

  $schema = array();

  $schema['demo_projects'] = array(
    'description' => 'The base table for the Project entity',
    'fields' => array(
      'id' => array(
        'description' => 'Primary key of the Project entity',
        'type' => 'serial',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ),
      'name' => array(
        'description' => 'Project name.',
        'type' => 'varchar',
        'length' => 255,
        'not null' => FALSE,
      ),
      'description' => array(
        'description' => 'Project description.',
        'type' => 'text',
        'size' => 'big',
        'not null' => FALSE,
        'default' => NULL
      ),
      'deadline' => array(
        'description' => 'Project deadline.',
        'type' => 'int',
        'length' => 11,
        'not null' => FALSE,
      ),
    ),
    'primary key' => array('id'),
  );

  return $schema;
}</code>

Il s'agit d'une simple implémentation de Hook_schema (). Ce n'est pas grave.

Ensuite, nous devons implémenter Hook_entity_info (). Nous pouvons spécifier beaucoup d'options dans ce crochet, mais voici les options les plus basiques et les plus requises (c'est dans le fichier Demo.Module):

<code class="language-php">/**
 * Implements hook_entity_info().
 */
function demo_entity_info() {

  $info = array();

  $info['project'] = array(
    'label' => t('Project'),
    'base table' => 'demo_projects',
    'entity keys' => array(
      'id' => 'id',
      'label' => 'name',
    ),
    'module' => 'demo',
    'entity class' => 'Entity',
    'controller class' => 'ProjectEntityController',
  );

  return $info;
}</code>

Avec ce crochet, nous renvoyons une nouvelle clé dans le tableau $ info, qui représente le nom de la machine d'entité. Dans ce tableau, nous spécifions des options (nous ajouterons plus d'options pendant ce tutoriel). Nous allons maintenant nous en tenir à l'utilisation de balises (le nom lisible du type d'entité), la table de base qui stocke les données d'entité, les clés d'entité qui agissent comme des attributs de l'identificateur d'entité et le module qui spécifie quel module définit le type d'entité. Le dernier n'est pas obligatoire, mais est recommandé.

De cette manière, nous enregistrons notre propre type d'entité de base avec Drupal. Pour tester si cela fonctionne, activez le module pour la première fois et vérifiez si le tableau a été créé dans la base de données. Ensuite, remplissez-le de quelques lignes afin qu'il y ait quelque chose à utiliser:

<code class="language-sql">INSERT INTO `demo_projects` (`id`, `name`, `description`, `deadline`)
VALUES
    (1, 'Summer House', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397501105),
    (2, 'Winter House', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397501132);</code>

Enfin, utilisez Hook_Menu () pour enregistrer un chemin (pour tous les chemins uniquement pour les tests) en utilisant Drupal et coller ce qui suit dans sa fonction de rappel:

<code class="language-php">$projects = entity_load('project', array(1, 2));
dpm($projects);
return 'Some string';</code>

Tout d'abord, nous utilisons la fonction Entity_Load () pour charger des entités du projet avec IDS 1 et 2, puis nous utilisons la fonction DPM () (alors assurez-vous que Devel est activé sur votre site pour les tests) pour les imprimer dans écran supérieur. N'oubliez pas que la fonction de rappel de la page doit renvoyer quelque chose, sinon elle ne sera pas construite.

Maintenant, si vous accédez à cette page, vous verrez des données pour 2 entités dans la base de données de Krumo.

Alternativement, vous pouvez utiliser la classe EntityFieldQuery pour interroger de nouvelles entités en fonction de toutes les propriétés que vous souhaitez (pas seulement ID). Pour plus d'informations sur le fonctionnement, vous pouvez consulter ce tutoriel SitePoint, qui vous aidera à démarrer.

Classes et contrôleurs d'entités

Malheureusement, le noyau Drupal ne fournit pas trop de fonctions d'assistance pour gérer les entités (entity_load () est presque unique). Cependant, le module API de l'entité comble cette lacune.

Pour utiliser ses fonctionnalités, nous devons modifier les informations d'entité que nous avons déclarées plus tôt et spécifier la classe PHP qui peut être utilisée pour gérer l'entité. Maintenant, nous allons ajouter deux clés supplémentaires au tableau de projet tapé dans l'implémentation hook_entity_info ():

Le code susmentionné contient déjà 'entity class' => 'Entity', 'controller class' => 'ProjectEntityController',

EntityApIController Class (situé dans le fichier entité.controller.inc du module) fournit des valeurs par défaut raisonnables pour les entités de traitement. Il étend la classe Drupal Core DrupaldefaultEntityController par défaut et est responsable (entre autres choses) effectuant des opérations CRUD.

Les deux classes peuvent être étendues dans votre module personnalisé pour ajuster les fonctionnalités (telles que l'interrogation, le chargement ou l'affichage des entités). Nous verrons comment faire cela plus tard.

Mais d'abord, je veux vous montrer comment sauver une nouvelle entité. Actuellement, il y a 2 enregistrements dans ma base de données avec IDS 1 et 2. Je souhaite ajuster le code que nous avons écrit dans la fonction de rappel de la page de test ci-dessus pour créer une nouvelle entité avec ID 3 sans lui. Cela pourrait ressembler à ceci:

<code class="language-php">/**
 * Implements hook_schema().
 */
function demo_schema() {

  $schema = array();

  $schema['demo_projects'] = array(
    'description' => 'The base table for the Project entity',
    'fields' => array(
      'id' => array(
        'description' => 'Primary key of the Project entity',
        'type' => 'serial',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ),
      'name' => array(
        'description' => 'Project name.',
        'type' => 'varchar',
        'length' => 255,
        'not null' => FALSE,
      ),
      'description' => array(
        'description' => 'Project description.',
        'type' => 'text',
        'size' => 'big',
        'not null' => FALSE,
        'default' => NULL
      ),
      'deadline' => array(
        'description' => 'Project deadline.',
        'type' => 'int',
        'length' => 11,
        'not null' => FALSE,
      ),
    ),
    'primary key' => array('id'),
  );

  return $schema;
}</code>

Comme vous pouvez le voir, nous essayons maintenant de charger 3 entités du projet et de vérifier si la troisième entité existe. S'il n'existe pas, nous utiliserons la fonction d'assistance Entity_Create () fournie par l'API de l'entité, définirons la propriété sur une valeur aléatoire, puis utilisez la méthode Save () sur l'entité pour persister dans la base de données. Cette méthode est fournie par la classe d'entité, et son travail consiste à appeler la méthode Save () sur la classe de contrôleur que nous avons définie ci-dessus. Cette méthode effectuera la logique requise pour persister l'entité. Mais tout cela se produit dans les coulisses, nous n'avons pas à nous en soucier.

Si vous rechargez la page, vous ne devriez voir que les 2 entités du projet renvoyées, mais si la deuxième fois, vous devriez en avoir 3.

Couvrir la classe d'entité

La dernière chose que je veux vous montrer dans cette partie de ce tutoriel est de savoir comment afficher votre entité. Pour ce faire, nous nous en tiendrons à la fonction de rappel de page que nous avons utilisée et en faisons une vraie liste.

Tout d'abord, nous devons remplacer la méthode buildContent () de la classe entityapiController par défaut. La raison en est que le contrôleur ne peut pas faire d'hypothèses sur nos données, nous devons donc fournir des informations sur la façon de l'afficher. Tout d'abord, déclarons la classe de contrôleur qui étend la classe précédente:

<code class="language-php">/**
 * Implements hook_entity_info().
 */
function demo_entity_info() {

  $info = array();

  $info['project'] = array(
    'label' => t('Project'),
    'base table' => 'demo_projects',
    'entity keys' => array(
      'id' => 'id',
      'label' => 'name',
    ),
    'module' => 'demo',
    'entity class' => 'Entity',
    'controller class' => 'ProjectEntityController',
  );

  return $info;
}</code>

J'ai sélectionné le nom de classe ProjectEntityController, vous devez vous assurer de remplacer la valeur que vous définissez pour la clé de classe de contrôleur dans l'implémentation hook_entity_info (). N'oubliez pas.

Dans cette classe, nous pouvons copier le nom de la méthode de la classe d'origine et le faire renvoyer ce que sa classe parent reviendra:

Dans cette classe, nous pouvons copier le nom de la méthode de la classe d'origine et le faire renvoyer ce que sa classe parent reviendra. Nous avons essentiellement ajouté deux nouveaux articles au tableau. Le premier enveloppera la description avec <div>, et le second sortira la date formatée entre les étiquettes de paragraphe. Ceci est le thème de base Drupal, si vous ne comprenez pas ce qui se passe ici, veuillez le revoir. Mais vous remarquerez le nom du projet manquant. Drupal le rendra automatiquement car nous le spécifions comme une balise dans la clé d'entité implémentée par Hook_entity_info (). La dernière étape consiste à aller à notre fonction de rappel de page et à le faire afficher notre entité. Une voie rapide (à des fins de démonstration uniquement): <pre class="brush:php;toolbar:false">&lt;code class=&quot;language-sql&quot;&gt;INSERT INTO `demo_projects` (`id`, `name`, `description`, `deadline`) VALUES (1, 'Summer House', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397501105), (2, 'Winter House', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397501132);&lt;/code&gt;</pre> <p> Comme auparavant, nous chargeons d'abord l'entité avec l'ID correspondant. Nous les exécutons ensuite via la fonction Entity_View (), qui appellera éventuellement la méthode BuildContent () que nous venons d'éclairer. Cette fonction renvoie une liste de tableaux rendus pour chaque entité. Nous rendons chacun et stockons le résultat dans le tableau de sortie $, puis nous le concatenons et le retournons. </p> <p> Vous pouvez actualiser la page et vous devriez voir une liste de toutes les entités que vous avez chargées. Assurez-vous que le cache est effacé afin que les modifications soient visibles. </p> <h2> Conclusion </h2> <p> Dans ce tutoriel, nous commençons à apprendre les entités de Drupal en définissant nos propres types d'entités dans le code. Nous avons appris à rédiger des définitions de schéma pour les données qu'ils représentent et à les enregistrer auprès de Drupal. Ensuite, nous voyons la puissance d'utiliser le module API Contrib de l'entité pour gérer les entités d'une manière orientée objet. </p> <p> Dans la deuxième partie de ce tutoriel, nous examinerons trois aspects principaux. Tout d'abord, nous créerons des pages pour afficher des entités de projet individuelles et lancer l'interface de gestion pour la gestion des projets. Deuxièmement, nous le rendrons sur le plan de l'interface utilisateur. Troisièmement, nous l'exposerons aux vues afin que nous puissions faire des requêtes et des affichages de liste appropriés. restez à l'écoute! </p> <h2> FAQ sur la construction d'entités personnalisées à Drupal </h2> <h3> Quelles sont les conditions préalables pour créer une entité personnalisée Drupal? </h3> <p> Avant de commencer à créer des entités personnalisées Drupal, vous devez avoir une compréhension de base de l'API de l'entité de Drupal. Vous devez également être familier avec les concepts de PHP et de programmation orientée objet. De plus, vous devriez avoir mis en place un environnement de développement Drupal. Cela comprend l'installation et la configuration de Drupal sur une machine ou un serveur local. </p> <h3> Comment créer une entité de contenu personnalisée avec un bundle à Drupal? </h3> <p> La création d'une entité de contenu personnalisée avec un bundle dans Drupal implique plusieurs étapes. Tout d'abord, vous devez définir votre entité et ses propriétés dans un module personnalisé. Ensuite, vous devez créer un formulaire pour ajouter et modifier votre entité. Après cela, vous devez définir l'itinéraire pour les opérations de l'entité. Enfin, vous devez créer un constructeur de vue pour afficher votre entité. </p> <h3> Quelle est la différence entre l'entité de contenu et l'entité de configuration dans Drupal? </h3> <p> Dans Drupal, les entités de contenu sont des fragments de contenu qui peuvent être créés, modifiés et supprimés par les utilisateurs. Les exemples incluent les nœuds, les utilisateurs et les commentaires. D'un autre côté, une entité de configuration est un fragment de configuration stocké dans une base de données et peut être exporté vers le code. Les exemples incluent des vues, des styles d'image et des rôles utilisateur. </p> <h3> Comment créer le type d'entité de contenu dans Drupal 8? </h3> <p> La création d'un type d'entité de contenu dans Drupal 8 implique la définition de votre entité et de ses propriétés dans un module personnalisé. Vous devez également créer un formulaire pour ajouter et modifier votre entité, définir l'itinéraire pour les opérations d'entité et créer un constructeur de vue pour afficher votre entité. </p> <h3> Puis-je créer des entités personnalisées dans Drupal à l'aide du module API Entity? </h3> <p> Oui, vous pouvez créer des entités personnalisées dans Drupal à l'aide du module API Entity. Ce module fournit un moyen unifié de gérer les entités et leurs propriétés. Il fournit également des API pour effectuer des opérations sur des entités telles que la création, la lecture, la mise à jour et la suppression. </p> <h3> Quels sont les avantages de la création d'entités douanies Drupal? </h3> <p> La création d'entités personnalisées Drupal vous permet de définir vos propres structures de données et votre logique métier. Cela peut rendre votre site plus efficace et gérable. Les entités personnalisées vous permettent également de profiter de l'API de l'entité de Drupal, qui fournit des outils puissants pour la manipulation des entités. </p> <h3> Comment ajouter des champs aux entités personnalisées de Drupal? </h3> <p> Pour ajouter des champs aux entités personnalisées de Drupal, vous devez utiliser l'API de champ. Cela implique de définir vos champs dans la méthode de définition de champ de base de l'entité. Vous pouvez également utiliser le module d'interface utilisateur de champ pour ajouter des champs aux entités via l'interface de gestion Drupal. </p> <h3> Comment afficher des entités personnalisées à Drupal? </h3> <p> Pour afficher une entité personnalisée dans Drupal, vous devez créer un constructeur de vues pour votre entité. Cela implique de définir une classe qui étend la classe EntityViewBuilder et d'implémenter la méthode de vue. Vous pouvez également utiliser le module Views pour créer des vues personnalisées des entités. </p> <h3> Comment créer un formulaire pour ajouter et éditer des entités personnalisées dans Drupal? </h3> <p> Pour créer un formulaire dans Drupal pour ajouter et modifier des entités personnalisées, vous devez définir une classe de formulaire pour votre entité. Cela consiste à étendre la classe EntityForm et à implémenter le formulaire, à valider et à soumettre des méthodes. </p> <h3> Comment supprimer une entité personnalisée à Drupal? </h3> <p> Pour supprimer une entité personnalisée dans Drupal, vous devez utiliser la méthode de suppression de l'API de l'entité. Cela implique le chargement de votre entité, l'appel de la méthode de suppression, puis l'enregistrement de votre entité. Vous pouvez également utiliser la méthode DeleteMultiple de l'API Entity pour supprimer plusieurs entités à la fois. </p> </div>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn