Seit kurzem ist die “Standard Term Support” (kurz STS) Version 3.0 des bekannten Open Source CMS Joomla erhältlich. Ob man von der stabilen “Long Term Support” (LTS) Version 2.5.7 umsteigen will, bleibt einem selber überlassen. Das Joomla Core Team rät selber dazu zunächst zu prüfen ob ein Umstieg überhaupt Sinn macht.
Kurz zum Hintergrund: STS Versionen dienen bei Joomla dazu, dem Umstieg auf eine LTS Version leichter zu machen. Für ca. 6 Monate gibt es mit einem STS Release eine Zwischenversion mit der man in Ruhe Komponenten, Erweiterungen, Templates etc. testen kann. Z.B. waren die Versionen 1.6 und 1.7 nur kurz aktuell und dienten zur Vorbereitung auf 2.5. Alle Versionen mit einer x.5 Versionierung sind dabei LTS Versionen, alle anderen nur STS Versionen.
Gerade für mich als Template Designer und Entwickler stellt sich da schnell die Frage: Können Joomla 2.5 Templates einfach weiter genutzt werden? Um es kurz zu machen: Jein.
Generell bietet Joomla 3.0 mehr Möglichkeiten, alte Befehle werden aber fast alle übernommen.
Nach der Installation einiger meiner Joomla 2.5 Template kam es aber regelmäßig zu einer Fehlermeldung beim betrachten des Frontends:
500 – JHtmlBehavior::mootools not found.
Die Fehlermeldung macht schnell klar was das Problem ist: Joomla 2.5 basiert noch standardmäßig auf dem JavaScript Framework MooTools, während Joomla 3.0 auf dem Grid Framework Bootstrap basiert und dessen, auf jQuery aufbauendem, JavaScript Framework nutzt.
Zwar muss das Bootstrap JS Framework nicht geladen werden, MooTools kann aber nicht mehr in seiner erweiterten Form geladen werden (Auch in Joomla 3.0 wird noch die “mootools-core.js” Datei geladen, nicht mehr jedoch die “mootools-more.js” Datei).
Daher muss folgender Befehlt in der index.php Datei des Templates:
JHTML::_(‘behavior.mootools’);
gelöscht werden oder gegen folgenden getauscht werden:
JHtml::_(‘bootstrap.framework’);
Mit diesem Befehl läd die Seite dann zwar noch die alte “mootools-core.js” Basisversion, zusätzlich aber noch jQuery (zZ. in der Version 1.8.1) und die “bootstrap.min.js” Datei. Dazwischen noch eine “noConflict” Datei um zwischen der alten MooTools Kernversion und jQuery keine Konflikte aufkommen zu lassen.
Problem hierbei jedoch: Das Bootstrap Framework ist nicht Teil von Joomla 2.5. Will man also ein Template entwerfen das auf beiden Systemen läuft, muss man entweder beide Framework Versionen entfernen (und damit das Risiko eingehen das interne Joomla Funktionen nicht mehr genutzt werden können), oder, etwas eleganter, in den Template Parametern eine Auswahl einbauen: Entweder Mootools für 2.5, Bootstrap JS und jQuery für 3.0+ oder gar nichts von beidem.
Dazu müssen zwei Template Dateien geänder werden: templateDetails.xml und index.php
Änderungen an der templateDetails.xml
In dieser Datei werden, neben den Installationsanweisungen, die Parameter und Optionen eines Templates hinterlegt, bzw. deren Auswahl definiert. Hier muss also die Auswahl für eines der beiden Frameworks integriert werden. Hierui folgenden Code irgendwo zwischen den beiden <fieldset name=”Basic”></fieldset> Tags platzieren:
<field name=”jsFramework”
type=”list”
default=”1″
label=”Which JS Framework should be loaded?”
description=”Should Joomla load and integrate the mootools JS framework (for Joomla 2.5 and earlier) or the jQuery and Bootstrap framework (compatible with Joomla 3.0+)”>
<option value=”1″>Old MooTools (Joomla 1.6 – 2.5)</option>
<option value=”2″>Bootstrap/jQuery (Joomla 3.0+)</option>
<option value=”3″>None</option>
</field>
Der Code erklärt sich im Prinzip von selber: In der Template Konfiguration wird eine Auswahllist mit drei Optionen für den Parameter “jsFramework” zur Verfügung gestellt: Wert 1 = Mootools, Wert 2 = Bootstrap und Wert 3 = nichts von beidem.
Der Nutzer kann dem Parameter “jsFramework” als einen von drei Werten zuweisen.
Nun muss natürlich noch hinterlegt werden welcher Wert welche Auswirkung hat. Hierzu in der “index.php” Datei des Templates direkt oberhalb der Dokumenten Deklaration <!DOCTYPE html> folgenden Code einfügen:
<?php if($this->params->get(‘jsFramework’) == 1) : ?>
<?php
/* The following line loads the MooTools JavaScript Library */
JHTML::_(‘behavior.mootools’);
?>
<?php endif; ?>
<?php if($this->params->get(‘jsFramework’) == 2) : ?>
<?php
// Add JavaScript Frameworks
JHtml::_(‘bootstrap.framework’);
?>
<?php endif; ?>
Auch hier ist die Erklärung relativ simpel: Wenn Parameter “jsFramework” gleich 1 ist dann führe JHTML::_(‘behavior.mootools’); aus, ist Parameter “jsFramework” gleich 2 dann führe JHtml::_(‘bootstrap.framework’); aus, ist der Wert ein anderer, z.B. 3, dann passiert gar nichts.