„Chaos Tool Suite (CTools) ist in erster Linie eine Sammlung von APIs und Tools zur Verbesserung der Entwicklererfahrung.“ – Drupal.org
Die Chaos Tool Suite (CTools) ist ein von der Drupal-Community beigetragenes Projekt, das sich an Entwickler richtet. Im Wesentlichen handelt es sich um eine Reihe von Hilfsklassen, die erweitert werden können, um bestimmte Arbeitsabläufe zu vereinfachen und benutzerdefinierte Funktionen zu definieren. Viele beigesteuerte Module, darunter Pathauto, Panels und Page Manager, nutzen die von CTools bereitgestellte API.
Seit Drupal 8 wurde ein Großteil von CTools in den Core verschoben. Dazu gehören TempStore, Configuration Management Initiative (CMI), Config Entities, Plugins, AJAX und Modals sowie andere verschiedene Hilfsklassen. Kris Vanderwater, einer der Maintainer von Chaos Tool, beschrieb CTools als „ein Testfeld für das, was Drupal Core tun sollte“.
Das Projekt wird noch immer verändert und es werden Tools entwickelt, die in Zukunft in den Core übernommen werden könnten. Werfen wir einen Blick auf die Funktionen von CTools, die derzeit in der Version 8.x-3.x verfügbar sind.
Wizard-API
Mehrstufige Formulare werden in der Regel verwendet, wenn wir eine Reihe von Eingaben benötigen, ohne den Benutzer zu überfordern. Sie können auch verwendet werden, um dynamische Formulareingaben zu erstellen, d. h. wenn die Formulareingaben eines Schritts anhand der im vorherigen Schritt bereitgestellten Informationen geändert werden können. Sie ermöglichen auch eine bessere Organisation von UI und Code.
CTools bietet zwei abstrakte Klassen – FormWizardBase und EntityFormWizardBase, die erweitert werden können, um auf einfache Weise mehrstufige Formulare oder Assistenten zu erstellen. Erstere kann verwendet werden, um benutzerdefinierte einmalige Formulare zu erstellen, während letztere verwendet werden kann, um das Hinzufüge- oder Bearbeitungsformular für Config Entities zu verzaubern.
Die einzelnen Schritte des Assistenten sind nichts anderes als Formulare. Genau wie jedes andere Formular in Drupal sind sie Klassen, die von der FormBase-Klasse erben. Daher können wir die einzelnen Schritte steuern, indem wir einfach die abstrakten Methoden – buildForm, validateForm und submitForm in den einzelnen Schritten oder Formularen implementieren.
Die Wizard-API stellt sicher, dass der temporäre Assistentenwert des form_state-Objekts immer verfügbar ist. Im Fall der EntityFormWizardBase enthält er einen Schlüssel mit dem gleichen Namen wie die Entitäts-ID.
Erstellen eines mehrstufigen Formulars mit der Wizard-API
Um ein mehrstufiges Formular mit der Wizard-API zu erstellen, müssen wir ein benutzerdefiniertes Modul erstellen und dann Formulare hinzufügen, ein Formular für jeden Schritt. In diesem Beispiel erstellen wir einen Assistenten für eine benutzerdefinierte Konfigurationsentität, indem wir EntityFormWizardBase erweitern. Drupal Console kann verwendet werden, um den Boilerplate-Code zu generieren, um Zeit und Mühe zu sparen.
- Navigieren Sie zum Stammverzeichnis Ihrer Drupal-Site
$ cd /var/www/html/drupal8
- Generieren Sie Boilerplate-Code für das Modul mit Drupal Console (oder erstellen Sie die Dateien .info.yml und .module manuell) und beantworten Sie eine Reihe von Fragen, die vom Modulgenerator generiert werden.
$ drupal generate:moduleGenerieren von Boilerplate-Code für das benutzerdefinierte Modul - Generieren Sie nun Boilerplate-Code für die benutzerdefinierte Konfigurationsentität und beantworten Sie eine Reihe von Fragen, die vom Entitätsgenerator generiert werden.
$ drupal generate:entity:config
Generieren von Boilerplate-Code für die benutzerdefinierte Konfigurationsentität - Erstellen Sie nun Formulare zum Hinzufügen und Bearbeiten unserer benutzerdefinierten Konfigurationsentität, indem Sie die FormBase-Klasse erweitern und die Methoden getFormId, buildForm und submitForm implementieren. Optional können Sie die Methode validateForm implementieren, um benutzerdefinierte Validierungen zu definieren. Erstellen Sie ein Formular für jeden Schritt.
Hier geschieht die eigentliche Magie. Der temporäre Assistentenwert des Formulars _state-Objekts wird verwendet, um die Zwischenwerte temporär zu speichern. Vergessen Sie im Fall von benutzerdefinierten einmaligen Formularen nicht, die Feldwerte mit der Methode setTemporaryValue im TempStore zu speichern.public function getFormId() { return 'wizard_test_config_entity_first_form'; } public function buildForm(array $form, FormStateInterface $form_state) { $config_entity = $form_state->getTemporaryValue('wizard')['custom_config_entity']; $form['first_value'] = [ '#title' => $this->t('First'), '#description' => $this->t('Enter first value here'), '#type' => 'textfield', '#default_value' => $config_entity->getFirst() ?: '', ]; return $form; } public function submitForm(array &$form, FormStateInterface $form_state) { $config_entity = $form_state->getTemporaryValue('wizard')['custom_config_entity']; $config_entity->set('first_value', $form_state->getValue('first_value')); }
- Erstellen Sie die Assistentenklasse, indem Sie die EntityFormWizardBase-Klasse erweitern und die folgenden Methoden implementieren.
public function getWizardLabel() { return $this->t('Custom config entity wizard'); } public function getMachineLabel() { return $this->t('custom_config_entity_wizard'); } public function getEntityType() { return 'wizard_test_config_entity'; } public function exists() { return '\Drupal\wizard_test\Entity\CustomConfigEntity::load'; } public function getOperations($cached_values) { return [ 'label' => [ 'form' => 'Drupal\wizard_test\Form\CustomConfigEntityLabelForm', 'title' => $this->t('Label and ID'), ], 'first' => [ 'form' => 'Drupal\wizard_test\Form\FirstForm', 'title' => $this->t('Step one'), ], 'second' => [ 'form' => 'Drupal\wizard_test\Form\SecondForm', 'title' => $this->t('Step two'), ], ]; }
- Fügen Sie die Assistentenannotation in Ihrer benutzerdefinierten Entitätsklasse hinzu, in diesem Beispiel CustomConfigEntity.
"wizard" = { "add" = "Drupal\wizard_test\Wizard\AddEntityWizard", "edit" = "Drupal\wizard_test\Wizard\EditEntityWizard" } links = { "canonical" = "/admin/structure/custom_config_entity/{custom_config_entity}", "edit-form" = "/admin/structure/custom_config_entity/{machine_name}/{step}", "delete-form" = "/admin/structure/custom_config_entity/{custom_config_entity}/delete", "collection" = "/admin/structure/custom_config_entity" }
- Definieren Sie die Routen für den/die Assistenten. Denken Sie daran, _entity_wizard und tempstore_id unter den Standardwerten zu deklarieren.
entity.custom_config_entity.add_form: path: '/admin/structure/custom_config_entity/add' defaults: _entity_wizard: 'custom_config_entity.add' _title: 'Add Custom config entity' tempstore_id: 'custom_config_entity.config_entity' options: _admin_route: TRUE entity.custom_config_entity.add_step_form: path: '/admin/structure/custom_config_entity/add/{machine_name}/{step}' defaults: _entity_wizard: 'custom_config_entity.add' _title: 'Add Custom config entity' tempstore_id: 'custom_config_entity.config_entity' options: _admin_route: TRUE entity.custom_config_entity.edit_form: path: '/admin/structure/custom_config_entity/{machine_name}/{step}' defaults: _entity_wizard: 'custom_config_entity.edit' _title: 'Edit Custom config entity' tempstore_id: 'custom_config_entity.config_entity' options: _admin_route: TRUE
- Aktivieren Sie das neu erstellte Modul.
$ drush en wizard_test -y
oder
$ drupal module:install wizard_test
Besuchen Sie nun die Route Ihres Assistenten, um von dem benutzerdefinierten mehrstufigen Formular begrüßt zu werden.


Entitätsderivate
In Drupal 8 können Plugin-Derivate verwendet werden, um Annotationsobjekte zu durchlaufen. Dies ermöglicht es uns, eine foreach-Schleife zu verwenden, um alle Entitäten zu durchlaufen, einschließlich Blöcke, Kommentare, Nodes, Taxonomien usw.
CTools bietet eine Hilfsklasse EntityDeriverBase, die diese Funktionalität implementiert. Dies kann besonders hilfreich sein, wenn man Headless mit Drupal arbeitet. Wir können ein Plugin erstellen, es zusammen mit der Services-API verwenden und CRUD-Operationen an Entitäten durchführen.
Implementieren Sie die Methode getDerivativeDefinitions(), um alle Entitätsderivate zurückzugeben, und fügen Sie den Verweis auf die Derivatklasse in der Service-Definitionsannotation hinzu. Weitere Implementierungsdetails finden Sie in diesem Repository.

CTool-Blöcke und Views-Module
Das Projekt enthält auch ein paar Module, die Verbesserungen an Core-Blöcken und -Ansichten bieten. Beachten Sie, dass diese als experimentell gekennzeichnet sind. Bevor Sie sie verwenden, aktivieren Sie diese Module mit einer der folgenden Methoden:
Verwenden der Benutzeroberfläche
Navigieren Sie zu Verwalten → Erweitern, wählen Sie die Chaos-Tools-Blöcke und -Ansichten-Module aus und klicken Sie auf „Installieren“.

Verwenden des Terminals
$ drush en ctools_block ctools_views -y
oder
$ drupal module:install ctools_block ctools_views
Um nun die von dem Chaos-Tools-Blöcke-Modul bereitgestellten Blöcke hinzuzufügen, führen Sie die folgenden Schritte aus:
- Navigieren Sie zu Verwalten → Struktur → Blocklayout und klicken Sie auf „Block platzieren“ in der Region, in der Sie den Block hinzufügen möchten.
- Wählen Sie den Entitätsansichtsblock aus, der von dem Chaos-Tools-Modul bereitgestellt wird.
Blöcke, die von dem Chaos-Tools-Blöcke-Modul bereitgestellt werden - Geben Sie einen geeigneten Blocktitel an, wählen Sie den Ansichtsmodus aus und wählen Sie die Sichtbarkeitsbedingungen aus, genau wie bei jedem anderen Block. Klicken Sie auf „Block speichern“, um die Änderungen anzuwenden.
Beispiel für Chaos-Tool-Entitätsansichtsblöcke
Es wird erwartet, dass weitere dieser Funktionen und Tools in Zukunft ihren Weg in den Drupal-Core finden werden. Eine gute Möglichkeit, alle Änderungen in der Codebasis zu verfolgen, ist das Verfolgen des Git-Repositorys dieses Zweigs.
Teilen Sie uns in den Kommentaren unten mit, wie wir Ihnen helfen können, oder senden Sie eine E-Mail an [email protected].
Abonnieren
Verwandte Blogs
Zurück von der DrupalCon Atlanta 2025: Ein Meilenstein für OpenSense Labs

„Fit. Schnell. Für die Ewigkeit gebaut.“ Das war nicht nur ein Slogan, sondern die Denkweise, mit der wir zur DrupalCon…
Erklärbare KI-Tools: SHAPs Stärke in der KI

Wissen Sie, was erklärbare KI-Tools sind? Erklärbare KI-Tools sind Programme, die zeigen, wie eine KI ihre Entscheidungen…
KI-Chatbots: Präzision und Persönlichkeit in Perfektion

In der Welt der künstlichen Intelligenz ist die Entwicklung eines KI-Chatbots, der nicht nur akkurate Informationen liefert…