Drupal lässt sich auf unterschiedliche Art und Weise verwalten.
Zum einen komplett über die Benutzeroberfläche im Browser und zum anderen über Tools auf der Kommandozeile. Beide Varianten haben Vor- und Nachteile.
Vereinfacht lässt sich sagen, dass einfache Drupal-Sites ohne eCommerce und individuelle Programmierung durchaus über die Benutzeroberfläche verwaltet werden können. Der grosse Vorteil ist, dass man in dieser Variante keinen Zugriff auf die Kommandozeile benötigt um „Dinge zu tun“. Jeder User kann also die Site auch verwalten und konfigurieren. Nur für ein Drupal-Versions-Update wird Zugriff auf die Dateien benötigt. Hier bei Novatrend wird diese einfache Variante von unserem Installationsmanager Softaculous verwendet. Versions-Updates erfolgen sicher über die Softaculous-Oberfläche.
Wer kompliziertere Drupal-Sites betreibt oder mehr Einfluss auf „die Dinge“ haben will oder auch schlicht „alle Möglichkeiten“ nutzen will, der wird Drupal in einer Composer-basierten Installation verwalten.
Mittlerweile ist die Composer-basierte Installation sehr einfach geworden und daher will ich heute eine Installation von Drupal mittels Composer auf einem Novatrend Hosting beschreiben.
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
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
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
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
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
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
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 …
Nach einem Reload der Seite im Browser steht der Hello Drupal Text auf der Website.
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.
So ein Bild wie oben siehst du oft, wenn du mit Drupal arbeitest. In diesem Fall ist es Drupal 8, welches ich auf der Seite unseres Kunstprojektes seafolly.ch nutze. Das Drupal läuft auf einem „normalen Webhosting“ hier bei NOVATREND und dient als Beispiel für die Drupal Beiträge im Blog.
Arbeiten auf der Konsole
In einem Webhosting bei NOVATREND kannst du dich, wie auf einem Root Server, via SSH auf der Konsole einloggen und mit deinen Benutzerrechten arbeiten. Öffne einfach ein Terminal Fenster und verbinde dich mit deinem FTP Benutzernamen und Passwort.
ssh [username]@[ftphost]
In meinem Fall ist das Drupal 8 direkt im Verzeichnis public_html installiert, daher wechsle ich in dieses Verzeichnis.
kannst du überprüfen, ob die Angaben zum Status deiner Drupal Installation mit denen im Webbrowser übereinstimmen.
Das Ergebnis sieht beispielsweise so aus:
drush pm-updatestaus
In diesem Fall gibt es ein Core Update von Drupal 8.1.7 auf Drupal 8.1.8, ein Modul Update der Admin Toolbar und ein Update des Bootstrap Themes. Modul Updates können auch über das Browser Interface erledigt werden, Core Updates nicht. Mit Hilfe von drush sind beide Updates sehr einfach möglich.
ACHTUNG, jegliche Änderungen, die du an Drupal Core Dateien vorgenommen hast, werden überschrieben. Das klingt zunächst harmlos, denn Drupal Core Dateien wirst du normalerweise nicht verändern, ausser … und da fallen dir bestimmt dann doch ein paar ein, denn als Drupal Core Dateien gelten auch die .htaccess Datei, die robots.txt Datei und natürlich individuelle Theme Anpassungen die du innerhalb des originalen Themes durchgeführt hast. Ein Backup vor dem Update ist also unerlässlich (siehe hierzu ein schnelles Backup vor dem Update), besser noch ein Test in einer lokalen Version der Site.
Update mittels drush
Das eigentliche Update geht einfach in folgenden Schritten
Was hier auf den ersten Blick im Screenshot etwas unübersichtlich aussieht, ist ein sehr logisches, und vor allem durchdachtes System einer „Fernbedienung“ für Drupal. Wenn du dich intensiver mit Drupal 8 beschäftigen möchtest, wird dir drush ein grosse Hilfe sein.
Fazit
Ein Drupal 8 Update ist mit Hilfe von drush auf der Kommandozeile schnell und sicher erledigt.
Das stabile Release von Drupal 8 wurde am 19. November 2015 veröffentlicht. Die beiden gravierendsten Veränderungen zu Drupal 7 sind folgende:
Drupal soll nicht mehr nur als Content Management System wahrgenommen werden, sondern als Basis für jede Art von Inhalt. Kernidee dabei sind Schnittstellen, die es externen Clients ermöglichen, auf die Inhalte in Drupal zuzugreifen.
Der Drupal 8 Code wurde seit fünf Jahren praktisch neu geschrieben und ist nun weitgehend objekt-orientiert auf der Basis des PHP-Frameworks Symfony. Ein Migrationspfad bei neuen Drupal Versionen ist nun erstmals möglich.
Der erste Punkt stellt sicher, dass Drupal zukunftssicher ist und als Datenbasis für mobile Apps, Desktop Apps und andere Websites dienen kann. Der zweite Punkt führt dazu, dass Drupal Entwicklung nun wie „normale“ Software-Entwicklung funktioniert und damit erheblich einfacher in ein Unternehmensumfeld zu integrieren ist.
Neue Features
Ausser diesen beiden Kernpunkten gibt es die folgenden Neuigkeiten:
Für Endbenutzer und Kunden
Inline editing. Die Inhalte können nun direkt im Frontend geändert werden.
Der WYSIWYG Editor CKEditor ist nun bereits im Drupal Core enthalten.
WYSIWYG Editor
Die „mobile first“ Strategie kommt mit responsiven Themes und Bildern, sowie einem auf Mobilgeräten bedienbarem Adminbereich.
Drupal – Standard Theme mit Adminbereich unter Android
Für Site Builder
Der Blockbereich ist erweitert worden, beispielsweise besteht nun die Möglichkeit, den Inhaltsbereich besser zu ordnen.
Drupal – Inhaltsblöcke
Es gibt neue Feldtypen im Core: Referenzen auf Entitäten, Datumsfelder, Links, Telefonnummer, E-Mail und Kommentar
Teile des Views Moduls sind nun bereits im Core enthalten (individualierte Listen, Blöcke, Galerien, Slideshows, REST Ausgabe)
Eine Lokalisierung der Site ist bereits bei der Installation möglich
Die Übersetzung von fast allen Entitäten ist nun ebenfalls im Core verfügbar.
Auf den ersten Blick denkt man sich nun – hm, und das hat 5 Jahre gedauert?
Auf den zweiten Blick dagegen merkt man, dass die Änderungen umfangreich sind und dem Projekt gut tun werden. Drupal 4 und 5 waren eher Content Management Frameworks, Drupal 6 und 7 dann wieder eher Content Management Systeme. Der Schwerpunkt aller Drupal Versionen lag aber immer in der strukturierten Darstellung von Inhalten (Content Construction Kits). Drupal 8 versucht nun den Spagat zwischen beiden Welten und kommt sehr aufgeräumt und durchdacht daher.
Build something amazing.
Um ein konkretes Beispiel zu zeigen, will ich mir seafolly.ch vornehmen.
Das Kunstprojekt dient oft als Beispiel hier im Blog und die Website habe ich bisher mit dem einfachen CMS Yellow erstellt.
Nun werde ich es mit Drupal 8 versuchen.
Installation
Wenn Sie bei Novatrend ein Webhosting Paket haben, können Sie Drupal mittels cPanel Installatron sehr einfach installieren.
ACHTUNG: Seit November 2017 benutzen wir anstelle des Installatrons das Tool Softaculous. Im Beitrag Automatisierte Installation mit Softaculous beschreibe ich die grundlegenden Vorgehensweisen.
cPanel – Installation Drupal 8
Die Installatron-Installation hat den Vorteil, dass Sie sich um nichts kümmern müssen. Dieser Vorteil ist im Falle Drupal aber auch ein Nachteil, denn Drupal 8 ist bewusst so angelegt, dass es von der Kommandozeile aus gesteuert werden kann. Zu diesem Zweck gibt es das Programm Drush.
Installation per Kommandozeile
Im Laufe der Installation werden die Datenbankparameter abgefragt. Legen Sie sich im cPanel eine MySQL Datenbank und einen MySQL Datenbank Benutzer für Ihre Drupal 8 Installation an.
Im NOVATREND Webhosting Paket können Sie per SSH auf Ihre Daten zugreifen.
ssh seafoll1@seafolly.ch
Composer installieren
Um Drupal installieren, warten und konfigurieren zu können, benötigen Sie das Programm Drush. Drush wiederum können Sie mit dem Programm Composer installieren. Composer können Sie mit dem Curl Befehl installieren. Zunächst also die Installation von Composer mittels Curl.
Nun können Sie Ihr Terminalfenster neu starten oder ihr Profil neu laden.
seafoll1@srv11 [~]# source ~/.bash_profile
Drush installieren
Sie können nun Composer nutzen um Drush zu installieren.
seafoll1@srv11 [~]# php composer.phar global require drush/drush:dev-master
Update
seafoll1@srv11 [~]# php composer.phar global require drush/drush:8.*
Mit dem Befehl
seafoll1@srv11 [~]# drush version
Drush Version : 8.0.0
können Sie überprüfen, ob die Installation erfolgreich war. In unserem Fall ja, Version 8.0.0 ist genau das, was wir brauchen.
Globale Updates
Ein globales Update von Composer erreichen Sie mit dem folgenden Befehl:
seafoll1@srv11 [~]# php composer.phar global update
Drupal 8 mit Drush herunterladen
Wenn Sie sichergestellt haben, dass Drush läuft, wechseln Sie in das Verzeichnis, in dem Sie Drupal installieren wollen und führen den folgenden Befehl aus:
seafoll1@srv11 [~/public_html]# drush dl drupal-8 --select
Choose one of the available releases for drupal:
[0] : Cancel
[1] : 8.1.x-dev - 2015-Nov-25 - Development
[2] : 8.0.0 - 2015-Nov-19 - Supported, Recommended
[3] : 8.0.0-beta2 - 2014-Oct-15 - Security
Wählen Sie Alternative 2 aus. Die stabile Version von Drupal wird nun im Verzeichnis /public_html/drupal-8.0.0 entpackt.
Innerhalb des Verzeichnisses müssen Sie nun die Datei und Verzeichnisrechte verändern: alle Verzeichniss auf 755 und alle Dateien auf 644.
seafoll1@srv11 [~/public_html/drupal-8.0.0]# find -type d -exec chmod 755 {} \;
seafoll1@srv11 [~/public_html/drupal-8.0.0]# find -type f -exec chmod 644 {} \;
Hinweis:
Bei dieser Art der Installation entsteht innerhalb des public_html Verzeichnisses ein neues Verzeichnis in dem Drupal 8 liegt (drupal-8.0.0). Abhängig von der Konfiguration Ihres Webhostings und der dazu gehörenden Domain müssten Sie entweder das Dokumentenverzeichnis des Webservers auf den Drupal Pfad anpassen oder die Dateien in das Hauptverzeichnis public_html kopieren.
Wenn Sie nun im Browser den entsprechenden URL aufrufen, startet der Webinstaller zunächst in englischer Sprache. Wenn Sie eine lokalisierte Version von Drupal haben wollen, so wählen Sie an dieser Stelle die gewünschte Sprache aus.
Drupal – Installation – Sprachauswahl
Der Installer wechselt nun die Sprache. Ich wähle im nächsten Schritt das Standardprofil aus und Drupal überprüft die Serverkonfiguration.
Wenn alles passt, werden die Datenbankparameter abgefragt und die eigentliche Installation startet.
Drupal – Installation – Fortschritt
Nach der Installation aller Module werden noch Parameter wie Name und E-Mail Adresse für die Website und Name und Passwort des Administrators abgefragt.
Drupal – Installation – Website
Drupal 8 ist nun vollständig installiert und Deutsch lokalisiert. Der Administrator ist automatisch eingeloggt und kann die Website nun gestalten und mit Inhalt füllen.
Drupal – Installation – Erfolg
Die Bedienung entspricht weitgehend der Vorgehensweise aus Drupal 7 und so kann ich in kurzer Zeit ein paar statische Seiten und ein Kontaktformular für seafolly.ch erstellen.