Joomla 1.5 – HTML Header modifizieren, eigenes Javascript einbinden
Posted: Dezember 31, 2009 at 6:10 pm | Tags: Behaviour, Head, HTML, Javascript, Joomla, jQuery, Mootools | PDFWenn man sein Joomla 1.5 Frontend-Template nicht auf Mootools, sondern anderen Javascript-Frameworks wie zum Beispiel jQuery aufbauen will, scheitert man meistens daran, dass das Javascript-Framework Mootools von Joomla selbst schon integriert wird, indem man einfach nur <jdoc:include type=”head”> in sein Template schreibt. Dies soll natürlich nicht verboten werden, aber man kann die Header-Datas leicht modifizieren, um zum Beispiel eigenes Javascript in den Head-Bereich des HTML-Dokuments einzubinden.
Öffnet dazu die Datei “index.php” des jeweiligen Joomla-Templates und sucht ganz weit oben nach der Zeile <jdoc include type=”head”> und setzt folgenden Code darüber:
$user =& JFactory::getUser();
if ($user->get('guest') == 1) { // Nur durchführen, wenn nicht eingeloggt
$headerstuff = $this->getHeadData(); //aktuelle Daten laden
$headerstuff['scripts'] = array(); // Javascripts komplett entfernen
$this->setHeadData($headerstuff); // geänderte Daten speichern
}
Nun wird überhaupt kein Javascript mitgeladen und die Performance steigt. Allerdings wird das Mootools-Script wohl für einige Administrator-Funktionen benötigt, deshalb die Abfrage, ob man im Joomla-Frontend “Guest” ist.
Gleichzeitig kann man beliebige andere Header-Tags einbinden, wie zum Beispiel ein das Javascript-Framework jQuery:
$headerstuff['scripts'] = array('/media/system/js/jquery.js', 'text/javascript';
Oder etwas eleganter, als direkt im Array rumzufummeln:
$document = &JFactory::getDocument(); // liefert das globale Dokument
$document->addScript(JPATH_SITE.'/media/system/js/jquery.js'); // fügt die Script-Deklaration hinzu
$document->addScriptDeclaration ('jQuery.noConflict();'); // führt diesen Code als Javascript aus.
Ich würde empfehlen immer die komprimierte Version der Javascript-Frameworks zu verwenden, damit eure Joomla Website noch schneller lädt.
Quelle: http://www.blog.highub.com/cms/remove-mootools-from-joomla-header
Update
Es gibt noch eine Möglichkeit, das Frontend-Mootools durch jQuery zu ersetzen, und dabei sogar die Javascript-Funktionen für eingeloggte Administratoren beizubehalten: Joomla Behaviour.
Im Ordner libraries->joomla->html->html befindet sich die Datei behavior.php. Öffnet diese mit einem Editor und sucht die Funktion “mootools($debug = null)”. Direkt nach dieser Funktion erstellt ihr eine Funktion mit Namen “jQuery($debug=null)” und schreibt folgenden Code rein:
function jQuery($debug = null)
{
static $loaded;
global $mainframe;
// Only load once
if ($loaded) {
return;
}
// If no debugging value is set, use the configuration setting
if ($debug === null) {
$config = &JFactory::getConfig();
$debug = $config->getValue(‘config.debug’);
}
$konkcheck = strpos (strtolower($_SERVER['HTTP_USER_AGENT']), “konqueror”);
if ($debug || $konkcheck) {
JHTML::script(‘jquery.js’, ‘media/system/js/’, false);
} else {
if($mainframe->isSite()) {
JHTML::script(‘jquery.min.js’, ‘media/system/js/’, false);
}
else
{
JHTML::script(‘mootools.js’, ‘media/system/js/’, false);
}
}
$loaded = true;
return;
}
jquery.min.js ist die gepackte Variante von jQuery und muss sich zusammen mit der unkomprimierten Version jquery.js im Ordner media->system->js befinden. jquery.js wird für den Konqueror-Browser benötigt, da dieser wohl Probleme mit dem gepackten jQuery-Javascript in Joomla 1.5 hat.
Um nun jQuery automatisch im Joomla-Code zu verwenden, schreibe dazu einfach nur folgende Zeile in die PHP-Datei:
JHTML::_(‘behavior.jQuery’)
Cool, oder?