Drupal Custom Modules: Ein Einsteiger-Guide
Drupal Custom Modules: Dein Einstieg in die Entwicklung
Drupal ist bekannt für seine Flexibilität. Mit tausenden von Contrib-Modulen kannst du fast alles bauen. Aber manchmal reicht das nicht. Manchmal brauchst du eine ganz spezifische Funktionalität, die kein vorhandenes Modul bietet. Genau dann ist es Zeit für ein Custom Module.
In diesem Guide zeige ich dir die Grundlagen der Modul-Entwicklung in Drupal 10 und 11.
Warum Custom Modules?
Vielleicht möchtest du:
- Ein Formular verändern (
hook_form_alter) - Eine eigene API-Schnittstelle bereitstellen
- Einen komplexen Block mit dynamischem Inhalt erstellen
- Drittanbieter-Services integrieren (wie wir es hier mit DeepL oder Google Login gemacht haben)
Die Struktur
In deinem Drupal-Projekt solltest du folgende Ordnerstruktur haben:
/web
/modules
/contrib <-- Hier landen Module von drupal.org (via Composer)
/custom <-- Hier kommen DEINE Module rein
Erstellen wir ein Beispiel-Modul namens my_custom_module.
Erstelle den Ordner: /web/modules/custom/my_custom_module.
1. Die .info.yml Datei
Jedes Modul braucht eine Info-Datei. Sie muss [modul_name].info.yml heißen.
Erstelle /web/modules/custom/my_custom_module/my_custom_module.info.yml:
name: 'My Custom Module'
type: module
description: 'Ein einfaches Beispiel-Modul für den Einstieg.'
core_version_requirement: ^10 || ^11
package: Custom
dependencies:
- drupal:node
- name: Der Anzeigename auf der Modul-Seite.
- type:
module(Themes haben hiertheme). - core_version_requirement: Gibt an, mit welchen Drupal-Versionen das Modul kompatibel ist.
- package: Gruppiert Module auf der Extend-Seite.
Sobald diese Datei existiert, kannst du das Modul bereits im Backend unter “Extend” (Erweitern) sehen und aktivieren!
2. Die .module Datei (Optional)
Früher war dies die Hauptdatei. Heute nutzen wir sie meist nur noch für Hooks. Hooks sind Funktionen, die auf bestimmte Ereignisse reagieren.
Erstelle /web/modules/custom/my_custom_module/my_custom_module.module:
<?php
/**
* @file
* Primary module hooks for My Custom Module.
*/
use Drupal\Core\Form\FormStateInterface;
/**
* Implements hook_form_alter().
*/
function my_custom_module_form_alter(&$form, FormStateInterface $form_state, $form_id) {
// Beispiel: Füge CSS-Klasse zu allen Suchformularen hinzu
if ($form_id == 'search_block_form') {
$form['attributes']['class'][] = 'my-custom-search';
}
}
3. Ein Controller (Hello World)
Drupal nutzt das Symfony-Framework. Um eine eigene Seite (Route) zu erstellen, brauchen wir eine Route und einen Controller.
Die Routing-Datei
Erstelle my_custom_module.routing.yml:
my_custom_module.hello:
path: '/hello/world'
defaults:
_controller: '\Drupal\my_custom_module\Controller\HelloController::content'
_title: 'Hello World'
requirements:
_permission: 'access content'
Der Controller
Erstelle die Ordnerstruktur src/Controller und darin die Datei HelloController.php:
Pfad: /web/modules/custom/my_custom_module/src/Controller/HelloController.php
<?php
namespace Drupal\my_custom_module\Controller;
use Drupal\Core\Controller\ControllerBase;
/**
* Returns responses for My Custom Module routes.
*/
class HelloController extends ControllerBase {
/**
* Builds the response.
*/
public function content() {
return [
'#type' => 'markup',
'#markup' => $this->t('Hello World! Dies ist mein erstes Custom Module.'),
];
}
}
Cache leeren!
Wenn du neue Dateien hinzufügst (besonders .yml oder PHP-Klassen), musst du den Cache leeren, damit Drupal sie findet.
ddev drush cr
# oder
drush cr
Jetzt kannst du deine Seite unter /hello/world aufrufen.
Fazit
Das war ein sehr kurzer Einblick. Die moderne Drupal-Entwicklung ist stark objektorientiert und nutzt viele Symfony-Konzepte (Services, Events, Dependency Injection). Aber der Einstieg ist dank der klaren Struktur (.info.yml -> Routing -> Controller) sehr logisch aufgebaut.
Viel Erfolg beim Coden!
Häufig gestellte Fragen (FAQ)
Wo speichere ich meine Custom Modules?
Was ist die wichtigste Datei eines Moduls?
Brauche ich immer eine .module Datei?
Das könnte Sie auch interessieren
Drush: Alle Module deaktivieren
Wie man mit Drush schnell alle Module in Drupal deaktiviert - nützlich für Debugging und Wartung
Fast 18 Jahre Drupal-Expertise: Warum Spezialisierung der Schlüssel zum Erfolg ist
Seit fast 18 Jahren entwickeln wir ausschließlich Drupal-Projekte. Erfahren Sie, warum diese konsequente Spezialisierung...
Drupal AI Module: KI-Integration in Drupal 11 und Drupal 10
Umfassender Guide zum Drupal AI Module: OpenAI ChatGPT Integration, Content-Generierung, AI-Services, Provider-Setup und...