»Beim Tanze zettelt man an, was hernach ausgewoben wird.« Anonym
41 Plug-ins erstellen
Im Gegensatz zu Modulen operieren Plug-ins zumeist direkt auf dem eigentlichen Inhalt. Technisch gesehen werden sie in Abhängigkeit von verschiedenen Vorfällen (Events) im Hauptprogramm aufgerufen. Ein solcher Event ist beispielsweise die Vorbereitung eines Inhaltselements für die Ausgabe. Ein anderer Event kann der Aufruf des Editors sein.
Plug-ins tauchen, wie bereits erwähnt, in verschiedenen Formen auf. Sie können direkt den Inhalt verändern, einen Editor einbinden, über einen Editor-Button eigenen Text einfügen, bei der Suche Ergebnisse zurückliefern, die Benutzeranmeldung übernehmen und Aufgaben im Joomla!-System verrichten. Mit dem neuen Event-System von Joomla! sind die Anwendungsmöglichkeiten enorm gestiegen. Wir werden uns einige Ausprägungen im Folgenden genauer ansehen.
Vieles davon wird Ihnen aus Kapitel 39, »Mein erstes Modul«, schon bekannt vorkommen. Auch Plug-ins benötigen für die Installation eine XML-Datei, über die auch Parameter angegeben werden können. Ebenso ist es aus Plug-ins heraus möglich, die Funktionen und Objekte der Joomla!-API zu verwenden.
41.1 Funktionsweise 

Plug-ins werden in Objekten programmiert. Das Grundgerüst sieht dabei immer gleich aus:
1 jimport('joomla.plugin.plugin'); 2 class plgSystemTest extends JPlugin { 3 function plgSystemText (&$subject, $config) { 4 parent::__construct( $subject, $config ); 5 } 6 function onEvent() { 7 //code 8 } 9 }
Listing 41.1 Das Grundgerüst eines Plug-ins
Zunächst wird über den Befehl jimport die Basisklasse für ein Plug-in geladen. Von dieser wird das neue Plug-in über den Befehl extends abgeleitet. Der Effekt ist, dass viele Methoden, die ein Plug-in benötigt, hier gleich mit eingebunden werden. In den Zeilen 3–5 wird der Konstruktor der Basisklasse aufgerufen. Dieser führt einige grundlegenden Vorbereitungen durch. Achten Sie darauf, dass der Name der Methode identisch mit dem Namen der Klasse sein muss. Ab Zeile 6 wird eine weitere Methode erstellt, die den Namen eines Events trägt. Wird dieser Event von Joomla! ausgelöst, so erfolgt automatisch ein Aufruf dieser Methode.
Events kann man sich als eine Art Botschaft des Joomla!-Grundsystems an seine Plug-ins vorstellen. Diese Botschaften werden gesendet, wenn bestimmte Aktionen durchgeführt werden oder durchgeführt worden sind. So gibt es beispielsweise einen onLogin-Event, der ausgelöst wird, nachdem sich ein Benutzer erfolgreich angemeldet hat. In einigen Plug-ins gibt es dann Methoden, die auf diese Botschaften reagieren und ihrerseits Code ausführen. So kann an verschiedenen Punkten während der Erstellung einer Joomla!-Seite eingegriffen werden.
Sie ahnen sicher schon, dass eine gute Kenntnis der Events ziemlich wichtig für die Programmierung von Plug-ins ist. In Tabelle 41.1 finden Sie eine Liste der verfügbaren Ereignisse.
Ereignis | Beschreibung |
Authentication |
|
onAuthenticate |
Wird bei der Anmeldung eines Benutzers ausgeführt. Hier können Sie festlegen, ob der Benutzer im System angemeldet wird. |
Content |
|
onPrepareContent |
Ein Inhaltselement wird zur Ausgabe aufbereitet. |
onAfterDisplayTitle |
Hier haben Sie die Möglichkeit, Daten zwischen Titel und Inhalt eines Beitrags einzufügen. |
onAfterDisplay Content |
Tritt unmittelbar nach der Ausgabe des Inhalts ein. |
onBeforeDisplay Content |
Tritt unmittelbar vor der Ausgabe des Inhalts ein. |
onAfterContentSave |
Ein Inhaltselement wurde gespeichert. |
onBeforeContentSave |
Es soll ein Inhaltselement gespeichert werden. Hier können Sie noch eingreifen. |
onAfterDisplay |
Wird ausgelöst, nachdem die Inhalte ausgegeben worden sind. |
onBeforeDisplay |
Wird ausgelöst, wenn Joomla! bereit ist, die Inhalte darzustellen. |
Editors |
|
onInit |
Der Editor wird gestartet. Hier können Sie noch zusätzliche Einstellungen vornehmen. |
onGetContent |
Der Text wird für den Editor aufbereitet. |
onSetContent |
Inhalte werden in den Editor geladen. |
onSave |
Ein Text soll gespeichert werden. |
onDisplay |
Nach dem Editor-Feld werden zusätzliche Buttons ausgegeben. |
Search |
|
onSearch |
Eine Suchanfrage wird bearbeitet. |
onSearchAreas |
Hier können Sie zusätzliche Suchräume definieren. |
System |
|
onAfterInitialise |
Wird ausgelöst, nachdem das Joomla!-Framework geladen wurde. |
onAfterRoute |
An dieser Stelle weiß Joomla! bereits, welche Aufgaben auf das System warten. |
onAfterDispatch |
Wird ausgelöst, wenn der Inhalt der aufgerufenen Komponente verfügbar ist. |
onAfterRender |
Wird ausgelöst, wenn die Ausgabe zusammengesetzt wurde und verfügbar ist. |
User |
|
onLoginUser |
Wird ausgeführt, nachdem ein Benutzer erfolgreich am System angemeldet wurde. |
onLoginFailure |
Hat der Benutzer ungültige Daten bei der Anmeldung eingegeben, wird dieser Event ausgelöst. |
onLogoutUser |
Wird ausgelöst, nachdem ein Benutzer sich aus dem System abgemeldet hat. |
onLogoutFailure |
Tritt ein Fehler bei der Abmeldung auf, so können Sie hier reagieren. |
onBeforeStoreUser |
Tritt ein, bevor die Daten eines neuen Benutzers gespeichert werden. |
onAfterStoreUser |
Tritt ein, nachdem die Daten eines neuen Benutzers gespeichert worden sind. |
onBeforeDeleteUser |
Tritt ein, bevor die Daten eines Benutzers gelöscht werden. |
onAfterDeleteUser |
Tritt ein, nachdem die Daten eines Benutzers gelöscht worden sind. |
XML-RPC |
|
onGetWebServices |
Wird ausgelöst, wenn eine Anfrage von außen kommt, die herausfinden soll, welche Webservices die Joomla!-Installation anbietet. |
Sie sehen in der Tabelle, dass die Events nach Plug-in-Typen geordnet sind. Diese Typen sind wichtig für die Registrierung des Plug-ins, die in der XML-Datei festgelegt wird. Denn nur die Ereignisse, die auch dem Plug-in-Typ entsprechen, werden tatsächlich berücksichtigt. So ist es nicht möglich, in einem User-Plug-in die Ausgabe des Inhalts zu verändern.
Die einzelnen Event-Methoden werden von Joomla! gegebenenfalls noch mit Parametern gefüttert. Dazu finden Sie mehr in Anhang B.