So war der Drupal 8 Starter Day

Letzten Freitag fand im Wiener Museumsquartier im Rahmen der Europäischen Codeweek der Drupal 8 Starter Day statt. Die kostenlose Veranstaltung hatte zum Ziel, Interessierten die Änderungen und neue Features vom Content Management System Drupal 8 – just in der Beta-Phase reingekommen – zu präsentieren.

Die Veranstaltung begann mit einem Zusammenkommen bei Kaffee und Kuchen, gerade als es draußen anfing heftig zu regnen. Beste Voraussetzungen also, um seine Aufmerksamkeit den folgenden Präsentationen zu widmen. Nach einer kurzen Vorstellung des Ablaufs und der Tagesthemen ging es auch schon gleich mit der ersten Session los.

Sitebuilding mit Drupal 8

Sebastian Siemssen und Philipp Melab hatten als erste den Task die Teilnehmer mit Drupal 8 Core bekannt zu machen, indem sie live eine Demoseite aufbauten, bei der man die beiden Vortragenden durch ein Ratingsystem bewerten konnte. Die Session müsste besonders Anfänger und Unerfahrenen gut gefallen haben, denn bevor es mehr in die Tiefe ging wurden der überarbeitete Installer von Drupal 8 sowie die Grundkonzepte von Drupal (Entities, Nodes, Menü-, Field- uns Permissionssystem usw.) vorgestellt.

In der Live-Demo wurde dann in kurzer Zeit das System so konfiguriert, dass bereits nach ein paar Minuten über die Mobilgeräte Bewertungen abschickt werden konnten. Dabei wurde nur auf Modulen/Funktionalitäten aufgebaut, die bereits in Drupal 8 Core inkludiert sind. Für die verschiedensten Ansichten wurden die Features, des seit Version 8 im Core inkludierten Modul Views ausgereizt. Richtig interessant ist die Vorstellung der Funktionalität der CMI (Configuration Management Initiative) gewesen, indem demonstriert wurde, wie die bereits getätigten Konfigurationen (nur Konfigurationen, keine Inhalte) bequem über die Admin-Oberfläche von Drupal auf eine andere Instanz (über die eingebaute Export/Import Funktion) übertragbar sind.

Theming in Drupal 8

Nach der Mittagspause (mit leichter österreichischer Kost aka Käsespätzle) folgte ein weiteres spannendes Thema, was Drupal 8 betrifft – das neue Theming-System. Christian Ziegler stellte die wichtigsten Änderungen vor – besonders für eingefleischte Drupal 7 Themer ein Leckerbissen (auch nach dem Mittagsessen), denn es hat sich einiges getan in dem Feld, z.B.:

  • Alle Core-Themes responsive
  • Starker Einzug von HTML5-Elementen
  • Starker Rückzug von CSS ID’s, dafür steigende Benützung der BEM-Syntax
  • Themes werden schlanker im Bezug auf js-Libraries
  • keine „theming functions“ mehr, gesamter Output liegt nunmehr in Template-Files
  • Neues Base-Theme Classy im Core, welches man nach Bedarf auch bequem ausschalten kann (= mehr und leichtere Kontrolle über Drupals‘ CSS Klassen – yay!)

Drupal 8 versucht den responsive-Ansatz im gesamten System so stark wie möglich auszuweiten, so können nun Themes auch eigene Breakpoints registrieren, die Drupal dann erkennen und einsetzen kann (z.B. durch Auslieferung von Bildern mit verschiedener Grösse, je nach Breite des Bildschirms). So finden sich solche Konfigurationen genau an der richtgen Stelle wieder, nämlich im Theme und sind damit pro Theme flexiblel änderbar.

Last but not least setzt Drupal 8 auf Twig als Templating Engine. Das ist ein wichtiger Schritt, denn durch Twig wird Drupal sicherer (z.B. automatisches Autoescaping, kein PHP-Code mehr in den Templates), konsistenter und einfacher. Ganz wichtig ist auch, dass Themer ohne Drupal Erfahrung viel leichter an einem Drupal-Projekt mitarbeiten können.

Coding in Drupal 8

Besonders für Entwickler hat sich sehr viel getan im Drupal 8-Universum (Einsatz von objektorientiertem Code). Der Vortrag von Wolfgang Ziegler begann mit einer kurzen Übersicht über die „PHP Renaissance“ in Bezug auf modernen Programmierpraktiken in der PHP-Sprache und den Einfluss deren auf den Code in Drupal 8. Denn die Änderungen in Drupal 8 stellen ein enormes Potential an Weiterentwicklung, sowohl für die Software, als auch für die Drupal-Developer dar. Dabei geht es um den Einsatz und das Erlernen von gängigen Programmierstandards (OOP), sowie um die Möglichkeit die Drupal-Insel zu verlassen und mehr von externen vorhandenen Systemen und Komponenten profitieren zu können, indem man „PHP best practices“ lernt und anwendet. Der Vortrag schuff eine sehr gute Übersicht über folgende Drupal-Development-spezifische Themen, auch Anhand von Beispielen aus dem System selbst:

  • Modulstrukturen
  • Den Weggang vom hook_menu-Praxis hin zu einem modernen Controller, Routing und Menu System
  • Das neue Plugin-System
  • Configuration System
  • Services & Dependency Injection
  • Bessere Tests durch den Einsatz von PHPUnit

Auch wenn der Talk mehr für erfahrene Entwickler mit Drupal-Hintergrund greifbar war, war die gegebene Übersicht auch für Entwickler sehr interessant, die Drupal 8 erst lernen wollen, besonders weil alle wichtige Code-Änderungen sehr ausführlich für die vorhandenen Zeit erfasst wurden.

Development Environment

Der letzte Vortrag des Tages befass sich mit dem Aufbau einer möglichst optimalen Entwicklungsumgebung für Drupal Developer, wobei die gegebenen Tipps auch generell für PHP-Entwickler sehr interessant waren. Sebastian Siemssen und Philipp Melab führten durch die optimalen Einstellungen eines IDE’s und demonstrierten wie man mit Hilfe der Drupal-Unterstützung von PHPStorm schnell und leicht richtig Code schreibt (durch Funktionsautovervollständigung, automatische Einstellung von Beachtung der Drupal Coding Standards usw.). Auch weitere Tipps fielen, u.a. die Wichtigkeit des Einsatzes richtiger Hardware (SSD-Harddisk für lokale Entwicklung).

Sehr hilfreich, eigentlich unverzichtbar für das professionelle Entwickeln, ist das Zusammenspiel von PHP’s Xdebug Library mit einem IDE, damit man die Codeausführung an bestimmten Stellen im Code unterbrechen kann und man so enorm in der Fehlersuche geholfen wird, z.B. durch Untersuchung von Variablenwerten an zeitlich bestimmten Stellen.

Fazit

Der Tag war wie erwartet ein sehr interessante und gelungene Veranstaltung. Drupal 8 ist um die Ecke, in der Beta-Phase steht schon das Grundgerüst fest und die Änderungen sind spannend und gut. Neue Entwickler, sowohl Anfänger, als auch fortgeschritte PHP-Entwickler, werden es durch den Einbau von Standards leichter haben Drupal kennenzulernen. Auch das UI ist besser geworden, responsive und UX-optimiert. Videobeiträge zu den Sessions folgen dann in Kürze und werden natürlich auch hier noch veröffentlicht, einen Überblick über unsere Fotos findet ihr auf unserem Flickr-Account.

Acquia als neuer Drupal-Partner

Seit Anfang Oktober sind wir, als eines von vier österreichischen Unternehmen, offizieller Partner von Acquia, einem Software-as-a-service Anbieter für Enterprise-Lösungen im Bereich Cloud-Hosting und Cloud-basiertes Site Factoring.

Wir setzen unsere Projekt nach strengsten Richtlinien, und unter Einsatz von State-of-the-Art-Technologien sowie durch Continous Integration und -Delivery unterstützteden Entwicklungsprozesesn zur Qualitätssicherung, um. Durch diese Kooperation ermöglichen wir unseren Kunden zudem nun erweiterte Drupal-Lösungen, wie etwa die Cloud-basierte Site Factory oder Acquia Lift, wodurch Content-A/B-Tests direkt in Drupal abgewickelt und mit Hilfe des Algorithmus die Testergebnisse laufend optimiert und an die jeweiligen Zielgruppen ausgeliefert werden. Abgerundet wird das Angebot durch Cloud-basiertes Hosting, wodurch selbst bei Zugriffs-Spitzen schnell und problemlos ausreichend Kapazität zur Verfügung gestellt und eine garantierte Uptime von 99,95 % ermöglicht wird. Im Zusammenspiel mit einem 24/7 Support erspart diese Partnerschaft auch für unsere Kunden Ressourcen in Bezug auf Hosting, Entwicklung und Management diverser Projekte.

Und wir sind uns sicher, dass mit dem bevorstehenden Release von Drupal 8 die Anzahl von Drupal-Installationen international, aber insbesondere auch in Österreich und der gesamten D-A-CH-Region, weiter steigen wird.

ProjektmanagerIn Digital gesucht!

Du bist leidenschaftlich interessiert an digitalen Trends, gerne in Kontakt mit Kunden und schaffst es auch bei mehreren gleichzeitig laufenden Projekten Ruhe zu bewahren? Plaung und Projektkoordination liegen dir im Blut und eine deiner stärksten Eigenschaften ist es, über den eigenen Tellerrand zu blicken und dabei dennoch lösungsorientiert zu arbeiten? Dann sind das schon mal die besten Voraussetzungen um Teil unseres Teams zu werden, denn wir sind auf der Suche nach einem/r Teilzeit oder Vollzeit Projektmanager/in Digital, der/die sich künftig um die erfolgreiche Planung, Steuerung und Abwicklung interner und externer Projekte kümmert.

Das bieten wir dir

  • Junges, motiviertes Team
  • Internationale Kunden und Projekte
  • Flache Hierarchien
  • Möglichkeit, eigenen Projekten nachzugehen
  • Aus- und Weiterbildungsmöglichkeiten
  • Goodies für das leibliche und seelische Wohl (Getränke, Massagen, Wuzzler)

Das erwarten wir

Als ProjektmanagerIn übernimmst du die inhaltliche und budgetäre Planung von Projekten und betreust unsere Kunden ganzheitlich und in sämtlichen Belangen, du bist zudem für die Neukundenakquise verantwortlich. Dabei hast du immer das große Ganze im Blick und überzeugst uns durch eine kundenorientierte, strukturierte und effiziente Arbeitsweise. Du arbeitest eng mit Design, Development und Geschäftsführung zusammen und bringst dich dabei aktiv mit Ideen ein. Dir macht es Spaß strategisch-konzeptionell zu denken und zu arbeiten, du sprichst fließend Deutsch und Englisch, kannst dich sehr gut schriftlich ausdrücken und bringst bereits Erfahrungen hinsichtlich der Planung und Umsetzung digitaler Kamapagnen und Webprojekten, Community Management in Social Media sowie im Sales Management mit.

  • unverzichtbar: Genauigkeit, Verlässlichkeit, Stressresistenz, Branchen Know-how, Hands-on-Mentalität,
  • erwünscht: mind. 2-3 Jahre Berufserfahrung im Agenturumfeld, begeisterter Wuzzler, Vertriebserfahrung
  • hilfreich: Abgeschlossene Ausbildung / Studium, FH (Wirtschaftswissenschaften, Informatik oder was mit Medien / Kommunikation)

Wen du dich angesprochen fühlst, oder jemanden kennst, der jemanden kennt, der Interesse hat, dann melde dich bei uns und schicke uns ein E-Mail an office@zensations.at.

Validierung von Feldern mit dem Field Validation-Modul

Mit Hilfe des Field Validation-Moduls kann man schnell beliebig viele eigene Feldvalidierungen über die UI von Drupal konfigurieren. Sollten aber die über das Module gelieferten Möglichkeiten nicht anwendbar sein, ist es leicht eigene Validierungsplugins zu definieren. Als CTools-Plugins sind diese zudem noch exportierbar und können einfach auf andere Projekte übertragen werden.

Eine der großen Stärken von Drupal ist die großartige Field API, die Site Buildern oder Entwicklern die Möglichkeit gibt Inhaltstypen oder generell Entities mit Metadaten beliebig zu erweitern. Drupal kümmert sich dann um die Speicherung, Editierung oder Darstellung der gespeicherten Inhalte. In der Drupal-Contrib-Sphäre gibt es zahlreiche Module, die verschiedenste Anwendungsfälle abdecken, wie z.B. das Address Field-Modul, welches die Speicherung von Adressdaten erledigt oder das Date-Modul, womit komplexe Anforderungen zur Erfassung von Datumsinhalten leicht gemacht werden, um einfach ein paar zu nennen.

Validierung ist wichtig

Die Anforderungen bei Projekten sind immer unterschiedlich und öfters macht es Sinn eine eigene Lösung zu implementieren, z.B. ein von Drupal-Core zur Verfügung gestelltes Textfeld für eine bestimmte Dateneingabe zu benützen. Allerdings ist es wichtig, das Feld genau nach den Anforderungen zu validieren – und da ist das Field validation-Modul sehr hilfreich.

Wenn das Modul aktiviert ist, bekommt die Field UI ein zusätzlicher Tab, wo man beliebig viele vordefinierte Validierungstypen pro Feld zuweisen kann. Man kann z.B. ein Textfeld so erweitern, dass es nur nummerische Daten akzeptiert und hat noch als Beschränkungsmöglichkeit einen Minimal- oder Maximalwert der Eingabe dazu definieren. Das Modul bietet auch die Möglichkeit die Validierung nur für bestimmte Rollen zu aktivieren.

Sollte der Nutzer die Eingabe nicht korrekt tätigen, verhindert Drupal die Validierung laut der gerade getätigten Konfiguration:

Eine Übersicht der mitgelieferten Validierungsoptionen gibt es auf der Projektseite von Field validation. Die Möglchkeiten sind sehr umfangreich. Sollten sie aber nicht ausreichend sein, ist es sehr leicht einen eigenen Validierungshandler in einem Custom Modul zu definieren.

Eigene Implementierung einer Field Validation

Validierungs-Handler sind CTools-Plugins. Als erstes muss man also CTools sagen, wo unsere Plugins in der Ordnerstruktiur unseres Moduls liegen:

/** * Implementation of hook_ctools_plugin_directory(). */ function MY_MODULE_ctools_plugin_directory($module, $plugin) { if ($module == 'field_validation' && $plugin == 'validator') { return 'plugins/' . $plugin; } }

Damit können wir schon unser Plugin im Unterordner „plugin/validator“ von unserem Modul erstellen. Als Beispiel werden wir eine Username-Validierungslogik einbauen, also ob der eingegebe Wert in Drupal bereits Name eines Nutzer erfasst wurde. Der Name unseres Plugins sollte dem Namen des Handlers entsprechen. Wird nennen unsere Datei also ‚field_validation_username_registered.inc‘ (der Path zur Datei ist somit ‚plugin/validator/field_validation_username_registered.inc‘). Als erstes kommt wie bei jedem CTools-Plugin ein kurzes Beschreibung-Array:

$plugin = array( 'label' => t('Username already registered'), 'description' => t("Checks if there is a already a user registered with the supplied username."), 'handler' => array( 'class' => 'field_validation_username_registered', ), );

Wir bereits erwähnt entspricht der Name des Handlers dem Dateinamen von unserem Plugin. Und dann können wir schon die Logik implementieren – unser Handler erweitert die Klasse ‚field_validation_validator‘ und überschreibt darin 2 Methoden:

class field_validation_username_registered extends field_validation_validator { /** * Validate field. */ public function validate() { global $user; if (user_load_by_name($this->value)) { $error_message = t('The name %name is already taken.', array('%name' => $this->value)); $token = array( '[error-message]' => $error_message, ); $this->set_error($token); } }

public function token_help() { $token_help = parent::token_help(); $token_help += array( ‚[error-message]‘ => t(‚Error message that this username already exists.‘), ); return $token_help; }

}

Die Methode ‚validate()‘ ist der eigentliche Kern unseres Plugins: mit Hilfe der Core-Funktion user_load_by_name stellen wir sicher, dass die set_error-Methode der Parent-Klasse nur dann aufgerufen wird, wenn user_load_by_name uns einen Wert zurückgibt (in dem Fall das $user-Objekt = dieser Benutzername existiert bereits). Vorher definieren wir auch eine Validierungsnachricht, falls dieser Fall eintritt. Mit Hilfe der token_help-Methode übergeben wir unsere Validierungsnachricht als Token im UI.

Das Ergebnis

Das sollte es gewesen sein. Wenn wir die Validierung auf einem Feld aktivieren, sollte sie schon auch eine Nachricht ausgeben:

Der Code, den wir dafür geschrieben haben ist relativ klein und übersichtlich. Dazu ist er auf jedem Feld in unserer Drupal-Installation anwendbar. Field Validaiton-Plugins sind als CTools-Plugins natürlich exportierbar und übertragbar.