»Tanz ist Hingabe an die Leidenschaft der Musik.« Helga Schäferling
40 Die Joomla!-API
Unser nächstes Anliegen ist es, nicht nur irgendwelchen Text auszugeben, sondern auch auf die Umgebung von Joomla! zu reagieren. Dazu stellen die Programmierer uns eine Schnittstelle zur Verfügung, über die wir auf die Daten und Funktionen des Systems zugreifen können: die sogenannte API. Damit erhalten wir Informationen über den angemeldeten Benutzer, das aktuelle Dokument, die Datenbank und viele weitere Elemente der Seite. Es ist natürlich auch möglich, diese Daten zu verändern und so die Seite programmiertechnisch zu gestalten. Der Weg dazu wird in diesem Kapitel beschrieben.
Die komplette API ist so umfangreich, dass man über darüber ein eigenes Buch schreiben könnte. Sie ist mittlerweile jedoch auch von den Entwicklern selbst relativ gut beschrieben:
- Es wurde ein Dokumentations- und Entwicklerportal eingerichtet, das Sie unter der URL developer.joomla.org aufrufen können.
- Eine Referenz finden Sie unter api.joomla.org. Wählen Sie in der Dropdown-Liste Packages den Eintrag Joomla-Framework, um die im Folgenden beschriebenen Klassen zu finden.
- Die wertvollste Ressource für Tipps zur Entwicklung ist das Joomla!-Wiki, das man unter der URL docs.joomla.org/Category:Development aufrufen kann.
40.1 Zugriff auf die Interna von Joomla! 

Um an die Daten und Funktionen von Joomla! heranzukommen, bietet das System dem Entwickler einige Objekte an. Diese können Sie in Ihren eigenen Programmcode einbinden, um ihre Eigenschaften und Methoden zu verwenden. Es liegt daher nahe, sich mit dem Objektmodell von Joomla! auseinanderzusetzen.
Viele Objekte finden sich im Joomla!-Framework-Paket. Tabelle 40.1 listet die wichtigsten auf. Daneben verwendet Joomla! noch einige externe Bibliotheken, z. B. PEAR oder geshi, die aber im Folgenden weitestgehend keine Rolle spielen.
Objekt | Aufgabe |
Anwendung |
|
JApplication |
Stellt den Zugriff auf viele grundlegenden Eigenschaften von Joomla! her. |
JModel |
Grundlage für ein Model nach der MVC-Architektur. |
JView |
Grundlage für eine View nach der MVC-Architektur. |
JController |
Grundlage für einen Controller nach der MVC-Architektur. |
JModuleHelper |
Bietet einige Hilfsfunktionen für Module an. |
Datenbank |
|
JDatabase |
Erlaubt Ihnen, auf die Datenbank zuzugreifen, und bietet verschiedene Methoden für Abfragen. |
Dokument |
|
JDocument |
Zugriff auf das aktuell erstellte Dokument. Das ist die Beschreibung der Ausgabe, bevor sie in HTML gegossen wird. |
JDocumentRenderer |
Erstellt eine HTML-Ausgabe aus einem Dokument. |
Umgebung |
|
JRegistry |
Zugriff auf die Konfiguration von Joomla! |
JParameter |
Bietet den Zugriff auf Einstellungen von Erweiterungen. |
JRequest |
Schnittstelle für den Zugriff auf die Variablen, die der Seite beim Aufruf vom Browser übergeben werden. |
JURI |
Damit können Sie gültige URLs erstellen und analysieren. |
HTML |
|
JHTML |
Diese Klasse stellt Ihnen Methoden zur Verfügung, die komplexe HTML-Bestandteile für die Seite erzeugen. |
Sprache |
|
JLanguage |
Klasse für die Verwaltung von Sprachen und Internationalisierung. |
JText |
Gibt einen Text in der aktuellen Sprache aus. |
|
|
JMail |
Mit diesem Objekt können Sie E–Mails erstellen und versenden. |
Benutzer |
|
JAuthentication |
Übernimmt die Anmeldung eines Benutzers im System. |
JUser |
Erlaubt es Ihnen, die Daten eines registrieren Benutzers abzufragen und zu verändern. |
Wie sieht nun der Zugriff auf diese Objekte aus? Grundsätzlich sind drei Fälle zu unterscheiden. Haben wir es mit einem statischen Objekt zu tun, dann wird dieses wie eine normale PHP-Funktion verwendet. Diese Aufrufe werden in der Regel verwendet, wenn es sich um Hilfsfunktionen handelt, die keine eigenen Daten verwalten. Das Schema ist:
$variable = Objekt::funktion(argument);
Beispielsweise liefert dieser Aufruf den Inhalt eines Übergabeparameters action und steckt ihn in die Variable mit dem gleichen Namen:
$action = JRequest::get('action');
Das Ergebnis eines solchen Aufrufs ist im Regelfall ein einfacher Datentyp, beispielsweise eine Zeichenkette oder eine Zahl.
Normalerweise hat man es jedoch nicht mit statischen Objekten zu tun, sondern mit Instanzen. Diese müssen nach der objektorientieren Lehre zunächst aus der Klasse erstellt werden, bevor man sie benutzen kann. Das sieht so aus:
$objektvariable = new Objekt(argument);
Das Ergebnis ist eine Referenz auf die Instanz. Man spricht auch von einer Objektvariablen. Der folgende Code liefert beispielsweise den Zugriff auf die Einstellungen, die für ein Plug-in vorgenommen wurden. Als Argument wird eine Eigenschaft des entsprechenden Plug-ins übergeben.
$pluginParams = new JParameter( $plugin->params );
Diese Art des Aufrufs findet man im Joomla!-Code jedoch relativ selten. Ein Grund dafür ist, dass man in der Regel auf Objekte zugreifen will, die es bereits gibt. Der angemeldete Benutzer ist ein Beispiel dafür. Es macht wenig Sinn, diesen im Programm mehrfach zu verwalten. Im Gegenteil, dadurch steigt die Gefahr von Inkonsistenzen enorm. Daher gibt es für diese Objekte in Joomla! einen eigenen Zugriffsmechanismus, die sogenannte Factory. Diese hat wiederum einige statische Methoden, über die Sie auf die entsprechenden Objekte zugreifen können.
$objektvariable =& JFactory::getObject(argument);
Wie Sie sehen, wird wiederum eine Referenz auf ein Objekt erzeugt, dieses Mal jedoch auf ein bereits bestehendes. Daher verwendet man als Zuweisungsoperator auch nicht ein einfaches Gleichheitszeichen, sondern eine Referenzzuweisung. Damit wird sichergestellt, dass das Objekt nicht dupliziert wird. Das folgende Beispiel gibt Ihnen Zugriff auf das Datenbankobjekt:
$db =& JFactory::getDBO();
Wie Sie sich denken können, kommt damit der JFactory eine zentrale Rolle zu. In der Tabelle 40.2 wird aufgelistet, welche Objekte Sie über welche Methoden erreichen können. Zudem sind wichtige Objekte auch in vielen Kontexten direkt über eine Variable erreichbar. Diese finden Sie ebenfalls in der Tabelle.
Methode | Variable | Rückgabetyp | Anmerkung |
getApplication() |
$mainframe |
JApplication |
Rahmenklasse für die Ausführung von Joomla! |
getConfig() |
|
JRegistry |
Zugriff auf die Einstellungen von Joomla! |
getDate() |
|
JDate |
Die aktuelle Uhrzeit |
getDBO() |
|
JDatabase |
Zentraler Zugriff auf die Datenbank |
getDocument() |
|
JDocument |
Daten der eben erstellten Seite |
getMailer() |
|
JMail |
Ein Objekt zum Versenden von E–Mails |
getTemplate() |
|
JTemplate |
Zugriff auf das aktuelle Template |
getURI() |
|
JURI |
URL, mit der die Seite aufgerufen wurde |
getUser() |
$my |
JUser |
Daten zum aktuellen Benutzer |
|
$params |
JRequest |
Die Parameter, die mit der aktuellen URL übergeben wurden |
Eine Übersicht über die Methoden und Eigenschaften der Joomla!-Objekte finden Sie in der Referenz in Anhang B. Um ein Gefühl für die API zu bekommen, wollen wir unser Modul nun dahingehend erweitern, dass als Ausgabe der Name eines eingeloggten Users erscheint. Hinter dem Namen soll ein Info-Icon stehen, das einen Tooltip einblendet, wenn man mit der Maus darüber fährt. Das Ganze wird internationalisiert und reagiert auf Einstellungen im Backend.