Module
15 Eigene Komponenten, Module, Plugins
Submitted by Hagen Graf on 1. January 2008 - 17:58Sie wollen mit Joomla! ein Problem lösen, für das es noch keine fertige Komponente gibt? Sie sind beispielsweise Autohändler und benötigen eine über die Joomla!-Administration pflegbare Auflistung Ihrer Gebrauchtwagen auf Ihrer Website? Oder eine Liste Ihrer Niederlassungen? Erweitern Sie einfach den Funktionsumfang um neue Komponenten, Module und Plugins. Was auf den ersten Blick sehr kompliziert aussieht, ist auch mit PHP-Anfängerwissen durchaus machbar.
Nach den Erfahrungen im Template-Bau in Kapitel 13 können Sie sich bestimmt schon vorstellen, was auf Sie zukommt. Diesmal liegt der Schwerpunkt allerdings nicht auf der Gestaltung, sondern auf der Programmierung.
Exkurs
Seit 01.01.2008 wird PHP 4 offiziell nicht mehr weiterentwickelt. Daher sollten Sie alle neuen Erweiterungen nach den Empfehlungen für die Version PHP 5 umsetzen. Joomla selbst ist in der Version 1.5 zu beiden Standards kompatibel. Wenn Sie mehr erfahren möchten: http://gophp5.org/.
15.0.1 Model – View – Controller
Mit Joomla! 1.5 wurde ein Konzept (Muster) für die Erstellung von Erweiterungen eingeführt: das Model-View-Controller-Muster, abgekürzt mit MVC. In der modernen Software-Entwicklung wird dieser Ansatz benutzt, um eine gewisse Ordnung in die Dinge zu bekommen.
Fast immer, wenn es um Aufgaben einer Software geht, benötigt man drei Bereiche:
- Ein Datenmodell (engl. Model)
- Eine Präsentation (engl. View)
- Eine Programmsteuerung (engl. Controller)
Also liegt es nahe, diese drei Bereiche zu standardisieren. Da Programmierer auf solche Vorgaben eher allergisch reagieren, muss es echte Vorteile geben. Schauen wir uns die einzelnen Begriffe näher an.
Modell (Model)
Das Modell enthält die darzustellenden Daten. Die Herkunft der Daten ist unerheblich. Das Modell weiß nichts über die Ausgabe der Daten und hat auch keine Ahnung davon, wie diese Daten verändert werden.
Präsentation (View)
Die Präsentation stellt die Daten des Modells dar. Es muss eine Verbindung zwischen Modell und Präsentation geben, damit etwas dargestellt werden kann.
Steuerung (Controller)
Ja, was wird die Steuerung machen? Sie steuert das Ganze, reagiert auf Benutzereingaben oder andere Ereignisse, verwaltet die Modelle und die Präsentationen und gibt ihre Informationen an Präsentationen weiter.
15.0.2 Wo ist der Vorteil von MVC?
Wie bereits oben angedeutet, kommt gerade im Falle von Joomla! eine gewisse Ordnung in die Dinge. War es mit Joomla! 1.0 üblich, so zu programmieren, wie man Lust hatte, ist das mit Joomla! 1.5 nicht mehr erwünscht. Das hat nichts mit Bevormundung zu tun, sondern mit den Anforderungen der Benutzer, also mit Ihnen!
Sie wollen:
- Barrierefreie Websites (overrides)
- Suchmaschinenfreundliche URLs
- Verteilte Authentifizierung
- Internationalisierung
- Sicherheit und Wartbarkeit
- Wiederverwendbarkeit
- mehr, mehr, mehr ...
Genau dieses mehr, mehr, mehr ist der Grund dafür, Ordnung im System zu schaffen. Solange Sie eine Firma mit einem Mitarbeiter haben, können Sie die Verwaltung noch im Kopf, mit einem Zettel und einem Stift erledigen. Haben Sie 10 Mitarbeiter, wird das schon schwierig. Wenn Ihre Firma jetzt vielleicht auch noch »brummt« und anfängt zu wachsen, brauchen Sie irgendein System zur Verwaltung!
MVC ist so ein System, in unserem Falle aber für Software. Es soll ein Programmdesign ermöglichen, das spätere Änderungen erleichtert und eine Wiederverwendbarkeit von Code ermöglicht. Es ist nicht unumstritten, aber auch nicht schlecht. Wenn sich alle dran halten, ist es gut!
Quell religiöser Diskussion sind natürlich Fragen wie:
- Wohin soll meine Geschäftslogik? In den Controller oder in das Model?
- Wie ist das mit wiederverwendbaren Dialogen? In den View?
- Wie regeln wir mehrere Views (Tabelle, Einzelansicht, Frontend, Backend)?
Da eine vergleichbare Struktur in Joomla! 1.0 nicht existierte, ist dieses »Mantra« und vor allem seine Durchsetzung in meinen Augen die größte Leistung, die Joomla! 1.5 bzw. das Projektteam dahinter vollbracht haben. Die Zukunft wird zeigen, ob die Benutzer und Entwickler das auch so sehen. :-)
Wo ist er also, der Vorteil für alle?
Ganz einfach, Sie kennen das von sich selbst. Wenn die Küche, der Keller, das Auto, der Dachboden erst einmal aufgeräumt sind, ist es relativ einfach, diesen Zustand beizubehalten. Im Falle von Software ist das die Grundvoraussetzung, überhaupt wachsen zu können und pflegbar zu sein. Und Joomla! steht immer noch am Anfang seiner Möglichkeiten. Das heißt, wenn sich heute jemand (das Joomla!-Projektteam) die Arbeit gemacht hat und Joomla! 1.0 aufgeräumt hat, wird es für Sie in Zukunft deutlich einfacher, Joomla! an Ihre Wünsche anzupassen.
1Download siehe Anhang (hier in der Online Version direkt an der Kapitelseite).
- 21521 Aufrufe
French
15.5 Schlussbemerkung
Submitted by Hagen Graf on 1. January 2008 - 16:56Dieses Kapitel sollte Ihnen eine Übersicht über die Erstellung von Komponenten, Modulen und Plugins geben.
Weitergehende Entwicklungen lassen sich gut aus vergleichbaren Komponenten ableiten. Beispielsweise hat unsere Komponente auto nur eine Tabellenansicht. Suchen Sie sich eine Komponente mit Einzelansicht wie beispielsweise com_contact und erweitern Sie auto um diese Funktionalität.
Ebenso verhält es sich mit den Parameterangaben bei Modulen. Suchen Sie sich eine Vorlage und erstellen Sie Ihr eigenes Modul.
Was auf den ersten Blick kompliziert aussieht, entpuppt sich bei näherem Hinsehen als durchaus durchschaubar.
Ich wünsche Ihnen viel Spaß beim Ausprobieren!
- 7144 Aufrufe
French
15.3 Module
Submitted by Hagen Graf on 1. January 2008 - 16:53Ein Modul ist von der Idee her sehr viel einfacher. Module haben meist keine echte Administrationsoberfläche, sondern hin und wieder Parameter. Es geht immer um die Darstellung auf Ihrer Website und die Einbindung in Ihr Template. Module setzen meist auf vorhandenen Komponenten auf. Sie können also davon ausgehen, dass bestimmte Tabellen und ihre Inhalte bereits vorhanden sind und gepflegt werden können.
Um selbst ein Modul zu programmieren, benötigen Sie zwei Dateien. Eine Datei für die Logik und die Darstellung und eine XML-Datei für den Joomla!-Installer. Beide Dateien beginnen mit der Kennzeichnung mod_.
15.3.1 Quellcode
Schauen wir uns gleich die Quellcodes der Dateien an. Auch hier werden wieder Templates benutzt. Sie haben die Dateien
- mod_auto.php
- helper.php
- tmpl/default.php
- mod_auto.xml
Schauen wir uns auch diese Dateien an.
Einstiegspunkt (mod_auto.php)
Die Datei mod_auto.php dient als Steuerdatei für das Modul (Listing 15.22).
<?php
defined('_JEXEC')
or die('Restricted access');
require_once (dirname(__FILE__).DS.'helper.php');
$auto = modAutoHelper::getAuto($params);
require(JModuleHelper::getLayoutPath('mod_auto'));
?>
Listing 15.22: mod_auto.php
Hier wird kein Basis-Controller, sondern eine Helper-Klasse eingebunden.
Helper-Klasse (helper.php)
Die Helper-Klasse kombiniert den Controller und das Model (Listing 15.23).
<?php
defined('_JEXEC')
or die( 'Restricted access' );
class modAutoHelper{
function getAuto(&$params){
global $mainframe;
$db = &JFactory::getDBO();
$query = "SELECT *"
. "\n FROM #__auto"
. "\n WHERE published = 1"
. "\n LIMIT 0,5"
;
$db->setQuery( $query );
$rows = $db->loadObjectList();;
$auto = "<ul>\n";
if ($rows) {
foreach ($rows as $row){
$auto .= "<li>".$row->text."</li>\n";
}
}
$auto .= "</ul>\n";
return $auto;
}
}
?>
Listing 15.23: helper.php
In der Helper-Klasse findet nacheinander die Abfrage der Daten auf die Aufbereitung in einer for-Schleife statt.
Template (tmpl/default.php)
In diesem ganz einfachen Konstrukt wird die Variable $auto aus der Helper-Klasse einfach nur ausgegeben. Sie könnten genauso gut die for-Schleife aus der Helper-Klasse hier durchführen und damit mehr Einfluss auf den auszugebenden HTML-Code nehmen und einem Template-Designer ermöglichen, den Quellcode zu überschreiben (Listing 15.24).
defined('_JEXEC')
or die( 'Restricted access' ); ?>
<?php
echo $auto;
?> Listing 15.24: tmpl/default.php
mod_auto.xml
Um das Modul installieren zu können, benötigen Sie wie bei der Komponente alle für den Joomla!-Installer relevanten Daten in einer XML-Datei (Listing 15.25).
<?xml version="1.0" encoding="utf-8"?>
<install type="module" version="1.5.0">
<name>Auto</name>
<author>Hagen Graf</author>
<creationDate>November 2007</creationDate>
<copyright>(C) 2007 cocoate.com All rights reserved.</copyright>
<license>GNU/GPL</license>
<authorEmail>hagen.graf@gmail.com</authorEmail>
<authorUrl>www.cocoate.com</authorUrl>
<version>0.1</version>
<description>Auto Modul</description>
<files>
<filename module="mod_auto">mod_auto.php</filename>
<filename>index.html</filename>
<filename>helper.php</filename>
<filename>tmpl/default.php</filename>
<filename>tmpl/index.html</filename>
</files>
</install>
Listing 15.25: mod_auto.xml
15.3.2 Installation
Kopieren Sie alle Dateien in ein Unterverzeichnis und verpacken Sie dieses Verzeichnis in einem zip-Paket mit dem Namen mod_auto.zip. Die zip-Datei können Sie jetzt mit dem Joomla!-Installer wie gewohnt installieren und, wenn Sie wollen, zum Download für andere Benutzer bereitstellen. Bevor Sie das in Ihrer eigenen Installation tun, müssen Sie die per Hand erstellte Variante über den Joomla!-Installer deinstallieren. Klicken Sie dazu auf Erweiterungen - Installieren/Deinstallieren, markieren Sie Ihre Komponente und klicken Sie auf das Icon Deinstallieren.
Nach der Installation müssen Sie das Modul im Menü Erweiterungen - Module aktivieren.
15.3.3 Ansicht auf der Website
Auf Ihrer Website sehen Sie jetzt an der ausgewählten Position die Einträge aus der Tabelle jos_auto (Abbildung 15.17).
- 20104 Aufrufe
French
14.07 Beez und Module
Submitted by Angie Radtke on 31. December 2007 - 16:37Joomla! bringt von Haus aus verschiedene Module mit unterschiedlichen Funktionalitäten mit. Vom frei definierten HTML-Code bis zur Ausgabe einer Liste der meist gelesenen Artikel ist einiges möglich. Man kann Module im Joomla!-Backend unterschiedlichsten Modulpositionen zuweisen, die dann im Template an die Stelle positioniert werden, an der sie erscheinen sollen. Die Namen der Modulpositionen werden in der Template-internen XML-Datei festgelegt. Hier eröffnen sich zahlreiche Möglichkeiten zur Anpassung des Seitenaufbaus an die Bedürfnisse des jeweiligen Projekts.
Der folgende Code bindet das Modul mit der Position left ein.
<jdoc:include type="module" name="left" />
Beez selbst besitzt eine eigene Art, Module einzubinden, was ermöglicht, die header-level, das heißt die semantische Überschriftenauszeichnung der Module selbst, zu bestimmen.
Jedes Modul kann auf Wunsch mit einer Überschrift aus der Hierarchieebene ausgezeichnet werden. Im global semantischen Zusammenhang einer Seite ist die Wahl der Überschriftenart durchaus von Bedeutung. Sie muss sich in die Gesamtstruktur der Seite logisch integrieren, da unterschiedlichste Inhalte unter Umständen andere inhaltliche Gewichtungen haben können.
<jdoc:include
type="modules"
name="left"
style="beezDivision"
headerLevel="3" />
Tipp
In Hinblick auf die Gestaltung barrierefreier Seiten verdient das Modul most read besondere Beachtung: Es zeigt die Artikel an, die am öftesten aufgerufen wurden, und unterstützt somit Ihren Leser bei der Informationsaufnahme.
- 6640 Aufrufe
French
10.4 Modul kopieren
Submitted by Hagen Graf on 26. December 2007 - 15:04Stellen Sie sich vor, Sie möchten zwei verschiedene Zufallsbilder anzeigen. Ein Modul soll Bilder aus Verzeichnis A und ein Modul Bilder aus Verzeichnis B anzeigen. In einem solchen Fall wählen Sie einfach das Modul Random Images durch Ankreuzen der Checkbox vor dem Namen aus und klicken auf das Icon Kopieren.
In der Liste erscheint ein neues Modul mit dem Namen Kopie von Random Images. Ändern Sie die Daten wie gewünscht, und Sie haben ein neues Modul.

Abbildung 10.20: Modul kopieren
Wenn Sie die Module Latest News und Popular deaktivieren und die beiden Bildermodule auf die Positionen user1 und user2 legen, werden die neuen Module im Inhaltsbereich des Templates über den Nachrichten bzw. der Frontpage angezeigt.
- 13055 Aufrufe
French

Neueste Kommentare
vor 2 Wochen 6 Tage
vor 2 Wochen 6 Tage
vor 2 Wochen 6 Tage
vor 2 Wochen 6 Tage
vor 2 Wochen 6 Tage
vor 3 Wochen 10 Stunden
vor 3 Wochen 10 Stunden
vor 3 Wochen 10 Stunden
vor 6 Wochen 2 Tage
vor 7 Wochen 4 Tage