Objektorientierte Programmierung in Drupal – Drupal Architektur


Die Drupal Architektur in Kürze

Ich muss an dieser Stelle sagen, dass ich auch nicht in-depth Kenntnisse der genauen Vorgehensweise habe, ich bin kein Drupal Core Entwickler. Die Grundlegenden Prinzipien sollten dennoch klar sein. Hier sind eigentlich zwei wichtige Grundlagen:

  1. Das Hook System
  2. Das Front-Controller Prinzip

Front-Controller

Diese Architektur ist eigentlich für PHP Anwendungen sehr beliebt und läuft nach einem relativ einfachen Muster ab: Jeder Seitenaufruf erfolgt IMMER über index.php (die Ur-index.php Datei!). Dort werden dann zuerst in abhängigkeit der URL die ganzen nötigen Datein geladen (-> was als Bootstrap benannt wird), worauf wieder eine Seite ausgegeben wird. Es ist also nicht so, dass die URL die Ordnerhierarchie abbildet, wie das der Fall wäre, wenn man eine statische HTML Seite baut!

Das Hook System

Dieses System macht Drupal so flexibel. Was ist ein Hook? Ein Haken. Na und? Die Analogie dazu ist, dass man sich über diese Haken (oder eben Hooks) ins System einklinken kann. Der Ablauf hier sieht ungefähr wie folgt aus: Das Menu Modul wird geladen. Im ersten Schritt werden hier die wichtigsten Dinge geladen. In einem zweiten Schritt werden alle Module eingesammelt, welche den Hook Menu (hook_menu) implementieren. Damit dieser auch gefunden wird, gibt der jeweilige Hook eine Namenskonvention vor, um hook_menu zu implementieren müsste ich also in Modul xyz schreiben: function xyz_menu(). Es wird also die Funktion xyz_menu, cck_menu, imagecache_menu, fast_gallery_menu usw. aufgerufen. Danach kommt der nächste Hook dran, z.B. hook_nodeapi, welcher wieder schaut, welches Modul diesen Hook implementiert, um die entsprechende Funktion aufzurufen.

So kann man ein Modul schreiben, welches sich ohne Probleme in das bestehende System integrieren lässt und es auch ohne Probleme wieder entfernen. Es lassen sich im Modul auch eigene Hooks definieren (Views macht das zum Beispiel). So können andere Module Einfluss auf die Logik nehmen. Es wird also eigentlich sehr schnell klar, dass das System dadurch sehr flexibel wird.

Die Hooks und die dazugehörige Dokumentation sind unter api.drupal.org auffindbar.

Theming und Hooks

Das Theming verfolgt eigentlich ein ähnliches System. Es gibt z.B. die Funktion theme_image($image). Diese wird aber wie folgt aufgerufen: theme('image',$image). Warum so kompliziert?? Ganz einfach, diese Theme Funktion ist ähnlich wie das Hook System und kann überschrieben werden, z.B. in der template.php Datei. Wenn diese Funktion aufgerufen wird, wird gleich wie bei den Hooks nach passenden Funktionen geschaut, wird nichts gefunden, dann wird die default Funktion (eben theme_image(…)) verwendet, ansonsten die neue Funktion. Dadurch lässt sich z.B. der Output für ein Bild verändern, ohne dadurch die eigentlich theme_image Funktion verändern zu müssen.