Vorwort

Wenn Sie dieses Buch in die Hand nehmen, werden Sie wissen was Sie tun. Wir sparen uns deshalb das übliche »Worum geht es in diesem Buch«. Allerdings müssen wir dennoch schreiben, dass dieses Buch nicht für Menschen gedacht ist, die Programmierung lernen wollen. Wir setzen voraus, dass Sie zumindest weitreichende Grundlagen der PHP-Programmierung besitzen. Auch setzen wir voraus, dass Sie Joomla soweit beherrschen, dass Sie es fehlerfrei installieren können und sich einigermaßen im Backend zurechtfinden. Kenntnisse über SQL und Datenbanken sind wünschenswert. Wir helfen Ihnen bei der Objektorientierten Programmierung – es kann jedoch nicht schaden, wenn Sie bereits ein paar Grundlagen mitbringen.

Als wir anfingen, dieses Buch zu schreiben, lag Joomla noch in der Version 1.6 vor. Eine Dokumentation gab es seinerzeit nicht, also suchten und entdeckten wir, probierten aus und versuchten das neue Framework zu verstehen. Dann kam Joomla! 1.7 heraus, das Framework hieß nun Platform und Teile unseres Codes funktionierten plötzlich nicht mehr. Also mussten wir nicht nur umprogrammieren, sondern vor allem auch verstehen, warum das so ist. Eine Dokumentation gab es erst zum Ende der Versionsreihe. Dann kam Joomla 2.5 und abermals funktionierten Teile unseres Codes nicht. Oder aber, es stellte sich nun heraus, dass mitten in unserer Entwicklung einige Funktionen deprecated wurden, also als veraltet galten und nicht mehr in zukünftigen Entwicklungen Berücksichtigung finden werden. Also auch da mussten wir einiges umprogrammieren, denn wir wollten Ihnen natürlich nichts empfehlen, was nicht weiterentwickelt wird. Dazu kam und kommt eine Dokumentation, die an vielen Stellen unzureichend ist. Oft standen wir fasziniert vor Wörtern wie »unknown use«, die sich an einigen Stellen in der offziellen Joomla-Dokumentation finden, oder konnten Funktionen einfach garnicht auffinden. Zum Beispiel gibt es bislang noch immer keine komplette Liste der Ereignisse, die in Plugins benutzt werden können. In diesem Buch finden Sie allerdings eine solche Liste. Zumindest glauben wir, dass sie einigermaßen vollständig ist.

Durch diese ganzen Schwierigkeiten und die Tatsache, dass so ein Buch ja auch nicht mal eben so nebenbei geschrieben wird, zog sich die Veröffentlichung viele Monate hin.

Nicht zuletzt deshalb einen großen Dank an den Franzis Verlag, der stets geduldig blieb und ganz besonderen Dank an unseren Lektor Anton Schmid, dem wir das Leben phasenweise wahrlich nicht leicht gemacht haben, der jedoch stets hinter uns stand!

Als wir mit dem Buch anfingen, hatten wir eine ganze Schar Testleser. Je länger das Projekt dauerte, je kleiner wurde diese Schar. Dennoch euch allen Dank fürs kritische Lesen und so manchen Tipp oder auch einfach für eure Motivation!

Einen jedoch müssen wir ganz besonders erwähnen: Christian Linsner. Was dieser Mann alles gelesen hat ist an sich schon unglaublich. Das alles stets kritisch, mit Adleraugen, Unzulänglichkeiten, Fehler und andere Ungereimtheiten findend und dennoch stets konstruktiv kritisierend – einen ganz besonderen lieben Dank an Dich, Christian!

Aufbau des Buches

Der erste Teil hat das Ziel, dass Sie schnell und unkompliziert erste Erfolge und schnelle Lernerfolge haben. Sie erhalten hier jedoch auch die Grundlagen, auf die das Buch im weiteren Verlauf aufbauen wird.

Der zweite Teil vertieft dann eben dieses. Die Komponentenentwicklung wird stetig komplexer, Module und Plugins zeigen, was möglich ist, und die Joomla-API wird natürlich auch genauer betrachtet. Ein bunter Mix aus Theorie und Praxis.

Sie können das Buch von vorn bis hinten durcharbeiten und unserem Aufbau folgen. Sie können sich aber ebenso gut querbeet durch das Buch arbeiten und lesen, was Ihnen gefällt. Wir haben meistens bei den Kapiteln vorangestellt, was Sie im jeweiligen Kapitel finden und auch jeweils auf die Downloads verwiesen, die das Buch begleiten.

Sie können mit diesem Buch lernen, wie Sie eigene Erweiterungen in Joomla erstellen können. Wir haben viele Fragen aufgegriffen, können aber natürlich nicht alles beantworten. Wir waren jedoch bemüht, Ihnen das nötige Rüstzeug zu geben, um letztlich eigene Erweiterungen zu entwickeln. Das beinhaltet auch manchmal »Hilfe zur Selbsthilfe«.

1  Bevor es losgeht

1.1  Die GNU General Public License (GPL)

Warum stellen wir dies an den Anfang unseres Buches?

Weil es weder Joomla in der jetzigen Form noch dieses Buch noch Ihre zukünftigen Erweiterungen geben würde, wenn es diese Lizenz nicht gäbe.

Weil Sie selbst verpflichtet sind, die Regeln dieser Lizenz einzuhalten.

Weil diese Lizenz einen Schutz für Sie gegen Gewährleistungsansprüche darstellt.

Die meisten Benutzer laden sich Software herunter und bestätigen »Ich bin mit den Lizenzbedingungen einverstanden« ohne darüber nachzudenken, dass sie damit einen Vertrag eingehen, den sie gar nicht kennen. Haben Sie die Lizenzbedingungen jemals vollständig gelesen? Dann sind Sie eine Ausnahme. Dabei ist die Geschichte dieser Lizenz hochinteressant. Sie hat die Welt verändert!

Was ist eigentlich GNU GPL?

de.wikipedia.org/wiki/GNU-Projekt :
Das GNU-Projekt wurde von Richard Stallman mit dem Ziel gegründet, ein vollständig freies Betriebssystem, genannt GNU (»GNU’s Not Unix«), zu entwickeln. Bekannt geworden ist das Projekt vor allem auch durch die von ihm eingeführte GNU General Public License (GPL), unter der viele bekannte Softwareprojekte veröffentlicht werden.
Die vom GNU-Projekt veröffentlichte Software wurde unter eigene Lizenzen gestellt, welche die entsprechenden Freiheiten gewährten. Für das Prinzip einer Lizenz, welche die Pflicht zur Offenheit explizit einbaut, nutzte Stallman den Begriff Copyleft […]. Später entschloss sich Stallman, eine einheitliche Lizenz zu schaffen, unter der alle Software veröffentlicht werden konnte. Er entwarf daher mit Hilfe von Jerry Cohen die GNU General Public License […].

Unter http://www.gnu.org/philosophy/free-sw.htmlist eine Präzisierung dieses Begriffs zu finden. Unter http://www.gnu.de finden Sie die inoffizielle deutsche Übersetzung der verschiedenen Versionen/Varianten der GPL und weitere Informationen. Auch die folgende Übersetzung stammt von dieser Seite.

http://www.gnu.de/free-software/index.de.html
Die freie Software, von der hier die Rede sein soll, ist kein »Freibier«, sondern sie gibt Ihnen die Freiheit,

0. die Software für einen beliebigen Zweck auszuführen,

1. die Funktionsweise der Software zu studieren und sie an Ihre eigenen Bedürfnisse anzupassen,

2. Kopien der Software weiterzugeben,

3. sowie die Software zu verbessern und

4. diese Verbesserungen zu veröffentlichen.

Joomla steht unter GNU GPL. Sie haben also die Freiheit, Joomla bzw. die Joomla-Platform und alle ihre Erweiterungen in diesem Sinne zu verwenden. Und Sie sind verpflichtet, die Software, die Sie damit entwickeln, ebenfalls unter der GPL als freie Software weiterzugeben.

Deshalb muss in allen Programmen, die Sie als Erweiterungen von Joomla erstellen, auch der Hinweis auf die GPL stehen. So wie Sie die Freiheit erhalten haben, den Code von Joomla und jeder Erweiterung zu studieren und zu modifizieren, müssen Sie diese Freiheit auch denen gewähren, die Ihre Programme »für einen beliebigen Zweck« nutzen, egal ob kostenlos oder kostenpflichtig.

Die GPL sagt nicht, dass Sie mit Ihrer Arbeit kein Geld verdienen dürfen! Sie können sich den Aufwand und das Wissen bezahlen lassen, etwas zu programmieren. Aber Sie erstellen auf jeden Fall wieder freie Software und gewähren den Benutzern alle Freiheiten gemäß der GPL. Die Lizenz sagt »alles oder nichts«, einschränkende Klauseln gibt es nicht.

Darüber hinaus beinhaltet die GPL, deren Text jeder unter GPL veröffentlichten Software beizulegen ist, auch eine Warnung: Wer Software einsetzt, die unter GPL steht, hat keinen Gewährleistungsanspruch gegenüber dem Autor. Das Risiko liegt also auf den ersten Blick allein beim Anwender, der die Software benutzen und einsetzen darf, wie sie ist (»as is«). Damit sind Sie zunächst einmal gegen Ansprüche Dritter geschützt, falls Ihre Software fehlerhaft ist.

Gleichfalls gibt diese Freiheit aber Ihren Nutzern auch das Recht etwaige Fehler selbst zu beheben oder Dritte mit der Fehlerbehebung zu beauftragen und nicht darauf warten zu müssen, bis Sie Zeit und Muße finden dies zu tun. Bei proprietären Systemen und Programmen wie sie etwa von Microsoft oder Apple angeboten werden, ist dies nicht der Fall, denn die Quelltexte dieser Programme liegen den Anwendern nicht vor ...

Open Source versus GPL

Was noch wichtig ist: Open Source und die GNU GPL haben nichts miteinander zu tun. Open Source heißt: Der Benutzer darf den Quellcode einsehen, sonst nichts. Kopieren, Modifizieren und Veröffentlichen ist auch bei Offenen Quellen nur erlaubt, wenn der Lizenzgeber der betreffenden Software es gestattet. Selbst wenn der Lizenzgeber das gestattet, kann er immer noch den Einsatz der Software einschränken. Unter GPL gibt es das nicht. Wir erinnern uns, dass noch vor dem »ersten« Punkt stand:

0. die Software für einen beliebigen Zweck auszuführen

Um zu illustrieren, wie weit die Freiheiten gehen, welche die GPL gewährt, sei hier exemplarisch das Projekt WikiLeaks genannt, das 2010 für allerlei Aufregung gesorgt hat. Mediawiki[1], die Basis für die Software von WikiLeaks, steht unter GPL. Die Freiheit, die Software für einen beliebigen Zweck auszuführen gab den Betreibern das Recht, WikiLeaks mit dieser Software zu realisieren und ins Netz zu stellen, ohne dass die Wikimedia-Stiftung[2] als Urheber und Lizenzgeber von Mediawiki dies hätte verbieten oder ahnden können.

Was bedeutet das für uns?

Inzwischen gibt es mehrere GPL-Versionen. Dies ist vor allem den unterschiedlichen Rechtssprechungen der verschiedenen Nationen geschuldet und neuere Fassungen der GPL sind i. d. R. »kompatibler«, aber darauf wollen wir hier wirklich nicht eingehen.

Für unsere Absicht, Erweiterungen für Joomla zu schreiben, brauchen wir nur eines berücksichtigen: Wir erzeugen freie Software und stellen sie (mindestens) unter die General Public License Version 2 (GPLv2 or later).

Häufig liest man die Frage: »Darf ich für meine Erweiterung Geld verlangen?« oder umgekehrt »Darf der für seine Erweiterung Geld verlangen?«. Die Antwort ist »ja«. Wenn das Produkt dem Benutzer/Kunden etwas wert ist, wird er den Preis bezahlen. Wenn ein Benutzer/Kunde die gewünschten Änderungen an einem Programm nicht selbst durchführen kann, kann er den Quelltext jemanden geben, der dies gegen entsprechendes Salär für ihn ausführt.

Arbeitszeit, Know-how, Dienstleistung – das gibt es nicht (immer) kostenlos und der Nutzer einer Software unter GPL hat keinerlei Anspruch darauf, etwas kostenlos zu erhalten.

Es gibt aber einen guten Grund, weshalb Joomla und viele Extensions kostenfrei zu haben sind: Marketing! Unter dem Motto:

»Es kann durchaus sinnvoll sein, Lampen
zu verschenken, um Öl zu verkaufen.«
John D. Rockefeller

1.2  Arbeitsumgebung

Lokale Joomla-Installation

Wir setzen voraus, dass Sie Joomla in der Version 2.5.x mit der deutschen Sprachversion lokal installiert haben. Dann können Sie davon ausgehen, dass die richtige PHP-Version im Einsatz ist und auch sonst alle Systemvoraussetzungen erfüllt sind, sodass der Programmierung nichts im Wege steht.

Der geeignete Arbeitsplatz

Auf einem kleinen Notebook zu programmieren ist mitunter eine Strafe. Ein großer Monitor, auf dem mehrere Fenster gleichzeitig sichtbar sind, schont Augen und Nerven – jedenfalls für Entwickler ab einem gewissen Alter …

Auf den nächsten Seiten stellen wir eine kleine Komponente auf die Beine. Es ist überraschend, wie schnell und einfach das unter Joomla geht. Sie können den Code von http://www.buch.cd herunterladen. Wir empfehlen aber, am Anfang alles selbst zu schreiben, es ist nicht viel. Man bekommt beim Selberschreiben doch ein besseres Gespür für die Zusammenhänge.

Der Quellext-Editor

Professionelle Entwicklung verlangt professionelles Werkzeug. Aber man kann auch klein anfangen. Für die ersten Schritte bei der Programmierung mit Joomla reicht ein einfacher Quelltext-Editor. Windows-Anwendern empfehlen wir Notepad++, der kostenlos von der Website des Anbieters[3] heruntergeladen werden kann. Er bietet alles, was man für den Anfang braucht. Mac-User[4] streiten sich gerne über Textmate, BBEdit oder Textwrangler. Linux-Anwendern eine Empfehlung zu geben ist sicher nicht nötig, da das System schon mit guten Code-Editoren ausgestattet ist.

Der Editor sollte PHP-Code farbig hervorheben können und er muss Dateien im (Unicode Transformation Format) UTF-8 ohne BOM (Byte Order Mark) speichern können. UTF-8 ist eine Zeichencodierung, die es erlaubt, Sonderzeichen und Umlaute abzubilden, die im ASCII- oder ANSI-Zeichensatz nicht enthalten sind. Sie erspart uns Ärger mit Schmierzeichen (nicht darstellbare Zeichen, die oft als kleine schwarze Rauten oder Quadrate mitten im Text auftauchen, wo eigentlich Umlaute stehen sollen) und nicht funktionierenden Abfragen auf Datenbanken.

Mit Notepad++ können Sie diese Kodierung überprüfen bzw. auch bei Bedarf bestehende Textdateien nach UTF-8 konvertieren. Wir kommen im Kapitel 7 über Programmierkonventionen darauf zurück.

Bild 1.1   Notepad++ Konvertierungsmöglichkeiten

In XML-Dateien ist UTF-8 überlebenswichtig. Alte Hasen schreiben einfach ein paar Umlaute als <!-- äöüß -->-Kommentar an den Dateianfang. Sollte die Codierung mal nicht stimmen, dann sehen sie es daran sofort.

Integrierte Entwicklungsumgebung

Bei größeren Entwicklungsvorhaben ist der Einsatz einer leistungsfähigen Entwicklungsumgebung (Integrated Development Environment, IDE) angesagt, denn es ist sehr mühsam, sich ohne eine Navigation in einem Framework zurechtzufinden.

Es gibt verschiedene solcher Tools, einige kostenfrei, andere gegen Gebühr. Sie sind sich in den Funktionen ähnlich. Wir stellen im Anhang zwei dieser Tools vor, NetBeans (kostenfrei) und PHPEdit (kommerziell). Unter http://webification.com/23-best-php-ides-compared gibt es eine Übersicht, die auch auf die Stärken der einzelnen Produkte eingeht, allerdings nur auf Englisch.

Es ist nicht nötig, dauernd mit einer IDE zu arbeiten, für schnelle Korrekturen bleiben wir bei unserem schlanken Code-Editor. Aber im Framework und beim Debuggen kommt man doch nicht um die IDE herum.

Debugger

Zum Testen und Debuggen einer Komponente ist ein Debugger unentbehrlich. Je nachdem, welche Entwicklungsumgebung eingesetzt wird, ist der Debugger schon in die IDE integriert oder muss erst installiert werden, das zeigen wir kurz im Anhang C.

1.3  Git und Github

Git ist ein modernes verteiltes Versionsverwaltungssystem. Wer es einmal verwendet hat, möchte es nicht mehr missen. Die Funktionen beschreiben wir nicht, das würde den Rahmen des Buches sprengen. Schlaue Menschen haben alles zu Git bereits in Buchform und natürlich im Web niedergeschrieben (http://git-scm.com/), bedienen Sie sich!

Sie sind sicher daran interessiert, immer den neuesten Stand der Joomla-Platform und des Joomla-CMS als Basis für eigene Entwicklungen zu nutzen. Diesen neuesten Stand finden Sie auf github.com:

https://github.com/joomla/joomla-cms

https://github.com/joomla/joomla-platform

Github ist ein webbasierter Dienst für Software-Entwicklungsprojekte die ihre Versionskontrolle mit Git durchführen, wie auch Joomla. Jeder kann sich dort kostenfrei anmelden, ein eigenes Softwarearchiv (Repository) reservieren, eigene Projekte ablegen und auf Wunsch aktiv an der Entwicklung anderer Projekte teilnehmen.

Denn die Zeiten sind vorbei, in denen der Entwickler im stillen Kämmerlein und ganz für sich Programme entwickelte und sie dann in einer Nacht-und-Nebel-Aktion den staunenden Anwendern präsentierte.

Wir haben die PHP-Quelltexte für die Erweiterungen, die wir gemeinsam mit Ihnen in diesem Buch erstellen, ebenfalls auf Github untergebracht und laden Sie herzlich ein mitzumachen: https://github.com/MyThings.

[1]

Mediawiki Software http://www.mediawiki.org

[2]

Wikimedia-Stiftung http://wikimediafoundation.org

[3]

http://notepad-plus-plus.org/download

[4]

http://macromates.com/, http://www.barebones.com/products/bbedit/, http://www.barebones.com/products/textwrangler/

2  Joomla-Grundwortschatz

Das Joomla! Content Management System (CMS) ist eine recht umfangreiche Anwendung. Das Wissen über den Einsatz und die Bedienung des CMS setzen wir voraus. Wir schauen jetzt aus der Sicht des Entwicklers von Erweiterungen auf diese zahlreichen Verzeichnisse und Dateien.

Im Gesamtsystem Joomla! steckt nicht nur viel praktisches Wissen sondern jede Menge Softwaretheorie. Nun gibt es zwar nichts Praktischeres als eine gute Theorie und auch wenn wir nicht die Absicht haben, Sie mit allen Details dieser Theorien zu belästigen, so möchten wir zu Anfang ein paar wichtige Begriffe abklopfen und ihre Bedeutung klären.

2.1  Internetjargon

Bevor wir uns der Terminologie in und um Joomla widmen, klären wir zuerst ein paar allgemeine Begriffe[1] rund um »Internetseiten« von denen einige immer wieder gerne verwechselt und fälschlich synonym verwendet werden:

Domain: Die allgemeine Definition bezeichnet »einen (geografischen) Bereich der unter der Kontrolle einer einzelnen Person oder Organisation steht«. Im World Wide Web entspricht dies »einem Namensbereich, der dazu dient, Computer im Internet zu identifizieren; er ist unter anderem Bestandteil der URL einer Webseite«. Vorzugsweise haben Sie ebenfalls die Kontrolle über Ihr virtuelles Hoheitsgebiet im Internet, um darin bspw. auch Subdomains anzulegen und zu verwalten.

URL: Abkürzung für Uniform Resource Locator , ist die eindeutige Bezeichnung für eine Ressource in einem Computernetzwerk wie dem Internet. Diese lokalisierbaren Ressourcen sind dort unter anderem die einzelnen Webseiten einer Website.

Webseite: Ein einzelnes HTML-Dokument, das über eine URL adressiert und mitsamt den darin verknüpften Bildern und Mediendateien z. B. in einem Web-Browser angezeigt werden kann. In Joomla! kann mit Hilfe von Menüeinträgen das Erscheinungsbild einer oder mehrerer Webseiten sowie die Elemente, welche darin angezeigt werden sollen, entscheidend mitbeeinflusst werden. Hierzu dienen zahlreiche Parameterebenen mit denen direkt und indirekt das eigentliche HTML-Seitentemplate, das Layout einer Komponente und die Anzahl und Reihenfolge von Modulen festgelegt werden.

Site: englisch u. a. für Standort, Sitz, Niederlassung. Eine Website stellt den funktionalen Teil einer Domain im WWW dar und für die Besucher die Gesamtheit aller darüber verfügbaren öffentlichen Ressourcen bereit. Im allgemeinen Sprachgebrauch werden Internet und Web synonym verwendet, weshalb gerade im Deutschen aufgrund des gleichen Wortklangs von »Seite« und »Site« die Begriffe Internetseite und Website gleichbedeutend verwendet werden. In der Marketingsprache wird die Website zur Internetpräsenz oder zum Webauftritt [2].

Root: englisch für Wurzel, bezeichnet in einem Dateisystem allgemein die (hierarchische) oberste Ebene. Im Kontext einer Anwendung verwendet man die »denglischen« Begriffe Root-Ordner/-Verzeichnis ebenso wie Stamm- und Hauptverzeichnis synonym für das Verzeichnis in welchem der ausführbare Teil der Anwendung installiert ist. Bei Web-Anwendungen in PHP ist es der Ordner in dem die Datei index.php liegt.

2.2  CMS – Backend und Frontend

Das Joomla! CMS enthält bei der Auslieferung drei ablauffähige Web-Anwendungen:

Den Installer für die Installation des CMS über das Verzeichnis /installation.

Das Backend für die Administration des CMS im Verzeichnis /administrator.

Das Frontend , das den öffentlichen Teil der Website repräsentiert.

Der Installer wird üblicherweise mitsamt Ordner gelöscht, nachdem er seine Aufgabe erfüllt hat. Somit verbleiben Backend und Frontend, zwei (nahezu) eigenständige Web-Anwendungen, die mit verschiedenen URLs aufgerufen werden.

Alternativ werden auch gerne die Begriffe Admin und Administrator für das Backend und Site für das Frontend verwendet. Diese Bezeichnungen finden sich auch in unterschiedlicher Schreibweise im PHP-Quellcode wieder, wie Sie im späteren Verlauf des Buches noch sehen werden.

Backend und Frontend haben ihre eigenen Komponenten, Module, Templates und Sprachdateien. Das Frontend ist in seiner Gesamtheit nicht so ganz eigenständig und einige Erweiterungen bedienen sich immer wieder der Programmdateien aus dem Backend.

Zusätzlich zu den drei Web-Anwendungen die im Browser aufgerufen werden, befinden sich im Ordner /cli drei weitere Anwendungen für den Einsatz auf der Kommandozeile (CLI = command line interface) mit denen ein Administrator des CMS Wartungsaufgaben der Volltextsuche (com_finder) automatisieren kann.

Joomla! besteht somit aus sechs PHP-Anwendungen, die zusammen das Content Management System bilden und von denen Sie die beiden wichtigsten Anwendungen, Backend und Frontend, um neue Funktionen erweitern können.

2.3  Zwei Hüte, ein Kopf: Platform vs. Framework

Eine Plattform bezeichnet ein einheitliches Basissystem auf dem Software ausgeführt wird. Programme werden i. d. R. für eine bestimmte Plattform geschrieben. Das Betriebssystem auf Ihrem Rechner oder Smartphone ist solch eine Plattform. Verschiedene Programmiersprachen sorgen über mehr oder minder ausgeklügelte Konstrukte dafür, dass damit geschriebene Programme auch mehr oder minder erfolgreich plattformübergreifend genutzt werden können. Java ist hierbei im Desktop- und Serverbereich verhältnismäßig erfolgreich und so programmieren Menschen unterschiedliche Software für die »Java-Plattform«.

Ein Framework ist ein Gerüst oder Rahmen, mit dessen Hilfe das Programmieren von Software vereinfacht und/oder vereinheitlicht wird. Doch so wenig wie ein Gerüst das fertige Haus oder ein Rahmen das fertige Gemälde darstellt, so wenig ist ein (Software-)Framework ein lauffähiges Programm. Es enthält jedoch eine Menge Bausteine, die Sie als Entwickler verwenden können, um die immer wiederkehrenden Aufgaben in den eigenen Programmen einfacher und schneller umsetzen zu können. Wie jedes Baukastensystem bestimmt das eingesetzte Framework die grundlegende Form der erstellten Programme, will sagen: Ein Gebilde aus Lego-Bausteinen folgt den mechanischen Bedingungen dieser Steine und wird auch immer als Legobausteingebilde zu erkennen sein.

In Joomla! 1.5 wurde ein solches Framework eingeführt, um damit Erweiterungen für das CMS zu programmieren. Seit der Joomla!-CMS-Version 1.7 heißt dieses Framework Joomla! Platform . Der Markenname Joomla! soll zukünftig nicht mehr nur mit dem CMS und Webseiten alleine in Verbindung gebracht werden, sondern Joomla! soll alle nur erdenklichen Arten an PHP-Anwendungen ermöglichen und eventuell auch vereinen, deren gemeinsame Grundlage eben diese Joomla! Platform sein wird.

Die Platform (und hier auch absichtlich mit einen »t« geschrieben) ist dann auch als ein eigenständiges Produkt der Marke Joomla! ausgelegt, mit eigener Versionszählung und eigenem Lebenszyklus. Updates der Platform erscheinen in einem festen Turnus, etwa alle drei Monate, sodass sich die Versionsnummer mehrmals pro Jahr ändern wird: 11.4, 12.1, 12.2 etc. Diese Versionszählung weicht hier von der semantischen[3], dreistelligen Versionierung ab. Ebenso wie die seit ca. 2010 zu beobachtenden inflationären Versionssprünge bei Web-Browsern liefert die Höhe der Versionsnummer der Joomla Platform kaum mehr einen Hinweis auf die Möglichkeiten und Funktionen. Versionsnummern bekommen mehr und mehr den Charakter eines Verfallsdatums.

Joomla! CMS Version 2.5.x enthält und verwendet die Joomla! Platform Version 11.4 (Jahr 2011, Release 4). An dieser Konstellation wird sich auch nichts ändern. Joomla! 3.0.0 wird vermutlich eventuell eine frischere Version der Platform enthalten.

Wenn Sie und wir Ende 2012 mit dem Gedanken spielen, Erweiterungen für Joomla! 3.x zu programmieren, ist für uns als Entwickler die dann mitgelieferte Version der Platform mitunter wichtiger, als die Versionsnummer des CMS. Für den Anwender dagegen ist es genau umgekehrt. Welche Vor- oder Nachteile diese Trennung der Entwicklungsstränge auf die Kompatibilität und Interoperabilität von CMS-Erweiterungen und Platform-Applikationen haben wird, muss sich erst noch zeigen.

Die Joomla!-Platform ist aus dem Joomla!-CMS und dessen technischen Anforderungen heraus entstanden und hat aufgrund dieser gemeinsamen Historie noch eine recht enge funktionale Verbindung mit dem CMS. Dies wird sich mit der fortschreitenden, unabhängigen Weiterentwicklung der Platform zunehmend ändern und die Unabhängigkeit zum CMS und dessen was ein CMS an Funktionalität braucht, wird von Quartal zu Quartal größer.

Was Sie heute in der Kombination CMS 2.5/Platform 11.4 noch als Bestandteil der Platform identifizieren würden, kann im CMS 3.x/Platform 12.y gänzlich andere Strukturen haben, nicht mehr existieren, anders heißen, oder, oder. Im Kapitel 11 werden Sie einen ersten Eindruck dieses leicht chaotischen Übergangs kennenlernen, der auch uns beim Schreiben dieses Buches immer wieder überrascht hat.

Insgesamt erlaubt dieses Konzept aber der Joomla!-Platform (also dem PHP-Framework) die schon längst überfälligen neue Wege zu gehen, ohne auf das CMS zu warten oder sich im Funktionsumfang nur auf die Anforderungen von Web-Anwendungen zu beschränken. Das CMS-Team kann die technischen Neuerungen der Platform ganz oder teilweise in zukünftige Versionen einbauen. Sie als Entwickler müssen nun jedoch genauer darauf achten, ob sie Erweiterungen für eine bestimmte Version des Joomla! CMS programmieren oder PHP-Anwendungen mit einer bestimmte Version der Joomla! Platform.

Der Zweck eines Framework ist abgesteckt, egal wie sein Produktname lautet. Daher werden wir in den Programmier-Kapiteln dessen technische Aspekte beschreiben und weniger auf den Produktnamen »Platform« eingehen. Für die Zwecke, die wir hier verfolgen, sind die feinen Unterschiede auch nicht von Bedeutung. Im Zweifelsfall ist es dann auch einfach Joomla.

2.4  Finger weg vom Core

Der Core ist das Kernstück eines Systems. In den verschiedenen Joomla-Foren ist oft von einem Core Hack die Rede, und verwendet wird diese Bezeichnung üblicherweise für das gesamte CMS-Paket, das Sie über http://joomla.org herunterladen können. Dieses Paket enthält Sprachdateien, Templates, Komponenten, Module, Plugins sowie weitere PHP-Bibliotheken von Drittanbietern, weshalb man gerade letztere nicht direkt zum Core zählen dürfte. Jede Änderung an diesen Originaldateien wird allgemein als Core Hack bezeichnet und das Vorgehen als solches (meist) zurecht verdammt.

Das CMS ist offen für Erweiterungen und stellt hierzu eine große Auswahl an Schnittstellen und zahlreiche Einstiegspunkte bereit. Jeder manuelle Eingriff in den Core sollte daher von vornherein unnötig sein und birgt im Gegenteil die schleichende Gefahr nicht nur für potenzielle Fehler. Bei jedem offiziellen Update dieses Kernstücks der Website, kann eine gehackte Core-Datei wieder überschrieben werden. Die gehackten Aufrufe von dann geänderten oder veralteten und ungenutzten Schnittstellen können schnell zu einem Sicherheitsrisiko für die gesamte Website werden. Aber wem erzählen wir das hier eigentlich? Da Sie dieses Buch bereits lesen, rennen wir mit der folgenden Empfehlung ohnehin schon offene Türen bei Ihnen ein: Schreiben Sie lieber eine Erweiterung, anstelle eines Core Hacks.

2.5  Erweiterungen in Joomla

Sie wissen als Betreiber einer Joomla-Website natürlich, dass es folgende Arten an Erweiterungen gibt:

Komponenten

Module

Plugins

Sprachpakete

Templates

Bibliotheken / Dateipakete

Wir beschäftigen uns in diesem Buch mit der Programmierung von Komponenten, Modulen und Plugins. Joomla bringt diese Erweiterungen in verschiedenen Verzeichnissen unter: ./components, ./modules und ./plugins.

Mit Templates und Bibliotheken befassen wir uns hingegen nicht, was nicht bedeutet, dass man in und um Templates herum nicht ebenso praktische und spannende Dinge programmieren kann und das Framework deshalb auch dort bestmöglich einsetzen sollte.

Allen Erweiterungen, die einer Joomla-Website nachträglich hinzugefügt werden, ist eins gemeinsam: der Installationsvorgang, durch den nicht nur die notwendigen Dateien kopiert, sondern zusätzliche Verwaltungsinformationen in der Datenbank abgelegt werden. Erst wenn eine Erweiterung in der Datenbank eingetragen ist, kann sie im Gesamtsystem effektiv genutzt werden.

Bibliotheken und Dateipakete sind eher selten anzutreffen oder werden von komplexeren Erweiterungen und Paketen eher klammheimlich mitinstalliert. Sie tauchen (wenn überhaupt) lediglich im Backend in der Gesamtübersicht installierter Erweiterungen auf. Die Joomla-Platform im Ordner ./libraries/joomla ist übrigens aus Sicht der Installationsverwaltung seit Joomla! 1.7 auch nur eine Bibliothek.

Früher oder später werden Sie oder Ihr Kunde feststellen, dass die vorhandenen Möglichkeiten des CMS trotzt kreativer Zweckentfremdung nicht ausreichen und unter den Abertausenden existierender Erweiterungen[4] nichts Adäquates zu finden ist, das den neuen Anforderungen genügt. Die erste Frage ist daher: Welche Art von Erweiterung kommt überhaupt in Frage?

Komponenten

Komponenten repräsentieren den Hauptinhalt einer einzelnen Webseite und sind gefragt, sobald besondere Datenstrukturen aufzubauen und zu verwalten sind. Aus Entwicklersicht sind Komponenten die größte Herausforderung. Es sind Anwendungen innerhalb einer Anwendung die zwar einige Grundregeln befolgen müssen, denen ansonsten aber nur sehr wenige Schranken auferlegt sind in dem, was sie machen können und dürfen.

Komponenten bestehen in fast allen Fällen aus einer Komponente für das Backend und einer für das Frontend mit demselben Namen. Die Verwaltungsaufgaben übernimmt hierbei die Komponente im Backend, während mit dem Gegenstück im Frontend die erstellten Daten auf unterschiedliche Weise angezeigt werden.

Die Funktionsweise des CMS bestimmt, dass pro URL/Menüeintrag/Webseite exakt eine Komponente ausgeführt wird. Hierzu wird im Frontend die Komponente einem Menüeintrag zugeordnet und eine Präsentationsform festgelegt, welche die Komponente hierfür bereitstellen muss. Aus der Artikelkomponente kennen Sie diese z. B. als Blog-, Kategorien- oder Einzelansicht. Die Daten, welche in diesen Ansichten dargestellt und verarbeitet werden, stammen aus einer oder mehreren Datenbanktabellen.

Die Programmierung von Komponenten erscheint, jedenfalls am Anfang, äußerst komplex und aufwändig und fast für jeden verwirrend, solange das Verständnis für die API, die verschiedenen Namenskonzepte und das MVC-Entwurfsmuster, erst noch aufgebaut wird. Praktischerweise können Komponenten klein und bescheiden anfangen und stetig wachsen.

Module

Ein Modul bietet sich in den Fällen an, wenn irgendwelche Daten aus irgendeiner Quelle unter bestimmten Bedingungen auf einer Webseite anzuzeigen sind. Die Datenquelle kann die aktuelle Joomla-Datenbank sein, muss aber nicht. Die Bedingungen legt der Administrator im Backend fest und entscheidet dort auch, welche Module auf einer bestimmten Webseite angezeigt werden und an welcher Stelle. So kann auf einer Webseite zwar nur eine Komponente ausgeführt werden, aber (nahezu) beliebig viele Module, um weitere Daten um die Komponente herum anzuzeigen.

Backend und Frontend haben ihren eigenen Satz an Modulen, wobei die Großzahl sicherlich im Frontend im Einsatz ist. Ihre Programmierung ist im Vergleich zu Komponenten deutlich einfacher. Dennoch – oder gerade deshalb – sind sie sehr vielseitig einsetzbar und eine gern genutzte Beilage von Komponenten. Unabhängig davon, welche Komponente für den Hauptinhalt der aktuellen Webseite tatsächlich verantwortlich ist, präsentieren Module ihre eigenen Daten bzw. die »ihrer« Komponente.

Plugins

Plugins sind ereignisgesteuerte Routinen und gehören Frontend und Backend gleichermaßen an. An allen Ereignissen, die im CMS zwischen der Anfrage durch den Browser bis zur Auslieferung der fertigen Webseite auftreten, können Plugins teilnehmen. Zu diesen Ereignissen zählen bspw. das Lesen und Speichern der Datensätze, Suchanfragen, Anzeigen der Inhalte, An- und Abmelden der Benutzer. Mit wenigen Zeilen Code können Sie das CMS oder bestimmte Komponenten durch (eigene) Plugins ergänzen und an deren Ereignissen teilhaben, um »Dinge zu tun«.

2.6  Die Datenbank

Joomla hält seine Daten standardmäßig in einer MySQL-Datenbank. Die sogenannte »Community Edition« des MySQL-Server ist für alle gängigen Betriebssysteme kostenfrei verfügbar und wird u. a. mit Komplettpaketen wie MAMP,[5] WAMP[6] oder XAMPP[7] installiert. Bei Linux-Distributionen ist MySQL ebenso wie der Apache-Webserver i. d. R. bereits enthalten und mit hoher Wahrscheinlichkeit läuft auch Ihr Webspace »unter« Apache und »mit« MySQL.

Bei der Installation des CMS wird eine Datenbank mit allerlei Basis- und Verwaltungsdaten eingerichtet. Dazu gehören der erste Benutzereintrag für den Administrator, einige Benutzergruppen und Zugriffsrechte, die Menüs für das Backend und die im Standardpaket enthaltenen Erweiterungen.

Die Tabellen der Datenbank erhalten bei der Installation ein zufälliges Präfix, etwa »a5j6_«. Alle Tabellen mit demselben Präfix gehören zu einer Joomla-Installation. So können sich mehrere CMS eine einzelne Datenbank teilen. Das Präfix ist auch in der Konfigurationsdatei configuration.php hinterlegt.

Die etwas kryptische Zeichenfolge, die Ihnen das Installationsprogramm als Präfix vorschlägt, dient als Sicherheitsmaßnahme. Jeder Webseitenbetreiber kann zudem ein eigenes Präfix vergeben. Bei einem Live-System sollte unbedingt vermieden werden, ein Standardpräfix wie »jos_« anzugeben.

Hinweis: Wir verwenden für unsere SQL-Beispiele immer das generische Tabellenpräfix »#__«. Zum einen wird es von Joomla bei der Code-Ausführung automatisch in das richtige Präfix Ihrer Installation übersetzt, zum anderen verhindern wir damit, dass Sie den Code einfach auf Ihre Datenbank anwenden und mitunter die falsche Tabelle/Installation erwischen. Sie werden es hassen.

Diese Datenbank ist nach der Installation darauf vorbereitet, Kategorien, Beiträge, Kontakte und andere Benutzerdaten aufzunehmen. Komponenten benötigen meist eine oder mehrere eigene Datenbanktabellen.

Wenn Sie noch keine Erfahrung mit dem Aufbau einer Joomla-Datenbank haben, sollten Sie sich eine kleine Erkundungsreise gönnen und sich die Tabellen nach einer Neuinstallation von Joomla z. B. mit phpMyAdmin anschauen.

Jeder Satz in der Tabelle hat einen eindeutigen Schlüssel. Die betreffende Spalte heißt entweder einfach id oder tabellenname_id. Über diese identifizierenden Schlüssel verweisen die Datenbanktabellen zum Teil auch auf Inhalte anderer Tabellen und das CMS baut auf diese Art auch hierarchische Strukturen auf.

Tipp:

F ü r Interessierte ein paar Stichworte f ü r die Suchmaschine ihres Vertrauens: Datenbanknormaliserung und Nested Sets . Ein sehr interessantes Konzept zur Abbildung hierarchischer Datenstrukturen, auf das wir leider nicht allzu detailliert eingehen k ö nnen.

SQL-Datenbanken werden über die Structured Query Language (SQL) abgefragt und bearbeitet. Die aktuellste Dokumentation für MySQL findet sich unter http://dev.mysql.com/doc/.

Die gute Nachricht: Man braucht nicht viel SQL-Wissen aufbauen, um einfache Abfragen zu erstellen und Daten auszulesen. Das Framework stellt mehrere Klassen zur Verfügung, mit denen auch ein Anwender ohne detaillierte MySQL-Kenntnisse einfache Abfragen formulieren sowie Daten einfügen und ändern kann. Wer komplexere Auswertungen erstellen und Inhalte mehrerer Tabellen verknüpfen will, wird um eine Einarbeitung in die Konzepte von SQL langfristig nicht herumkommen.

Joomla lässt sich auch mit einem Microsoft-SQL-Server für die Datenbank oder unter Windows Azure einsetzen. Die technischen Voraussetzungen[8] weichen jedoch sehr von den klassischen *AMP-Umgebung ab und bergen eigene Tücken in sich, die wir hier leider nicht behandeln können.

2.7  Das MVC-Entwurfsmuster

Ein Entwurfsmuster beschreibt einen Weg, ein immer wieder auftretendes Problem standardisiert zu lösen. Der Begriff selbst wurde in der Architektur zuerst eingeführt und für die Softwarearchitektur übernommen. Das Entwurfsmuster, nach dem die Komponenten in Joomla aufgebaut sind, nennt sich MVC: Model-View-Controller. Es ist ein klassisches Muster aus der objektorientierten Programmierung (OOP) und orientiert sich an den besagten, wiederkehrenden Aufgaben interaktiver und interoperabler Applikationen (wie einer Website) und trennt ein Softwareprogramm in drei Schichten:

Datenbasis (Model)

Präsentation der Daten (View)

Programmsteuerung (Controller)

Durch die Trennung der Aufgaben möchte man den Code in erster Linie wiederverwendbar und änderungsfreundlich machen – und geändert wird beim Programmieren viel und ständig.

Das Ganze erschließt sich eigentlich erst im Nachhinein nach dem Motto »Das Leben wird vorwärts gelebt, aber rückwärts verstanden«. Lesen Sie den Abschnitt dann später nochmal wenn die erste Komponente fertig ist, und Sie werden Ihre Aha-Erlebnisse haben!

In einer Web-Anwendung sind ganz typische, wiederkehrende Aufgaben:

Anfrage empfangen (URL)

Daten von der Datenbasis holen

Daten ausgeben

oder

Eingabe des Benutzers annehmen

Daten prüfen und ggf. speichern

Bestätigung ausgeben

und alle dazwischen liegenden Varianten.

Das Prinzip sieht jedoch stets so aus:

Das Model verwaltet die Daten und enthält die sogenannte Geschäftslogik

Die View präsentiert diese Daten und nimmt Benutzereingaben entgegen

Der Controller steuert und koordiniert den ganzen Ablauf und die Verbindung zur »Außenwelt«

Die Rollenverteilung der drei Akteure ist somit geklärt. Die Geschäftslogik gehört ins Model, denn beim Speichern eines Datensatzes sind etwa Berechnungen durchzuführen und andere Datensätze / Datenquellen zu aktualisieren. Das kann heute eine XML-Datei sein, morgen eine relationale Datenbank und übermorgen ein hipper, neuer Web-Service in der allmächtigen Wolke.

Aber ein Entwurfsmuster ist keine Zwangsjacke und MVC ist vor allem kein Allheilmittel für jedes Softwareproblem. Als Entwickler sollten Sie immer die Lösung verwenden, die sich nicht störend auf das Gesamtsystem auswirkt und einer Aufgabe am besten gerecht wird.

Um es mal ehrlich zu sagen: Für kleine Komponenten schießt man mit MVC schon mit der Kanone auf Spatzen. Aber wenn diese kleinen Komponenten groß werden, und das geht schneller, als man anfangs denkt, dann weiß man ein solch standardisiertes Vorgehen zu schätzen, bei dem insbesondere das Framework dem Entwickler schon viel Basisarbeit abnimmt – weil dieses MVC-Dings tatsächlich änderungsfreundlich ist.

Bild 2.1   Model-View-Controller

Ganz nebenbei erleichtert diese Aufteilung auch die Arbeit im Team. Nehmen wir an, ein Designer hat ein wunderschönes Design entworfen, der HTML-Spezialist hat das Design in ein Template nach allen Regeln der Kunst umgesetzt und alles funktioniert aufs Schönste. Nun beschließt aber die Datenbankspezialistin, dass in der Datenbank ein paar Spalten zusätzlich notwendig sind, um zum Beispiel Statistiken mitzuführen. Sie kann ruhig neue Spalten einfügen – der HTML-Spezialist braucht sich nicht darum kümmern. Seine Views erscheinen weiterhin korrekt, auch wenn das Datenmodel umstrukturiert wird. Vielleicht wird auch anstelle der Datenbank eine ganz andere Datenquelle eingesetzt, etwa eine Schnittstelle zu einem anderen System oder eine Datei.

Die Präsentationsschicht bleibt, wie sie ist, denn das Model bietet der View in gewohnter Weise Zugriff auf die benötigten Daten. Wie aber das Model diese Daten letztlich beschafft oder welche Daten sonst noch verarbeitet werden, geht die View nichts an. Umgekehrt kann der Webdesigner die Daten, die vom Model angeboten werden, präsentieren, wie er will – einspaltig, mehrspaltig, als Blog, als Zahlenkolonne in endlosen Tabellen oder als interaktive Infografik – und dies wahlweise eingebunden im seriösen CI-Design des Unternehmen, einem bunten Layout für Kinder oder einem barrierearmen Layout für Blinde; dem Model ist es ganz egal.

Der Controller stellt im allereinfachsten Fall eine Verbindung zwischen Model und View her und steuert deren Dialog und Wechsel anhand der eingehenden Anfragen.

[1]

Begriffsklärungen frei nach http://en.wiktionary.org und http://en.wikipedia.org

[2]

Insofern korrekt, da viele derart konzipierte Auftritte und Präsenzen zwar die Auftretenden präsentieren, selten genug aber von praktischem Nutzen für Besucher sind.

[3]

http://semver.org/ Semantic Versioning Specification

[4]

Joomla Extension Directory (JED) http:/extensions.joomla.org

[5]

http://www.mamp.info

[6]

http://www.wampserver.com

[7]

http://www.apachefriends.org

[8]

Joomla mit Microsoft Technologien http://joomla.org/technical-requirements.html

3  Erste Ausgabe im Frontend

»Das Leben wird vorwärts gelebt aber rückwärts verstanden«
Kierkegaard

Unter diesem Motto arbeitet man sich am besten in Joomla ein. Wir fangen gleich mit den ersten Programmen an, um ein Gefühl dafür zu bekommen. Rückblickend bildet sich auch das Verständnis heraus, indem man den Code studiert und analysiert. Wenn schon ein Bezug zur Praxis vorhanden ist, versteht man anschließend die Theorie viel besser.

3.1  Der Ausgangspunkt

Wir hatten in einer Tabelle eine Inventarliste aller unserer Besitztümer. Dinge, die wir ausgeliehen hatten, waren mit dem Namen des Freundes und dem Ausleihdatum versehen.

Bild 3.1   Tabelle vorher

Wir wollen aber jetzt unsere Sachen zentral in Joomla verwalten. Dies ist der typische Fall einer Komponente. Wer weiß, vielleicht können wir später mit einem Ausleihservice Geld verdienen? Bevor wir aber die Geldsäcke stapeln, fangen wir klein an – zuerst wollen wir die Liste unserer Sachen sichtbar machen.

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!