Kategorien
Betriebssysteme Content Management Systeme Webdesign Wunschthema

Eine lokale Entwicklungsumgebung mit Drupal VM

Wer Websites betreibt, benötigt lokale Entwicklungsumgebungen und Testsysteme. Wenn etwas auf der produktiven Website geändert oder komplett neu erstellt werden soll, ist es wichtig, die Änderungen in einer lokalen Testumgebung zu erstellen und auszuprobieren. Um den Umgang mit Software, wie beispielsweise einem Content Management System zu lernen, ist eine lokale Installation ebenfalls sehr zu empfehlen. Nun läuft die meiste Software als Serveranwendung unter dem Betriebssystem Linux, die lokalen Rechner nutzen aber überwiegend Microsoft Windows und Apple macOS. Einen separaten Linux Rechner haben eher wenige Nutzer. Mit der Software VirtualBox, die für alle gängigen Betriebssysteme zur Verfügung steht, lässt sich eine Linux Umgebung auf Windows und MacOS Rechnern einrichten. Virtualbox kann aber nicht nur eine, sondern mehrere virtuelle Umgebungen zu Verfügung stellen. Diese „virtuellen Boxen“ können bei Bedarf gestartet und genutzt werden. Natürlich lassen sich auch Windows und macOS in einer virtuellen Machine starten, meisten wird aber doch ein Linux benötigt. Da so ein Linux natürlich auch innerhalb der virtuellen Box konfiguriert werden muss, entstand eine Software, die virtuelle Maschinen verwaltet. Die heisst Vagrant. Mit Vagrant lassen sich virtuelle Maschine automatisiert bis ins kleinste Detail konfigurierbar einrichten. Ein besonders gelungenes Beispiel einer solchen virtuellen Umgebung ist die Drupal VM von Jeff Geerling.

Kategorien
Content Management Systeme

Ein Modul für Drupal 8 entwickeln

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.

#ffffff; background: #bd081c no-repeat scroll 3px 50% / 14px 14px; position: absolute; opacity: 1; z-index: 8675309; display: none; cursor: pointer; top: 6934px; left: 50px;">Save