Ein Modul für Drupal 8 entwickeln

Hello Methode im Browser

Hello Methode im Browser

Hier im Blog habe ich schon oft über Drupal 8 geschrieben und so nach und nach auch eine Website als Beispiel erstellt (seafolly.ch). In diesem Artikel möchte ich zeigen, wie du selbst ein Erweiterungsmodul für Drupal 8  schreiben kannst.

Voraussetzungen

Ich gehe davon aus, dass du eine Drupal 8 Installation hast und dir drush und die Drupal Console auf der Kommandozeile zur Verfügung stehen.

Drupal VM

Ich weiß, dass die Drupal 8 Installation etwas holprig sein kann, deshalb nutze ich die lokale Test- und Entwicklungsumgebung Drupal VM. Drupal VM ist wie ein sich selbst aufblasendes Schlauchboot. Einfach an der virtuellen Reißleine ziehen … und es pumpt sich auf. Der Quick Start Guide hilft dir bei der Einrichtung. Die gesamte Installation kann 10-20 Minuten dauern, je nachdem wie schnell deine Internetanbindung ist.

Wenn alles läuft, sollten deine Drupal 8 Dateien unter

[DeinPfad]/drupal-vm/drupal/web

zur Verfügung stehen (In meinen Fall ist die VM im Pfad /Users/hagengraf/Documents/htdocs/drupal8 installiert, ich arbeite auf einem Apple OS X Rechner). Das Tool drush steht sofort zur Verfügung und wenn du in das Drupal Verzeichnis wechselst und den Befehl  drush status aufrufst, sollte folgende Ausgabe erscheinen:

Drupal version : 8.1.9
 Site URI : http://default
 Database driver : mysql
 Database hostname : localhost
 Database port :
 Database username : drupal
 Database name : drupal
 PHP executable : /usr/bin/php
 PHP configuration :
 PHP OS : Darwin
 Drush script : /Users/hagengraf/Documents/htdocs/drupal8/drupal-vm/drupal/vendor/drus...
 h/drush/drush.php
 Drush version : 8.1.3
 Drush temp directory : /tmp
 Drush configuration :
 Drush alias files :
 Drupal root : /Users/hagengraf/Documents/htdocs/drupal8/drupal-vm/drupal/web
 Drupal Settings File : sites/default/settings.php
 Site path : sites/default
 Sync config path : sites/default/files/config_PSeYq5YcuMjY2bWY4bQzPAbJn0dTxN7mIZY1OVBkCZ-
 w744SKb_YdYeEZwWSfmTus5qu5f6Bmw/sync

Um Drupal in deinem Browser sehen zu können, musst du in deiner hosts Datei die IP-Adresse 192.168.88.88 zuordnen, beispielsweise dem Namen drupalvm.dev.

192.168.88.88  drupalvm.dev

Im Browser sollte sich nach der Eingabe von http://drupalvm.dev folgendes Bild bieten:

Drupal - frisch installiert
Drupal – frisch installiert

Die Zugangsdaten sind standardmäßig

  • Benutzername: admin
  • Passwort: admin

Durch einen Klick auf Log in kannst du dich mit diesen Werten einloggen.

Drupal Console

Außer dem Kommandozeilentool drush (Drupal Shell) gibt es ein weiteres Tool namens Drupal Console. Während drush eher administrative Aufgaben erleichtert, geht es bei Drupal Console auch um das Erzeugen von Quellcode. Einen guten Überblick über beide Tools bietet dieser Artikel.

Um in der Drupal VM die Drupal Console nutzen zu können musst du dich einloggen

vagrant ssh

Die VM begrüsst dich:

Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.4.0-21-generic x86_64)

Du arbeitest ab jetzt in einer Linux Umgebung. Wechsle in das Verzeichnis deiner Drupal Installation.

cd /var/www/drupalvm/drupal/web

und rufe die Drupal Console mit dem Befehl

drupal

auf. Du solltest folgende Ausgabe erhalten:

Drupal Console
Drupal Console

Mit dem Befehl drupal list siehst du alle verfügbaren Befehle.

Nun sind alle Voraussetzungen erfüllt und du kannst dich an die Erstellung eines neuen Moduls wagen 🙂

Ein individuelles Modul

Erweiterungen in Drupal heißen Module. Es gibt Core und Contrib Module. Core Module sind im Drupal Standardpaket enthalten und liegen im Verzeichnis [drupalroot]/core/modules. Contrib Module sind Contributions (Beiträge) der Drupal Community, sie liegen im Verzeichnis [drupalroot]/modules/contrib. Selbst geschriebene Module sollten im Verzeichnis [drupalroot]/modules/custom abgelegt werden.

Der Befehl Drupal modules:debug erzeugt beispielsweise eine Liste aller vorhandenen Module.

Neues Modul erzeugen

Der Befehl drupal generate:module oder kürzer drupal gm erzeugt eine neue Modulstruktur. In einem Dialog werden die notwendigen Werte abgefragt. Hier mein Dialog für die Erstellung des MyModule Moduls.

vagrant@drupalvm:/var/www/drupalvm/drupal/web$ drupal gm
Enter the new module name: My Module
Enter the module machine name [my_module]: mymodule
Enter the module Path [/modules/custom]:
Enter module description [My Awesome Module]: My first Drupal 8 Module
Enter package name [Custom]:
Enter Drupal Core version [8.x]:
Do you want to generate a .module file (yes/no) [yes]:
Define module as feature (yes/no) [no]:
Do you want to add a composer.json file to your module (yes/no) [yes]:
Would you like to add module dependencies (yes/no) [no]:
 Do you confirm generation? (yes/no) [yes]:


Generated or updated files
 Site path: /var/www/drupalvm/drupal/web
 1 - modules/custom/mymodule/mymodule.info.yml
 2 - modules/custom/mymodule/mymodule.module
 3 - modules/custom/mymodule/composer.json
vagrant@drupalvm:/var/www/drupalvm/drupal/web$

Die Drupal Console erzeugt den Code für ein neues Modul (drei Dateien). In der Datei mymodule.info.yml finden sich die abgefragten Werte wieder.

name: My Module
type: module
description: My first Drupal 8 Module
core: 8.x
package: Custom

Modul installieren

Nachdem wir das Modul erzeugt haben, müssen wir es auch installieren. Das übernimmt der Befehl

drupal module:install mymodule
Modul installieren
Modul installieren

Das Modul ist nun installiert, aber es tut natürlich noch nichts. Im Browser kannst du aber schon sehen, dass etwas Neues vorhanden ist (http://drupalvm.dev/admin/modules).

My Module im Browser
My Module im Browser

Hello Drupal Beispiel

Das neue Modul soll (nach bewährter Tradition) zunächst „Hello Drupal“ im Browser ausgeben. Damit das klappt, brauchen wir einen sogenannten Controller, der die Nachricht ausgibt und eine Weiterleitung (route), die eine URL Eingabe an den Controller weiterleitet. Den Controller erzeugst du mit dem Befehl

drupal generate:controller

Hier wieder der gesamte Dialog als Screenshot

Controller erzeugen
Controller erzeugen

Jetzt sind wir schon ein ganzes Stück weiter und können das neue Modul im Browser aufrufen. Unter drupalvm.dev/hello erfolgt folgende Ausgabe.

Hello Methode im Browser
Hello Methode im Browser

Bisher haben wir noch keine Zeile Quellcode geschrieben, aber wir haben schon eine funktionstüchtige Struktur des neuen Moduls. Die Ausgabe weist darauf hin, dass die Methode hello implementiert werden muss. Wir müssen also die Ausgabe des Textes programmieren.

Die Controller Datei mit der hello Methode befindet sich im Verzeichnis [drupalroot]/module/custom/mymodule/src/Controllers und hat den Namen MyModuleController.php. Die Methode hello sieht darin momentan so aus:

 public function hello() {
 return [
 '#type' => 'markup',
 '#markup' => $this->t('Implement method: hello')
 ];
 }

Sie gibt den Text Implement method: hello aus. Um den obligatorischen Hello Drupal Text anzuzeigen, musst du also nur den Ausgabetext ändern …

... '#type' => 'markup',
 '#markup' => $this->t('Hello Drupal')
 ];
 ...

und den Cache löschen …

drupal cache:rebuild

Nach einem Reload der Seite im Browser steht der Hello Drupal Text auf der Website.

Hello Drupal
Hello Drupal

Yeah – ein eigenes Drupal Modul!

Nun sollten dem Modul eine sinnvolle Funktionalität und ein Workflow zu einer produktiven Drupal Website gegeben werden um das momentan lokal vorhandene Modul zum Einsatz bringen zu können.

Fazit

Auch wenn das Hello Drupal Beispiel natürlich extrem einfach ist, zeigt es doch prinzipiell den Weg der Entwicklung von individuellen Modulen in Drupal.

Links


tl;dr: Es ist relativ einfach möglich (und es macht sogar Spass) individuelle Drupal Module zu schreiben.

Save

Autor: Hagen Graf

consultant, author, trainer, solution finder, web architect, developer, open source lover, visionary, orator, the good old webmaster. Able to simplify!

2 Gedanken zu „Ein Modul für Drupal 8 entwickeln“

Kommentar verfassen