Dieses Drupal 8 -Modul erstellt wiederverwendbare Formen, die an verschiedenen Knotenbündeln angebracht werden können. Erstellen wir ein einfaches, aber leistungsstarkes, wiederverwendbares Formsystem. Das Ziel ist es, ein Formular auf jeder Knotenseite problemlos zu laden, wodurch der Formulartyp pro Knotenpaket ausgewählt wird.
Wir haben bereits einen benutzerdefinierten Plugin -Typ ReusableForm
mit einer Basis -Plugin -Klasse für die Erweiterung erstellt. Jedes Plugin interagiert mit einer Formklasse, die in seiner Annotation definiert ist. In ähnlicher Weise bietet eine Basisformklasse eine Grundlage für neue Formen.
Als nächstes konfigurieren wir Kernknotentypen, um diese Plugins zu verwenden, und rendern das entsprechende Formular während der Knotenanzeige. Lassen Sie uns zunächst ein einfaches ReusableForm
Plugin erstellen.
Schlüsselkonzepte:
ReusableForm
Plugins. Erstellen des ersten Plugin
im Verzeichnis des Moduls src/Form
erstellen 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. } }
Dies erweitert unser Basisformular und implementiert die erforderlichen Methoden. Die buildForm
-Methode verwendet die Basislogik. Die Handhabung der Einreichung bleibt für die spätere Implementierung übrig.
Erstellen Sie nun das Plugin in 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 {}
Die Annotation definiert die ID, den Namen und die zugehörige Form des Plugins.
Knotenentypkonfiguration
Um Plugins zuzugreifen und zu laden, machen wir den Plugin -Manager zu einem Dienst. In reusable_forms.services.yml
:
services: plugin.manager.reusable_forms: class: Drupal\reusable_forms\ReusableFormsManager parent: default_plugin_manager
Ändern Sie als nächstes den Knotentyp -Bearbeitungsformular (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) ... }
Dies fügt ein Kontrollkästchen hinzu, um wiederverwendbare Formulare und eine Auswahlliste zur Auswahl eines Plugins zu aktivieren. Der Rückruf #entity_builders
speichert die Auswahl in Einstellungen von Drittanbietern.
Konfigurationsschema (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'
Knotenansicht
Erstellen Sie ein Pseudo -Feld (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
definiert das Pseudofeld und rendert hook_node_view
die ausgewählte Form.
Dies vervollständigt die Grundstruktur. Denken Sie daran, Caches nach Änderungen zu klären. Diese detaillierte Erklärung bietet eine solide Grundlage für den Aufbau einer komplexeren wiederverwendbaren Formfunktionalität in Drupal 8.
Das obige ist der detaillierte Inhalt vonDrupal 8 Einstellungen Dritter und Pseudo-Felder. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!