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.

Save

Kategorien
Content Management Systeme seafolly.ch Shared Hosting Webdesign

Webhosting: Drupal 8 mit drush aktualisieren

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.

cd public_html

Wie die Drupal Shell drush installiert wird, habe ich im Artikel Drupal 8 bringt frischen Wind beschrieben.

Mit dem Befehl

drush pm-updatestatus

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
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

  • Site in den Maintenance Mode versetzen
    drush sset system.maintenance_mode 1
  • Drupal Cache löschen
    drush cache-rebuild
  • Core Update durchführen
    drush pm-update drupal
  • Modul Updates durchführen
    drush pm-update admin_toolbar
    drush pm-update bootstrap
  • Maintenance Mode aufheben
    drush sset system.maintenance_mode 0
  • Den Cache neu erstellen
    drush cache-rebuild

Hier nochmal die Ausgaben als Screenshot:

Drupal 8 Aktualisierung mit drush
Drupal 8 Aktualisierung mit Drusch

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.

Links


tl;dr: Drupal 8 Updates solltest du auf der Kommandozeile durchführen!

Save

Kategorien
Content Management Systeme seafolly.ch

Drupal 8 bringt frischen Wind …

Das stabile Release von Drupal 8 wurde am 19. November 2015 veröffentlicht. Die beiden gravierendsten Veränderungen zu Drupal 7 sind folgende:

  1. 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.
  2. 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
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
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
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.

Für Designer

Für Entwickler

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
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.

seafoll1@srv11 [~]# curl -sS https://getcomposer.org/installer | php

Das Verzeichnis in dem Composer erstellt wurde, muss in den Suchpfad aufgenommen werden.

seafoll1@srv11 [~]# export PATH="$HOME/.composer/vendor/bin:$PATH"

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
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
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 – 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
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.

seafolly.ch jetzt auf Drupal 8
seafolly.ch jetzt auf Drupal 8

Links


tl;dr: Drupal 8 ist erscheinen und bringt frischen Wind ins Content Management Lager.