»Der Tanz gibt uns eine Art von Rausch, in welchem die Gemüter die Verstellung vergessen.« Adolph Knigge
42 Eine eigene Komponente
Komponenten sind wesentlich komplexere Elemente als Plug-ins oder Module. Neben der Darstellung im Frontend gibt es auch im Backend einen Manager und ein eigenes Menü. Zudem greifen Komponenten auf die Datenbank zu, so dass auch hier eine Schnittstelle geschaffen werden muss. Daher besteht eine Komponente in der Regel auch aus mehreren Dateien. Wir wollen im Folgenden eine Komponente entwickeln, in der Tanzpaare zusammen mit einem internen Turnier-Ranking gespeichert werden können, so dass man sich immer die aktuelle Vereinswertung ansehen kann. Dazu benötigen wir im ersten Schritt die folgenden Dateien in einem separaten Installationsverzeichnis, z. B. pairrank_inst:
Installationsdateien
- pairrank.xml
Daten für die Installation.
- install.php
Ein zusätzliches Installationsskript. Wird auch dazu genutzt, um nach der Installation Informationen für den Benutzer anzuzeigen.
- install.sql
Erstellt die notwendigen Datenbanktabellen und füllt diese mit ersten Daten.
- uninstall.sql
Löscht bei der Deinstallation der Komponente die eigenen Datenbanktabellen.
Frontend
- pairrank.php
Die Basis des Frontend-Teils der Komponente.
- controller.php
Enthält die Verarbeitungslogik der Komponente.
- views/pairrank/view.html.php
Die View-Klasse, die die Daten zur Darstellung aufbereitet.
- views/pairrank/tmpl/default.php
Das HTML-Template für die Frontend-Ausgabe.
- models/pairrank.php
Enthält das Datenmodell und Methoden für den Zugriff und die Speicherung.
Backend
- admin.pairrank.php
Enthält die Programmlogik für das Backend.
Hoffentlich sind Sie nicht erschrocken über die Fülle der Dateien, die erstellt werden müssen. Wir werden sie im Folgenden im Einzelnen durchsprechen. Vielleicht haben Sie sich gewundert, warum im Backend-Bereich nur eine Datei zu finden ist. Diese fungiert momentan nur als Platzhalter; später in diesem Kapitel werden wir sie weiter ausbauen.
Basis-Skript und Controller? |
Vielleicht fragen Sie sich, warum der Controller nicht gleich im Basis-Skript enthalten ist. Eine mögliche Erklärung ist, dass die Joomla!-Entwickler aus Kompatibilitätsgründen noch Raum für »Spaghetti-Komponenten« lassen wollten, die alles in einer Datei verwalten. Zudem ist der Controller ein Objekt, das erst aus einem »Hauptprogramm« heraus erstellt werden muss. |
Bevor wir beginnen, sollten wir uns noch Gedanken über den Aufbau unserer Datenbasis machen. Die Tabelle #__pairrank soll die folgenden Spalten enthalten:
Spalte | Wert | Beschreibung |
id |
Integer |
Eine fortlaufende Nummer zur eindeutigen Identifizierung des Datensatzes. |
pair |
Text |
Die Namen der Tänzer. |
points |
Integer |
Die Anzahl der Punkte. |
published |
Small Integer |
1 für publiziert, 0 für versteckt. |
42.1 Die Installationsdateien 

Der Installationsprozess bei einer Komponente ist aufwendiger als bei den anderen Erweiterungen. Komponenten bestehen aus einem Frontend- und einem Backend-Bereich und verwalten häufig eigene Daten.
42.1.1 Die Komponenten-Beschreibung 

Die XML-Datei, die die Installation beschreibt, enthält einige Tags, die wir bisher noch nicht verwendet haben.
1 <?xml version="1.0" encoding="UTF-8"?> 2 <install type="component" version="1.5"> 3 <name>pairrank</name> 4 <files folder="site"> 5 <filename>pairrank.php</filename> 6 <filename>controller.php</filename> 7 <filename>views/pairrank/view.html.php</filename> 8 <filename>views/pairrank/tmpl/default.php</filename> 9 <filename>models/pairrank.php</filename> 10 </files> 11 <install> 12 <sql> 13 <file charset="utf8" driver="mysql">install.sql</file> 14 </sql> 15 </install> 16 <uninstall> 17 <sql> 18 <file charset="utf8" driver="mysql">uninstall.sql</file> 19 </sql> 20 </uninstall> 21 <installfile>install.php</installfile> 22 <uninstallfile>install.php</uninstallfile> 23 <administration> 24 <menu>Paar-Ranking</menu> 25 <submenu> 26 <menu act="all">Verwalten</menu> 27 </submenu> 28 <files folder="admin"> 29 <filename>admin.pairrank.php</filename> 30 <filename>install.sql</filename> 31 <filename>uninstall.sql</filename> 32 </files> 33 </administration> 34 </install>
Listing 42.1 pairrank.xml
Zu den Zeilen 1–3 ist lediglich anzumerken, dass der Eintrag type in Zeile 2 natürlich den Wert component haben muss. Im <files>-Tag der Zeilen 4 –10 werden die Dateien vermerkt, die für den Frontend-Teil zuständig sind. Beachten Sie das Attribut folder="site". In den Zeilen 11–15 und 16 –20 wird die SQL-Datei angegeben, die bei der Installation bzw. der Deinstallation ausgeführt wird. PHP-Skripten, die bei Installationsvorgängen zusätzlich ausgeführt werden sollen, werden in den Zeilen 21 und 22 festgelegt. Der Bereich <administration> legt die Daten für das Backend fest (Zeilen 23–33). Bestimmen Sie zunächst den Namen des Eintrags im Components-Menü mit <menu> (Zeile 24) und dann im <submenu>-Tag die Untermenüs (Zeilen 25–27). Hier können Sie im Attribut act einen Wert angeben, der später beim Aufruf an die Komponente übergeben wird. Danach folgt nach bekanntem Schema eine Liste der Dateien, die zur Administrationsseite der Komponente gehören (Zeilen 28–32). Beachten Sie, dass hier die SQL-Dateien nochmals angegeben sind.
Die Dateistruktur im Installationsverzeichnis sieht dann folgendermaßen aus:
mod_pairrank
install.php
pairrank.xml
site
controller.php
pairrank.php
views
pairrank
view.html.php
tmpl
default.php
models
pairrank.php
admin
admin.pairrank.php
install.sql
uninstall.sql
42.1.2 Die Datenbank 

Sehen wir uns als Nächstes die Dateien an, die mit der Datenbank zu tun haben. In install.sql finden Sie Anweisungen, die bei der Installation ausgeführt werden.
1 DROP TABLE IF EXISTS `#__pairrank`; 2 CREATE TABLE `#__pairrank` ( 3 `id` INT NOT NULL AUTO_INCREMENT, 4 `pair` TEXT NOT NULL, 5 `points` SMALLINT NOT NULL, 6 `published` TINYINT(1) NOT NULL, 7 PRIMARY KEY (`id`) 8 ); 9 INSERT INTO `#__pairrank` VALUES (1,'Josef/Maria',200,1); 10 INSERT INTO `#__pairrank` VALUES (2,'Hans/Agathe',400,1);
Listing 42.2 install.sql
Sollten sich noch alte Daten (beispielsweise aus einer früheren Version der Komponente) in der Datenbank befinden, so werden diese in Zeile 1 gelöscht.
Nicht zwingend |
Wenn Sie nicht wollen, dass die alten Daten bei jeder Installation gelöscht werden, können Sie diese Zeile auch weglassen. Dann müssen Sie jedoch sicherstellen, dass sich die Tabellenstruktur nicht ändert. |
In den Zeilen 2–8 wird die Datenbank gemäß der Struktur angelegt, die wir in Tabelle 42.1 beschrieben haben. Beachten Sie, dass statt des Tabellenpräfixes die Zeichenkette #__ verwendet wird. Diese wird bei der Installation automatisch durch das im entsprechenden System gültige Präfix ersetzt.
Wenn die Komponente deinstalliert wird, sollten die entsprechenden Datenbanktabellen ebenfalls gelöscht werden. Die nötigen Befehle werden in der Datei uninstall.sql hinterlegt:
1 DROP TABLE IF EXISTS ´#__pairrank´;
Listing 42.3 uninstall.sql
Diese besteht in unserem Fall nur aus einer Zeile, mit der die Tabelle pairrank entfernt wird. Beachten Sie auch hier das #__ als Präfix.
42.1.3 Zusätzliche Installationsanweisungen 

Das zusätzliche Installations- und Deinstallationsskript sieht in unserem Fall sehr bescheiden aus und könnte zur Not auch weggelassen werden. Dann müssen Sie allerdings auch die Zeilen 21–22 aus der XML-Datei löschen.
1 <?php 2 defined('_JEXEC') or die('Restricted access'); 3 function com_install() { 4 echo 'Schön, dass Sie unsere Komponente benutzen'; 5 } 6 function com_uninstall() { 7 echo 'Bis bald'; 8 } 9 ?>
Listing 42.4 install.php
In der Datei sind die Funktionen für beide Aktionen, Installation und Deinstallation, hinterlegt. Wichtig ist, dass Sie dabei die Namenskonvention einhalten: Sie brauchen eine Funktion com_install für die Installation und eine Funktion com_uninstall für das Entfernen der Komponente. Wir haben in beiden Funktionen nur beispielhaft eine Ausgabe implementiert. Diese wird mit der Erfolgsmeldung angezeigt, die ausgegeben wird, wenn die Installation oder Deinstallation korrekt ausgeführt wurde.