modul

Ein eigenes API Modul für Drupal schreiben

So schön es auch ist, Webanwendungen mit Drupal 7 zu entwickeln, gibt es trotzdem immer wieder Anwendungsfälle wo einfach ein paar Funktionen fehlen. Das liegt daran, dass ein Framework wie Drupal natürlich generische Methoden zur Verfügung stellen muss, um alle denkbaren Anwendungsfälle möglich zu machen. Oft gibt es für einen Entwickler aber aufgrund der Sache an der er Arbeit immer nur einen identischen Anwendungsfall den er immer und immer wieder ausführen muss. Was gäbe es da sinnvolleres zu tun, als ein eigenes API-Modul zu schreiben, in dem diese zahlreichen Befehle gebündelt und schneller nutzbar gemacht werden.

Drupal 7 Datenbank-Abfragen mit EntityFieldQuery

Eine wertvolle Neuerung aus Drupal 7 ist die EntityFieldQuery API. Hiermit können programmatische Inhalts-Abfragen über jede definierte Entität getätigt werden. Wollte man in Drupal 6 programmatisch eine Datenbankabfrage über bestimmte CCK-Felder machen, empfahl es sich aus Kompatibilitätsgründen mit Views eine Abfrage zu erstellen, diesen dann im Code zu laden und auszuführen. So war sichergestellt, dass kein Update am CCK Modul oder Veränderungen an der Datenstruktur zu Kompatibilitätsproblemen mit dem eigenen db_query()-Call führten. EntityFieldQuery ist eine alternative und deutlich bessere Abstraktionsschicht für diesen Anwendungsfall, denn es ist eine Drupal 7 Core Funktionalität und kein Modul in dessen Abhängigkeit man sich begibt, es arbeitet für simple Calls deutlich performanter als Views und es kann extrem flexibel eingesetzt und sogar um eigene Methoden erweitert werden. Die Fähigkeiten und Performance dieser API gehen soweit, dass es zu einer Grundüberlegung gemacht werden sollte, ob man für eine Darstellung von Inhalt das Views Modul oder doch lieber ein eigenes Modul mit EntityFieldQuery nutzen sollte.

SmartRunner Drupal Modul

Die erste funktionierende Version eines SmartRunner Drupal Moduls ist fertig. Da der Feed, der von SmartRunner zur Verfügung gestellt wird, etwas chaotisch ist, habe ich mit Hilfe des Aggregator-Moduls und Views Formatted Field ein kleines Modul geschrieben, das den Feed ausliest und auf einer eigenen Seite jeweils den Titel und die Streckenkarte anzeigt. Wie immer gibts noch viele Probleme (vor allem mit der Sortierung beim ersten Import), aber funktionieren tut es schon mal. Datei findet ihr im Anhang.

Eigene Formulare ändern und umgestalten mit hook_form_alter()

Wie man ein Formular erstellt und wie man dieses dann gestalten kann, war bereits Thema vergangener Artikel. Die Form API stellt aber noch weitere nützliche Funktionen zur Verfügung. Eine davon nennt sich hook_form_alter und kann dafür genutzt werden Tabellen vor ihrem Rendering zu verändern. Das kann nützlich sein, wenn man zwei Module geschrieben hat, wovon Modul A ein Formular bereitstellt und Modul B - wenn aktiviert - dieses Formular verändern oder erweitern soll. Hier ein Beispiel...