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:
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:
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
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).
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
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.
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.
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.
Schreibe einen Kommentar