Template-Entwicklung für Joomla! 1.6

Des Kaisers neue Kleider
Kommentare

Längst hat sich Joomla! zu einem der beliebtesten und am häufigsten eingesetzten Content-Management-Systeme entwickelt. Das verwundert nicht, schließlich lässt sich Joomla! einfach konfigurieren und bietet eine leicht verständliche Benutzeroberfläche. Und da mit der Veröffentlichung der 1.6er Version nun endlich auch eine echte Benutzerrechteverwaltung auf Basis von ACL Einzug gehalten hat, steht dem Einsatz im professionellen Umfeld endgültig nichts mehr im Weg. Wirklich interessant wird das System aber erst, wenn man das Design nach seinen Wünschen anpasst. Dieser Artikel zeigt, wie Sie eigene Joomla!-Templates entwickeln können.

Das Design wird in Joomla!, wie bei vielen anderen CM-Systemen, über Templates gesteuert. Diese Templates basieren auf einer Kombination aus PHP, XML, CSS und HTML. Wer die Arbeit mit Template Engines wie Smarty gewohnt ist, wird sich sehr schnell in der Joomla!-Template-Thematik zurechtfinden. Aber auch ohne Smarty-Vorkenntnisse lassen sich Joomla! Templates einfach anlegen. Joomla! Templates müssen eine bestimmte Verzeichnisstruktur aufweisen:

  • [Joomla!]/templates/[Template-Name]
  • [Joomla!]/templates/[Template-Name]/css/
  • [Joomla!]/templates/[Template-Name]/images/

Diese Verzeichnisse müssen vorhanden sein, zusätzliche können aber angelegt werden. In vielen Templates gibt es zum Beispiel das html-Verzeichnis. Dieses Verzeichnis wird im Zusammenhang mit dem so genannten Modul und Component Overriding interessant. Denn anhand spezieller Ansichten/Views lässt sich die Ausgabe der Module und Komponenten überschreiben. Notwendig wird das, da Joomla! bis einschließlich Version 1.5 auf Tabellenlayouts setzt. Durch die Views kann man die Ausgabe tabellenlos und somit zugänglicher (barrierefreier) gestalten. Neben den genannten Verzeichnissen gibt es auch einige Dateien, die zwingend vorhanden sein müssen.

  • index.php: Das ist die eigentliche Template-Datei. Diese Datei enthält die HTML-Grundstruktur und PHP-Platzhalter, die später von Joomla! durch die eigentlichen Inhalte ersetzt werden.
  • templateDetails.xml: Diese Datei enthält den Grundaufbau des Templates. Dazu gehören Modulpositionen, die verwendete Dateien und gegebenenfalls Parameter.
  • template.css: Diese CSS-Datei muss vorhanden sein. Darin werden üblicherweise die wichtigsten CSS-Definitionen angegeben. Neben der template.css können Sie beliebige zusätzliche CSS-Dateien anlegen.
  • template_thumbnail.png: Das ist eine Vorschaugrafik des Templates mit einer Größe von 206 x 150 Pixel. Diese Grafik wird im Backend verwendet, um in der Template-Übersicht zu zeigen, wie das Template aussieht.
  • template_preview.png: Hierbei handelt es sich um eine größere Variante der Template-Vorschau. Die Dateiausmaße sollten 800 x 600 Pixel betragen.

Kernstück der Templates ist neben der index.php die templateDetails.xml. Diese Datei können Sie sich als eine Art Bauanleitung für Joomla! Templates vorstellen. Darin sind nämlich nicht nur die im Template verwendeten Modulpositionen hinterlegt, auch sämtliche vom Template genutzten Dateien stehen darin. Wichtig ist die templateDetails.xml vor dem Hintergrund, dass der Joomla! Installer aus dieser Datei die Informationen ausliest, welche Verzeichnisse für das Template angelegt werden sollen und welche Dateien vorhanden sein müssen. Bei einer Installation des Templates über das Backend werden ausschließlich die Verzeichnisse und Dateien vom Installer mit installiert, die in der templateDetails.xml explizit aufgeführt sind.

Die index.php

Die eigentliche Template-Logik ist in der index.php hinterlegt. Auf diese Datei sollte von außen niemals direkt zugegriffen werden können. Daher notiert man am Anfang der Datei immer Folgendes:

Im html-Element der index.php sollte die Dokumentsprache angegeben werden. Das geschieht über die beiden Attribute lang und xml:lang (Man sollte stets beide Attribute verwenden, da XHTML-Parser im Zweifelsfall das Attribut xml:lang bevorzugen, das von reinen HTML-Parsern wiederum nicht interpretiert wird):

<html xmlns="http: //www.w3.org/1999/xhtml" lang="de-de" xml:lang="de-de">

Die im Joomla! Backend eingestellte Sprache lässt sich über $this->language; auslesen. Somit kann man die Dokumentsprache jeweils dynamisch ermitteln und ins html-Element übernehmen:

<html xmlns="http: //www.w3.org/1999/xhtml"
xml:lang="language; ?>"
lang="language; ?>" >

Die PHP-Platzhalter werden im Frontend automatisch durch die entsprechenden Sprachkürzel ersetzt. Ist die Sprache Deutsch, dann sieht der im Frontend generierte Quellcode folgendermaßen aus:

<html xmlns="http: //www.w3.org/1999/xhtml" lang="de-de" xml:lang="de-de">

Dem lang– und dem xml:lang-Attribut wurde als Wert de-de zugewiesen. Anders sieht das Ganze aus, wenn Englisch eingestellt wird. Dann ergibt sich nämlich folgendes Bild:

<html xmlns="http: //www.w3.org/1999/xhtml" lang="en-gb" xml:lang="en-gb">

Neben dem „dynamischen“ lang-Attribut können auch der Zeichensatz und die Textrichtung auf diese Weise eingebunden werden:

<?php echo 'xml version="1.0" encoding="_charset ?>"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http: //www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http: //www.w3.org/1999/xhtml" xml:lang="
language; ?>" lang="language; ?>"
dir="direction; ?>" >

Um die Joomla!-Kopfdateien in die index.php aufzunehmen, wird das jdoc-Element verwendet. Dieses Element dient seit Joomla! 1.5 dem Einfügen von Modulen und anderen Joomla!-Elementen. Ausführliche Informationen zu jdoc gibt es dann im weiteren Verlauf dieses Artikels. Zunächst geht es ausschließlich um den Kopfbereich:



Über diesen Aufruf wird der Kopfbereich von Joomla! geladen. Dazu gehören der Seitentitel, der Skript- und CSS-Bereich sowie die Metadaten.

CSS-Dateien anlegen

Joomla! arbeitet mit dem Konzept der reservierten CSS-Klassen. Jedem Element, das von Joomla! automatisch generiert wird, werden standardmäßig bestimmte Klassennamen zugewiesen. Will man das Aussehen der Standardelemente verändern, müssen die Eigenschaften dieser CSS-Klassen angepasst werden. Dazu definiert man die neuen Eigenschaften in seinen eigenen CSS-Dateien, also beispielsweise in der template.css (Hier greift das Prinzip der CSS-Kaskade. Die in Ihren CSS-Dateien definierten CSS-Eigenschaften überschreiben dabei die Joomla!-Standardeigenschaften, da Ihre Dateien automatisch nach den Joomla!-eigenen CSS-Dateien geladen werden). Leider ist das Joomla! API sehr ungenau, was die vom System verwendeten Klassennamen betrifft. Um die Klassen zu ermitteln, hilft daher meistens nur ein Blick in den im Frontend generierten Quellcode.

Das Problem bei dem CSS-Konzept von Joomla! ist die automatische Zuweisung der Klassen. So weist Joomla! beispielsweise allen Menüs standardmäßig die Klasse module zu. Passt man die CSS-Definition für diese Klasse an, werden alle Menüs in der geänderten Form angezeigt, was so natürlich nicht immer gewünscht ist. Dieses Verhalten lässt sich anhand der Suffixe ändern, die im Backend den Modulen (hier also dem Menü) zugewiesen werden können (Abb. 1). Trägt man für ein Menü beispielsweise das Suffix –anmeldung ein, kann die CSS-Datei entsprechend ergänzt werden:

Abb. 1: Hier lassen sich die Suffixe zuweisen

div.moduletable-anmeldung {
...
}

Die CSS-Definition gilt dann ausschließlich für dieses Modul. Im vorliegenden Beispiel blieben also die anderen Menüs von dieser Definition unberührt.

[ header = Seite 2: Der Aufbau der templateDetails.xml ]

Der Aufbau der templateDetails.xml

In der templateDetails.xml wird die Template-Logik festgelegt. Die Datei enthält die im Template verwendeten Positionen und Dateien. Eingeleitet wird die Datei mit einigen Metainformationen, über die das Template detaillierter beschrieben wird (Listing 1). Zusätzlich müssen sämtliche im Template verwendeten Dateien angegeben werden. Die Dateien müssen dabei jeweils in einem filename-Element stehen. Alle filename- und folder-Elemente sind von einem globalen files-Element umschlossen:

css
html
index.php
 template.css

<!DOCTYPE install PUBLIC "-//Joomla! 1.6//DTD
template 1.0//EN" "http: //www.joomla.org/xml/dtd/1.6/template-install.dtd">

PHP Magazin
1.05.0
Dezember 2010
PHP Magazin
info@phpmagazin.de
http: //www.<a href="http://it-republik.de/php/" class="elf-external elf-icon" rel="nofollow">http://it-republik.de/php/
Copyright (C) 2010 it-republik.de/php/


Ein Template des PHP Magazins

Die verwendeten Positionen: banner, breadcrumbs, bottom, left, right, search, footer, user1, user2, top

...

Hier gibt man die im Template verwendeten Verzeichnisse und Dateien an. Bei den folder-Elementen notiert man die Verzeichnisse. Die Dateien, die in diesen Verzeichnissen liegen, müssen hingegen nicht explizit angegeben werden. Alle Dateien, die nicht innerhalb der Verzeichnisse, sondern auf der obersten Template-Ebene liegen, müssen jeweils in einem einzelnen filename-Element stehen. Da es in diesem Zusammenhang erfahrungsgemäß immer wieder zu Missverständnissen kommt: Wirklich relevant ist der files-Bereich erst, wenn das Template über den Joomla! Installer installiert wird. Wenn Sie das Template hingegen manuell per FTP auf den Server kopieren, spielt es keine Rolle, wenn im files-Bereich nicht alle Dateien und Verzeichnisse aufgeführt sind. Dennoch sollte der files-Bereich im Allgemeinen aktuell gehalten werden, schließlich weiß man zumeist nicht, ob das Template in Zukunft nicht vielleicht doch per Installer installiert werden soll. Zwei weitere Bereiche der templateDetails.xml betreffen die im Template verwendeten Modulpositionen und gegebenenfalls die Parameter.

Module laden

In Joomla! werden die Module im Template anhand von Modulpositionen platziert. Eingestellt werden die entsprechenden Positionen dabei über das Backend (Abb. 2). Welche Positionen hier zur Verfügung stehen, können Sie für Ihr Template selbst bestimmen. Dafür sind zwei Schritte notwendig:

Abb. 2: Die Modulposition wird bestimmt

  • In der templateDetails.xml werden die Positionen definiert.
  • Die definierten Positionen werden in der index.php angegeben.

In der templateDetails.xml müssen die Positionen, die im Template verwendet werden sollen, innerhalb des positions-Elements jeweils über einzelne position-Elemente definiert werden:

login
topmenu
search
header
logo

Damit stehen die Modulpositionen im Backend zur Verfügung. Innerhalb der index.php muss man nun Platzhalter für die Modulpositionen definieren. Verwendet wird dafür das jdoc-Element. Dieses Element muss die beiden Attribute type und name besitzen. Der Wert von type lautet jeweils modules. Über name wird der Positionsname angegeben: . Der Name ist frei wählbar. Dennoch haben sich für einige Standardmodule bestimmte Namen etabliert (Tabelle 1).

Tabelle 1: Namen der Standardmodule

Code

Beschreibung

Suche

Breadcrumb-Menü

Banner

Module links

Module rechts

Modul User 1

Modul User 2

Modul Top

Modul Bottom

Da es erfahrungsgemäß an dieser Stelle immer wieder zu Missverständnissen kommt, ein Beispiel hierzu: Das Suchmodul kann man über  einbinden. Das ist eine Empfehlung, vorgeschrieben ist das jedoch nicht. Ebenso ließe sich auch  verwenden. Durch das jdoc-Element wird lediglich ein Platzhalter in der index.php definiert. Diesem Platzhalter wird später im Backend das Suchmodul zugewiesen. Der Name search ist dann nicht entscheidend. Für ihn spricht jedoch, dass Templates dadurch eine gewisse Grundstruktur erhalten. Relevant wird das zum Beispiel, wenn das Template weitergegeben werden soll. Denn durch den Einsatz konsistenter Namen finden sich erfahrungsgemäß auch andere Entwickler schneller im Template zurecht. Über das style-Attribut lässt sich die Art und Weise, in der die Module ausgegeben werden sollen, bestimmen. Insgesamt stehen fünf Werte zur Auswahl:

Über so genannte Module Chromes lassen sich auch eigene Stile definieren. Ausführliche Informationen zu diesen Chromes gibt es im weiteren Verlauf dieses Artikels. Dennoch soll an dieser Stelle ein Beispiel angebracht werden, wie sich eigene Modulstile definieren lassen: Dazu legt man innerhalb des html-Verzeichnisses des Templates eine modules.php an. Innerhalb dieser Datei lassen sich die gewünschten Stile definieren:

function modChrome_mysearch($module, &$params, &$attribs)
{
if (!empty ($module->content)) : ?>
showtitle) : ?>

title; ?>

content; ?> <?php endif; }

Ein so definierter Stil lässt sich dann innerhalb der index.php beim Aufruf der entsprechenden Module verwenden:

Auf diese Weise gibt Joomla! Entwicklern den größtmöglichen Gestaltungsspielraum dahingehend, wie die Module ausgegeben werden sollen. Den eigentlichen Inhalt, also die im Backend angelegten Artikel usw., lädt man über ein jdoc-Element vom Typ component: . Dieses Element bindet man lediglich einmal in die index.php ein. Neben componentgibt es noch message. Dieser Typ ermöglicht die Anzeige von System- und Fehlermeldungen.

[ header = Seite 3: Mit Parametern arbeiten ]

Mit Parametern arbeiten

Mit Joomla! 1.5 wurde die Möglichkeit zur Definition von Parametern eingeführt. Diese Parameter erlauben Entwicklern einen deutlich größeren Gestaltungsspielraum. So kann man über Parameter beispielsweise eine variable Template-Breite oder Farbgestaltung festlegen. Die für das Template verfügbaren Parameter werden im Backend angezeigt (Abb. 3).

Abb. 3: Ein vergleichsweise umfangreicher Parameterbereich

Umsetzen lässt sich die Parametrisierung vergleichsweise einfach. Zunächst muss die templateDetails.xml um einen config-Bereich erweitert werden:

Weiter geht es mit mindestens einem fieldset-Element. Jedes fieldset-Element legt dabei einen Zusammenschluss an Optionen fest (fieldset entspricht dabei tatsächlich dem aus HTML bekanntenfieldset-Element. Genau wie dort werden auch in Joomla! durch fieldset Formularelemente logisch gruppiert):

..
..

Innerhalb von basic können die Basisoptionen zusammengefasst werden. advanced dient hingegen als Container für erweiterte Optionen. Diese Unterteilung kann man vornehmen, muss man aber nicht (Abb. 4).

Abb. 4: Der Parameterbereich wurde unterteilt

Innerhalb von fieldset werden die einzelnen Parameter definiert. Für jeden Parameter muss dabei ein eigenes field-Element angelegt werden:

Der (eindeutige) Parametername wird über das name-Attribut angegeben. Das field-Element kennt verschiedene Attribute. Über das type-Attribut legt man den Parametertyp fest. Am gebräuchlichsten dürfte sicherlich der Wert list sein, über den eine Auswahlliste definiert wird. Das default-Attribut legt den Standardwert des Parameters fest. Durch die beiden Attribute label unddescription wird der Parameter beschrieben. Die entsprechenden Werte sind im Backend im Parameter-Bereich zu sehen.

Neben list hält Joomla! noch einige andere Parametertypen bereit. Diese betreffen meistens spezielle Joomla!-Inhalte. So kann man beispielsweise über den Wert usergroup ein Auswahlfeld anlegen, in dem die im Backend vorhandenen Benutzergruppen zu sehen sind:

Ebenso einfach lässt sich auch ein Parameter definieren, über den man die gewünschte Zeitzone einstellen kann. Verwendet wird dafür der type-Wert timezone.

Ein sehr oft verwendeter Parametertyp ist radio. Damit lassen sich Radioboxen definieren. Eine einfache radio-Anwendung könnte es sein, dass im Backend über einen Parameter eingestellt wird, ob im Frontend Copyright-Informationen zu sehen sind:

Zeige
Verstecke

Weitere wichtige Feldtypen sind text (für Textfelder) und media (für Bildauswahlfeder). Das Definieren der Parameter in der templateDetails.xml ist nur der erste Schritt. Die im Backend eingestellten Parameterwerte müssen im eigentlichen Template bzw. in der index.php nutzbar gemacht werden. Der Parameterwert wird von Joomla! in die Datei params.ini geschrieben. Der Parameterwert lässt sich dann in der index.php auslesen. Das geschieht über den Aufruf $this->params->get( ‚parameterName‘ );.

params->get('gruppe');
?>

Auf diese Weise wird auf die in den einzelnen Template-Stilen verfügbaren Parameter zugegriffen. Alternativ dazu gibt es dann auch noch solche Parameter, die bei allen Stilen eines Templates für gewöhnlich gleich sind. Das könnten typischerweise der Seitentitel oder ein Beschreibungstext sein:

getTemplate(true)->params;
echo htmlspecialchars($templateparams->get('sitetitle'));
?>

Oftmals werden Parameter für die variable Farbgestaltung oder Breitendefinitionen von Templates verwendet. Realisiert wird das über unterschiedliche CSS-Dateien, die je nach gewähltem Parameter im Frontend geladen werden. Als Erstes definiert man innerhalb der templateDetails.xml den gewünschten Parameter:

800x600
1024x756
Fluid

Hier wurden verschiedene Template-Breiten definiert. Interessant ist für die Parameterfunktion die Vergabe der Werte über das value-Attribut. Im gezeigten Beispiel wurden dafür 0, 1 und 2verwendet.

Weiter geht es mit dem Anpassen des body-Elements der index.php. Dort wird die Breite des Templates über eine CSS-Klasse gesteuert:

params->get('breite');
?>
…
<body class="width_">

Der Wert von class ist in diesem Fall width_. Hinter dem Unterstrich folgt eine PHP-Anweisung. Diese sorgt dafür, dass an dieser Stelle der im Backend eingestellte Template-Parameter geschrieben wird. Legt man im Backend also die Option 800×600 fest, wird intern der Wert 0 übergeben. Das body-Element im Backend sieht dann folgendermaßen aus: . Nun müssen nur noch die drei CSS-Klassen width_0, width_1 und width_2 innerhalb der Stylesheet-Datei definiert werden:

body.width_0 div#wrap {
width:760px;
}
body.width_1 div#wrap {
width:960px;
}
body.width_2 div#wrap {
min-width:760px;
max-width:960px;
width:auto !important;
}

[ header = Seite 4: Overrides: die Ausgabe überschreiben ]

Overrides: die Ausgabe überschreiben

Der im Frontend ausgegebene Quellcode, der von Joomla! generiert wird, ist bei Weitem nicht perfekt. Das gilt übrigens nicht nur hinsichtlich der vielbeschworenen Barrierefreiheit (Bis einschließlich Joomla! 1.5 wurden die Inhalte größtenteils mittels Tabellen layoutet). Auch wenn es um die Anpassung der Inhalte an das eigene Corporate-Design oder eine andere Inhaltsaufteilung geht, möchte man am liebsten die Ausgabe umschreiben. Mit den in Joomla! 1.5 eingeführten Overrides last sich exakt so etwas umsetzen. Denn Sie können nun endlich die Ausgabe aktiv beeinflussen. Das Besondere dabei ist Folgendes: Anders als in älteren Joomla!-Versionen müssen dafür nicht mehr die Core-Dateien verändert werden. Gerade diese Core-Anpassung ist äußerst problematisch, da die Änderungen bei jedem Joomla!-Update möglicherweise überschrieben werden. Die Joomla! Overrides basieren auf dem Model View Controller (MVC).

Ermöglicht wird das Überschreiben der Core-Ausgabe durch die Template-Dateien, die mit den Layoutschichten von Komponenten und Modulen korrespondieren. Joomla! überprüft automisch, ob eine Override-Datei vorhanden ist und überschreibt in diesen Fällen die Standardausgabe. Beim Overriding unterscheidet Joomla! zwischen Komponenten und Modulen. Wollen Sie die Ausgabe der Komponenten überschreiben, müssen Sie sich mit deren Strukturen auseinandersetzen. Denn in der Tat spielen hier mehrere unterschiedliche Views bzw. Ansichten eine wichtige Rolle (Listing 2).

/components
/com_content
/views
/articles
/tmpl
default.php
form.php
// Das ist die HTM-Ausgabe
view.html.php
// Das ist die PDF-Ausgabe
view.pdf.php
/category
/tmpl
blog.php
blog_items.php
default.php
view.html.php
View.feed.php

Entscheidend für die Ausgabe sind jeweils die view.x.php-Dateien. Prinzipiell ist immer eine view.html.php vorhanden, die die Standardausgabe wiederspiegelt. Zusätzlich können aber auch noch weitere Dateien existieren. Deren Namensgebung folgt dann jeweils dem Schema views.ansichtstyp.php, wobei ansichtstyp beispielsweise pdfhtml oder feed sein kann. Um die Ausgabe im Frontend zu überschreiben, also ein Override zu definieren, verändert man nun allerdings nicht diese Dateien. Stattdessen kopiert man die Dateien, die für die Ausgabe verantwortlich sind, die man verändern will, in sein Template-Verzeichnis (In diesem Zusammenhang darf der Hinweis nicht fehlen, dass die Overrides ausschließlich im jeweils aktuellen Template funktionieren). Die betreffenden Dateien müssen dabei an eine ganz bestimmte Stelle im Template kopiert werden. Legen Sie sich dazu in Ihrem Template-Verzeichnis ein html-Verzeichnis an. Darin muss nun wiederum ein Verzeichnis angelegt werden, das exakt den gleichen Namen hat, den das Verzeichnis der zu verändernden Komponente im Komponentenverzeichnis von Joomla! besitzt. Innerhalb dieses Verzeichnisses muss nun ein Verzeichnis angelegt werden, das den gleichen Namen zugewiesen bekommt, wie die Ansicht, die verändert werden soll. Um die Artikelansicht anzupassen, müssen Sie also das Verzeichnis articles anlegen:

/templates
/php_magazin
/html
/com_content
/article
default.php
form.php

In dieses Verzeichnis werden die kopierten Dateien eingefügt. Angenommen also, Sie wollen das Standardlayout eines Artikels anpassen. Die für diese Anzeige verantwortliche Datei liegt unter/components/com_content/views/article/tmpl/default.php. Diese default.php müssen Sie nun in Ihr Template-Verzeichnis /templates/php_magazin/html/com_content/articel/default.php kopieren. Alternativ dazu können Sie die default.php natürlich auch von Grund auf neu anlegen. Meistens ist das Kopieren und Anpassen der Standard-default.php aber die bessere, da schnellere Wahl. Joomla! greift ab sofort auf diese Datei zu, die Sie nun ganz nach Belieben anpassen können.

Module folgen einem ähnlichen Aufbau wie Komponenten. Auch dort gibt es ein /tmpl-Verzeichnis, in dem die Layoutdateien liegen. Die Struktur für das Komponenten-Override ist dort recht einfach: /html/com_component_name/view_name/layout_datei_name.php. Zum besseren Verständnis folgen hier noch einige Beispiele: Angenommen, Ihr Template php_magazin besitzt kein Layout-Override für Komponenten. Will man nun das Standardlayout für einen Artikel überschreiben, muss zunächst die folgende Datei kopiert werden:/components/com_content/views/article/tmpl/default.phpZusätzlich muss sichergestellt sein, dass im Template die benötigte Verzeichnisstruktur vorhanden ist:/templates/php_magazin/html/com_content/articel/default.phpWill man zusätzlich das Blog-Layout überschreiben, wird die Datei /components/com_content/views/category/tmpl/blog.php nach/templates/php_magazin /html/com_content/category/blog.php kopiert. Sobald die Dateien kopiert sind, lassen sie sich anpassen. Auf diese Weise können Sie die Ausgabe dann vollständig personalisieren.

Fazit

Es ist nicht schwer, Joomla! Templates zu erstellen. Die Templates-Logik ist wohl durchdacht und ermöglicht ein schnelles Umsetzen des eigenen Wunschlayouts. Lediglich in Sachen Dokumentation hinkt Joomla! anderen Systemen teilweise hinterher. Vor allem die fehlende Übersicht der CSS-Klassennamen ist störend.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -