Joomla 1.5 – HTML Header modifizieren, eigenes Javascript einbinden

Joomla 1.5 – HTML Header modifizieren, eigenes Javascript einbinden

Wenn 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

  • Waldo 13.02.2010, 09:13 Uhr #1

    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.

  • Robbz 15.02.2010, 09:11 Uhr #2

    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 :-)

  • Jan 30.04.2010, 00:08 Uhr #3

    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

  • Robbz 17.05.2010, 13:19 Uhr #4

    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 “

  • Graveto 24.07.2010, 11:27 Uhr #5

    Auch bei mir werden alle Skrips nach wie vor geladen. Die Anführungszeichen habe ich korrogiert?!

  • Robbz 24.07.2010, 13:33 Uhr #6

    Kannst du die index.php deindes Templates mal in .txt umbenennen und zum Download verlinken, damit ich mal reinschauen kann?

Sorry, momentan können keine Kommentare geschrieben werden.

blog comments powered by Disqus


 

     

  • Robbz Says:

    Kannst du die index.php deindes Templates mal in .txt umbenennen und zum Download verlinken, damit i...

  • Graveto Says:

    Auch bei mir werden alle Skrips nach wie vor geladen. Die Anführungszeichen habe ich korrogiert?!...

  • Robbz Says:

    Wenn der Text beim Speichern oder Laden aus der DB abgeschnitten wird kann das ein UTF-8 Problem sei...

  • Willi da SIlva Borges Says:

    Danke für den Tip :-).Hatte das selbe Problem.Nun hab ich aber ein anderes :-(Wenn ich U...

  • Robbz Says:

    Hi DirtyWorldKann es vielleicht daran liegen, dass du die ganzen Anführungszeichen im Code n...

  • Jan Says:

    Hallo ich bekomme die Fehlermeldung:Fatal error: Cannot redeclare JHTMLBehavior::jquery() in /Ap...

  • Robbz Says:

    Im Grunde in jeder PHP-Datei. Eine Komponente oder ein Modul kann ja im Frontend auch jQuery verwend...

  • Waldo Says:

    danach hab ich schon lange gesucht,... aber"Um nun jQuery automatisch im Joomla-Code zu verwende...