Ce module Drupal 8 crée des formes réutilisables qui peuvent être attachées à différents paquets de nœuds. Construisons un système de formulaire simple mais puissant et réutilisable. L'objectif est de charger facilement un formulaire sur chaque page de nœud, en sélectionnant le type de formulaire par bundle de nœuds.
Nous avons déjà créé un type de plugin personnalisé, ReusableForm
, avec une classe de plugin de base pour l'extension. Chaque plugin interagit avec une classe de formulaire définie dans son annotation. De même, une classe de formulaire de base fournit une base pour les nouvelles formes.
Ensuite, nous allons configurer les types de nœuds de base pour utiliser ces plugins et rendre la forme appropriée pendant l'affichage du nœud. Tout d'abord, créons un plugin simple ReusableForm
.
Concepts clés:
ReusableForm
. Création du premier plugin
Dans le répertoire src/Form
du module, créez BasicForm.php
:
<?php namespace Drupal\reusable_forms\Form; use Drupal\Core\Form\FormStateInterface; class BasicForm extends ReusableFormBase { public function getFormId() { return 'basic_form'; } public function buildForm(array $form, FormStateInterface $form_state) { $form = parent::buildForm($form, $form_state); return $form; } public function submitForm(array &$form, FormStateInterface $form_state) { // Handle form submission. } }
Cela étend notre formulaire de base, implémentant les méthodes requises. La méthode buildForm
utilise la logique de classe de base. Le traitement de la soumission est laissé pour la mise en œuvre ultérieure.
Maintenant, créez le plugin dans src/Plugin/ReusableForm/BasicForm.php
:
<?php namespace Drupal\reusable_forms\Plugin\ReusableForm; use Drupal\reusable_forms\ReusableFormPluginBase; /** * @ReusableForm( * id = "basic_form", * name = @Translation("Basic Form"), * form = "Drupal\reusable_forms\Form\BasicForm" * ) */ class BasicForm extends ReusableFormPluginBase {}
L'annotation définit l'ID du plugin, le nom et la classe de formulaire associée.
Configuration du type de nœud
Pour accéder et charger les plugins, nous ferons du Plugin Manager un service. Dans reusable_forms.services.yml
:
services: plugin.manager.reusable_forms: class: Drupal\reusable_forms\ReusableFormsManager parent: default_plugin_manager
Ensuite, modifiez le formulaire de modification du type de nœud (reusable_forms.module
):
use Drupal\Core\Form\FormStateInterface; use Drupal\node\NodeTypeInterface; function reusable_forms_form_node_type_form_alter(&$form, FormStateInterface $form_state) { // ... (Code to add checkbox and radios for enabling and selecting forms) ... $form['#entity_builders'][] = 'reusable_forms_form_node_type_form_builder'; } function reusable_forms_form_node_type_form_builder($entity_type, NodeTypeInterface $type, &$form, FormStateInterface $form_state) { // ... (Code to save/unset third-party settings) ... }
Cela ajoute une case à cocher pour activer les formulaires réutilisables et une liste de sélection pour choisir un plugin. Le rappel #entity_builders
enregistre la sélection dans des paramètres tiers.
Schéma de configuration (reusable_forms.schema.yml
)
node.type.*.third_party.reusable_forms: type: mapping label: 'Reusable Forms' mapping: enabled: type: boolean label: 'Enable reusable forms' plugin: type: string label: 'Form Plugin'
View du nœud
Créer un champ pseudo (reusable_forms.module
):
use Drupal\node\Entity\NodeType; use Drupal\Core\Entity\Display\EntityViewDisplayInterface; use Drupal\Core\Entity\EntityInterface; function reusable_forms_entity_extra_field_info() { // ... (Code to add 'reusable_form' pseudo field to enabled node types) ... } function reusable_forms_node_view(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode, $langcode) { // ... (Code to render the form using the plugin manager) ... }
hook_entity_extra_field_info
définit le champ pseudo, et hook_node_view
rend la forme sélectionnée.
Cela complète la structure de base. N'oubliez pas d'effacer les caches après avoir apporté des modifications. Cette explication détaillée fournit une base solide pour construire des fonctionnalités de forme réutilisables plus complexes dans Drupal 8.
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!