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

  • Waldo

    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.

  • http://joomla-jquery-internet.de Robbz

    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

    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

  • http://joomla-jquery-internet.de Robbz

    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

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

  • http://joomla-jquery-internet.de Robbz

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

  • Anonymous

    Hallooo..
    Wo kann ich diese code einbinden:
    $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.

    Danke

  • Andreas

    Hm. Da man kein Override für einzelne Klassen in Joomla erstellen kann, rate ich von der letzten Variante eher ab.
    Core-Files zu modifizieren ist immer schlecht…

  • admin

    Das stimmt natürlich, man muss schon wissen was man tut. Aber manchmal geht es halt leider nicht anders. Bzw man könnte sich auch eine Erweiterung kopieren und umbenennen, aber dazu muss man halt auch einiges anpassen.

  • http://joomla-jquery-internet.de Robbz

    Ich würde das einfach im Template in der index.php ganz nach oben setzen.

blog comments powered by Disqus

 

   

  • Robbz Says:

    Ich würde das einfach im Template in der index.php ganz nach oben setzen....

  • admin Says:

    Das stimmt natürlich, man muss schon wissen was man tut. Aber manchmal geht es halt leider nicht and...

  • admin Says:

    Bestanden ;-)...

  • السوق المالي اليوم Says:

    hey super danke ich habe das problem mit typo3 auch gehabt dank deinem tip jetzt gelöst, thnx ;D ...

  • Dana Says:

    Geht das auch über samsung gt-s5230?? ...

  • Aaa Says:

    facebook Kommentar Test...

  • Andreas Says:

    Hm. Da man kein Override für einzelne Klassen in Joomla erstellen kann, rate ich von der letzten Var...

  • Stang_andre Says:

    test...

  • Robbz Says:

    Dann läuft aber das Script immer noch nicht als PHP5. Kann sein, dass 1&1 ihre Server inzwischen...

  • Nospam Says:

    das ist alles recht üppig, was du in deiner .htaccess gebastelt hast. Viel einfacher geht's mit "#Re...