Drupal Custom Modules: Ein Einsteiger-Guide

Steven Schulz
Steven Schulz

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 hier theme).
  • 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?
Custom Modules gehören in das Verzeichnis `/modules/custom/`. Core-Module liegen in `/core/modules/` und Contrib-Module (von drupal.org) in `/modules/contrib/`.
Was ist die wichtigste Datei eines Moduls?
Die `.info.yml` Datei ist die einzige zwingend erforderliche Datei. Sie sagt Drupal, dass das Modul existiert und liefert Metadaten wie Name, Beschreibung und Abhängigkeiten.
Brauche ich immer eine .module Datei?
Nein. In modernen Drupal-Versionen (8/9/10/11) wird viel Logik in Klassen (Services, Controller, Plugins) ausgelagert. Die `.module` Datei wird hauptsächlich noch für Hooks verwendet (z.B. `hook_form_alter`).

Das könnte Sie auch interessieren

← Zurück zum Blog