Drupal 6.x mit neuer jQuery Version versehen

April 5th, 2011 | Tags: , , , , , ,
Anzeige

Zum aktuellen Zeitpunkt ist es meiner Einstellung nach nicht ratsam im Produktiveinsatz die aktuelle Drupal Version 7.x zu benutzen. Darum laufen viele Seiten auch immer noch auf der Vorgängerversion 6.x. Nachteil dieser Version ist, dass die verwendete jQuery-Version auf der Version 1.4.4 läuft wobei wir aktuell beim Stand 1.5.2 sind. Wie man die neue jQuery Version auch in älteren Drupal-Installationen verfügbar macht zeige ich in diesem Beitrag.

Das Problem scheint bekannt zu sein. Drupal Version 6.x läuft mit einer veralteten jQuery Version. Die verwendete Version 1.4.4 wurde in den Core aufgenommen und wird leider nur sehr unregelmäßig aktualisiert. Zwar gibt es Drupal Module die dieses Problem beheben sollen, aber die haben bei Tests nicht funktioniert, darum verzichte ich auch darauf sie hier näher zu erwähnen.

Warum ist es schlecht die veraltete Version zu nutzen?

Viele tolle Dinge, die man mit jQuery machen kann sind nur mit einer aktuellen Version möglich. Zudem machen die ständigen Weiterentwicklungen das Leben des Entwicklers um einiges einfacher. Zudem kommen Sicherheitslücken und Bugs (Fehler) die in aktuellen Versionen behoben sind. Auch benötigen einige Erweiterungen, wie beispielsweise jQuery UI oder jQTouch (mit dessen Hilfe Mobile Anwendungen erstellt werden können) eine aktuelle JavaScript Bibliothek.

Und mir persönlich dauert die Veröffentlichungszeit innerhalb des Drupal Cores zu lange.

Auch wenn ich gerade versucht habe zu zeigen, dass es gut ist immer up to date zu sein gibt es aber auch Gelegenheiten da ist es besser eine ältere Version zu verwenden, die man selbst bestimmen kann. So ist es nicht immer garantiert, dass eine abwärtskompatibilität gegeben ist. So könnten Funktionalitäten die mal funktionierten, mit einem update weiterhin funktionieren. Dies sollte unbedingt vorher geprüft werden. Über den folgenden Weg ist man sein eigener Herr über verwendete Versionen und kann selbstständig steuern welche Versionen benutzt werden.

Wie man mit ein wenig Code die aktuelle jQuery Version einbindet.

Wie bereits beschrieben gibt es Module. Module machen ein System aber gerne auch mal anfällig für Schwachstellen, wie fehlerhaften Code oder Sicherheitslücken. Darum bin ich Fan von sogenannten Hacks. Code, den man selbst einbaut und weiß was er macht.

Alle folgenden Beispiele müssen in der template.php Datei des verwendeten Drupal Themes umgesetzt werden. (Innerhalb von <?php und ?>)

Eine neue jQuery Bibliothek in das Theme einzubauen ist recht einfach. Durch die core Funktion drupal_add_js() kann man einfach ein JavaScript File “nachladen”. Doch bleibt dann immer noch die alte /misc/jquery.js Datei erhalten und wird immer mit geladen, was nicht nur Bandbreite als auch Ladezeit verbraucht. Um diese Code jq-Datei nicht mit schleppen zu müssen, kann man sie “entladen”.

function THEME_preprocess_page(&$vars) {
    drupal_add_js(path_to_theme().'/js/jquery-1.5.2.min.js', core);
    $js = drupal_add_js(NULL, NULL, 'header'); //Hole alle JS Files die im Header verwendet werden und packe sie in einen Array
    @unset($js['core']['misc/jquery.js']); //unset default jquery in core
    @unset($js['module']['misc/jquery.js']); //unset default jquery in modulen
    $vars['scripts'] = drupal_get_js('header', $js); //script-Tags neu erzeugen
    return $vars;
}

In Zeile 2 wird erst ein mal die neue jQuery Version geladen. Wo diese abgelegt wird ist reine Geschmackssache. Bei mir liegt sie im aktuellen Theme und dort in einem Unterordner namens js (für JavaScript)

Alles weitere sollte aus den Kommentaren im Code hervorgehen.
Einzig warum ich Zeile 4 und 5 stehen habe sollte kurz erklärt werden. Ich habe festgestellt, dass wenn ich nur core entfernen lasse es evtl. Abhängigkeiten in Modulen gibt, die diese Datei wieder in Drupal einbinden. Darum lass ich sie noch ein mal unter Module entfernen. die @-Zeichen sollen vermeiden, dass Fehler auflaufen, wenn mal doch kein Modul installiert ist welches diese JavaScript Datei benötigt.

Ich habe mir das ganze aus dem Internet zusammen gestückelt. Aber Hauptsächlich kam es von drupal.org.

Wichtiger Nachtrag:
Wie ich gerade gemerkt habe ist das zwar eine machbare Lösung, um die jQuery Version in Drupal auszutauschen, allerdings führt diese Methode auch zu Problemen bei der Reihenfolge der geladenen JavaScript Dateien. Die Datei /misc/drupal.js benötigt scheinbar auch JQ, wird aber da core vor dem neuen JQ-File geladen.
Ab Drupal 7.x kann die Funktion drupal_add_js() auch mit Gewichtungen arbeiten, doch in 6.x ist mir keine Lösung bekannt. Wenn also jemand eine Idee hat bitte melden.

Weiter lesen


Keine Kommentare
Kommentieren