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?
Lesen
was andere zum Artikel sagen
danach hab ich schon lange gesucht,… aber
“Um nun jQuery automatisch im Joomla-Code zu verwenden, schreibe dazu einfach nur folgende Zeile in die PHP-Datei:” ->
bitte mal kurz erklären: in welche PHP Datei und welche Zeile genau ?
Have a great weekend, Danke.
Im Grunde in jeder PHP-Datei. Eine Komponente oder ein Modul kann ja im Frontend auch jQuery verwenden, selbst wenn das Template die jquery.js garnicht eingebunden hat. Das sollte so auch in der index.php des Templates funktionieren. Man muss also kein “script type=text/javascript” mehr schreiben, und mehrfache Einbindungen der jquery-Bibliothek gibt es dadurch auch nicht
Hallo ich bekomme die Fehlermeldung:
Fatal error: Cannot redeclare JHTMLBehavior::jquery() in /Applications/XAMPP/xamppfiles/htdocs/Joomla1.5_bueroexit/libraries/joomla/html/html/behavior.php on line 97
Ich habe aber die jquery.js im media-Ordner liegen.
Wäre nett wenn mir jemand helfen könnte?
Viele Grüße
Hi DirtyWorld
Kann es vielleicht daran liegen, dass du die ganzen Anführungszeichen im Code nicht durch die Richtigen ersetzt hast? Der Syntax-Highlighter sorgt leider dafür, dass aus ” und ' sowas hier wird: ‘ und “
Auch bei mir werden alle Skrips nach wie vor geladen. Die Anführungszeichen habe ich korrogiert?!
Kannst du die index.php deindes Templates mal in .txt umbenennen und zum Download verlinken, damit ich mal reinschauen kann?