15.1 Beispiel-Komponente hallowelt
Bevor wir richtig loslegen, aber erst mal ein einfacher »Hallo Welt«-Start. Komponenten teilen sich in Frontend- und Backend-Komponenten. Frontend-Komponenten werden auf Ihrer Website angezeigt, Backend-Komponenten werden für den Administrationsbereich entwickelt, meist um die Frontend-Komponenten zu verwalten. Aus der Sicht eines Besuchers Ihrer Website erkennen Sie eine Komponente an der Art des Aufrufs einer Joomla!-Seite:
Die URL
http://localhost/joomla150/index.php?option=com_contact
ruft beispielsweise die Frontend-Komponente com_contact auf.
Wenn Sie jetzt in Ihr Dateisystem schauen, finden Sie im Unterverzeichnis [PfadzuJoomla]/components eine ganze Menge Komponenten, unter anderem auch die com_contact-Komponente (Abbildung 15.1).

Abbildung 15.1: Joomla!-Komponenten
Innerhalb dieser Verzeichnisse sind je nach Komplexität der Komponenten weitere Verzeichnisse mit Dateien für Model, View und Controller enthalten.
15.1.1 Ein Haus für hallowelt
Jede Komponente »wohnt« in ihrem Verzeichnis. Der Weg, den Joomla! einschlägt, ist folgender:
- Joomla! wertet die übergebenen Werte in der URL aus: /index.php?option=com_hallo.
- Es sucht in der Komponenten-Tabelle nach der Komponente com_hallo.
- Es sucht nach einem Verzeichnis com_hallo.
- Es sucht in diesem Verzeichnis eine Datei hallo.php.
- Es interpretiert diese Datei.
Damit richtig interpretiert wird, benötigen Sie mehrere Dateien.
- hallo.php – der Einstiegspunkt in Ihre Komponenten
- controller.php – die Steuerung
- views/hallo/view.html.php – die Präsentation, die die Daten an das Template weitergibt
- views/hallo/tmpl/default.php – ein Standard-Template, das von »richtigen« Templates überschrieben oder so, wie es ist, genutzt werden kann.
- hallo.xml – die bekannte XML-Datei, die dem Installer erklärt, was im Paket ist, wo es installiert wird und wer dafür zuständig ist.
- Auch wenn Sie jetzt innerlich zerbrechen und sich nach Joomla! 1.0 zurücksehnen (da ging das mit einer Datei :-)) – geben Sie der Idee eine Chance!
Installieren Sie sich am besten das Komponentenpaket com_hallo.zip über den Joomla!-Installer und legen Sie sich einen Menüpunkt an. Dann haben Sie gleich alle Dateien im richtigen Ordner und können den Quelltext leicht nachvollziehen.
15.1.2 Der Einstieg (/component/com_hallo/hallo.php)
Diese Datei wird als Erstes aufgerufen, wenn Sie die URL
http://localhost/joomla150/index.php?option=com_hallo&view=hallo
oder den entsprechenden Menüpunkt anklicken. Das Ergebnis ist recht unspektakulär. Sie sehen den Text »Hallo Welt« im Inhaltsfenster.
Der Quellcode der Datei sieht folgendermaßen aus (siehe Listing 15.1):
<?php
// kein direkter Zugriff
defined('_JEXEC') or die('Restricted access');
// Einlesen des basis Controllers
require_once (JPATH_COMPONENT.DS.'controller.php');
// Einen eigenen Controller erzeugen
$classname = 'HalloController'
$controller = new $classname( );
// Nachsehen, ob Parameter angekommen sind (Requests)
$controller->execute( JRequest::getVar('task'));
// Umleitung innerhalb des Controllers
$controller->redirect();
?>
Listing 15.1: /component/com_hallo/hallo.php
defined('_JEXEC') or die('Restricted access');
Die erste Zeile ist ein Sicherheitscheck, ob die Datei von Joomla! aus aufgerufen wird oder direkt. Direkt aufgerufene Skripte werden sofort durch die Funktion die() beendet.
require_once (JPATH_COMPONENT.DS.'controller.php');
Danach wird der erste Controller eingelesen. JPATH_COMPONENT ist der absolute Pfad zur aktuellen Komponente (components/com_hallo). DS ist der directory separator des Betriebssystems. Windows hätte es gern andersherum als Unix-artige Systeme, also entweder / oder \. Dieser Wert wird von Joomla! automatisch gesetzt.
$classname = 'HalloController';
$controller = new $classname( );
Jetzt können wir den eingelesenen Controller instanzieren und damit einen für uns »brauchbaren« Controller erzeugen. Wenn Sie »nur« einen Controller benötigen, wie es im Frontend oft der Fall ist, können Sie auch folgende Anweisung benutzen:
$controller = new HalloController();
$controller->execute( JRequest::getVar('task'));
Anweisungen an die Komponente werden in der Form index.php?option=com_ hallo&task=Aufgabe (save, edit, new, ...) über die URL angegeben. Mit dieser Zeile wird nachgeschaut, ob es da etwas zu lesen gibt.
$controller->redirect();
Unter Umständen leitet der Controller die Anfrage an eine andere Seite weiter, beispielsweise wenn etwas gespeichert wird, daher diese Zeile.
15.1.3 Der Controller (/component/com_hallo/controller.php)
Da die Komponente nun wirklich einfach ist, hat der Controller nur die Aufgabe, etwas anzuzeigen. Wir benötigen kein Datenmodell und nur eine display-Methode (Listing 15.2).
<?php
jimport('joomla.application.component.controller');
class HalloController extends JController{
function display(){
parent::display();
}
}
?>
Listing 15.2: /component/com_hallo/controller.php
Der Aufruf der display-Methode bestimmt den Namen und das Layout des Views. Wenn Sie beispielsweise einen neuen Menülink anlegen, sehen Sie das Ergebnis dieser Display-Variante. Unsere Komponente kennt nur das Standardlayout.

Abbildung 15.2: Menülink für die »Hallo Welt«-Komponente
15.1.4 Der View (/component/com_hallo/views/hallo/
views.html.php)
Und hier ist er schon, der Standard-View (Listing 15.3).
<?php
jimport( 'joomla.application.component.view');
class HalloViewHallo extends JView{
function display($tpl = null){
$greeting = "Hallo Welt!";
$this->assignRef( 'greeting', $greeting );
parent::display($tpl);
}
}
?>
Listing 15.3: /component/com_hallo/views/hallo/views.html.php
Der View, die Präsentation, erhält normalerweise Daten (aus dem Modell), bereitet sie auf und schickt sie an das Template.
$greeting = "Hallo Welt!";
$this->assignRef( 'greeting', $greeting );
parent::display($tpl);
Das Modell ist hier durch die Variablenzuweisung überflüssig. In der Variable $greeting könnte aber auch das Ergebnis einer Datenbankabfrage stehen. Mit der assignRef-Methode wird die Variable an das Template weitergeben.
parent::display($tpl);
ruft das Template auf.
15.1.5 Das Template (/component/com_hallo/views/hallo/tmpl/
default.php)
Und hier ist nun das Standard-Template. Es heißt immer default.php und sieht in seiner einfachsten Form aus wie in Listing 15.4.
defined('_JEXEC')or die('Restricted access'); ?>
<h1>
<?php echo $this->greeting; ?>
</h1>Listing 15.4: /component/com_hallo/views/hallo/tmpl/default.php
15.1.6 Das Ergebnis
Auf der Website sieht alles zusammen sehr unspektakulär aus (Abbildung 15.3):
15.1.7 Die Installation
Alle Dateien müssen nun in ein zip-Paket gepackt werden und sind dann über den Joomla!-Installer installierbar. Die Frontend-Dateien in /component/com_hallo kommen in ein Verzeichnis site. Die Administrationsbereich-Dateien aus /com_hallo/ administrator/components kommen in ein Verzeichnis admin. Alle Dateien werden mit zusätzlichen Informationen in einer XML-Datei beschrieben, die so heißen muss wie die Komponente, also hallo.xml (Listing 15.5).
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE install SYSTEM "http://dev.joomla.org/xml/1.5/component-install.dtd">
<install type="component" version="1.5.0">
<name>Hallo</name>
<creationDate>November</creationDate>
<author>Niemand</author>
<authorEmail>niemand@example.org</authorEmail>
<authorUrl>http://www.example.org</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<version>Component Version String</version>
<description>Beschreibung der Komponente ...</description>
<!-- Site Main File Copy Section -->
<files folder="site">
<filename>index.html</filename>
<filename>hallo.php</filename>
<filename>controller.php</filename>
<filename>views/index.html</filename>
<filename>views/hallo/index.html</filename>
<filename>views/hallo/view.html.php</filename>
<filename>views/hallo/tmpl/index.html</filename>
<filename>views/hallo/tmpl/default.php</filename>
</files>
<administration>
<!-- Administration Menu Section -->
<menu>Hallo Welt!</menu>
<!-- Administration Main File Copy Section -->
<files folder="admin">
<!-- Site Main File Copy Section -->
<filename>index.html</filename>
<filename>admin.hallo.php</filename>
</files>
</administration>
</install>
Listing 15.5: hallo.xml
Um alles in ein zip-Paket zu packen, müssen Sie auf die Struktur achten. Hier eine entsprechende Struktur für die com_hallo-Komponente (Abbildung 15.4):

Abbildung 15.4: Installationspaket packen
Sie können dieses Paket jetzt ganz normal über den Joomla!-Installer hochladen und installieren lassen.
15.1.8 Fazit
Das, was Sie jetzt erstellt haben, ist tatsächlich gut pflegbar, erweiterbar und – wenn Sie mal ehrlich sind – eigentlich auch ganz übersichtlich. Auf den ersten Blick wirken die vielen Dateien etwas wirr, auf den zweiten Blick verlieren sie aber schnell ihren Schrecken. Das liegt daran, dass sich in jeder Datei relativ wenig Quellcode befindet und Sie somit eine bessere Übersicht haben. Genau dieser Effekt ist beim MVC-Muster erwünscht. Und wenn Sie einen besonders komplexen Template-Wunsch haben, dann überschreiben Sie in Ihrem selbstgebauten Template einfach den View (siehe Kapitel 13.3.8).
| Anhang | Größe |
|---|---|
| com_hallo.zip | 2.88 KB |
- 63247 Aufrufe

French




Neueste Kommentare
vor 16 Stunden 38 Minuten
vor 1 Tag 16 Stunden
vor 3 Tage 4 Stunden
vor 2 Wochen 5 Tage
vor 2 Wochen 6 Tage
vor 3 Wochen 2 Tage
vor 3 Wochen 2 Tage
vor 4 Wochen 5 Tage
vor 5 Wochen 1 Tag
vor 6 Wochen 4 Tage