Drupal 7 mit aktuellster jQuery und jQuery-UI Version

BLOG

Die in Drupal 7 standardmäßige jQuery Version 1.4.4 ist für manche aktuelle Plugins mittlerweile zu alt.
Wer dennoch nicht auf die Vorzüge von den aktuellsten Versionen von jQuery+UI verzichten möchte hat mehrere Optionen:

1. jQuery Update

Mit der aktuellsten Version 2.3 gibt es die Möglichkeit zwischen jQuery 1.5.2, 1.7.1 und 1.8.2 zu wählen, jQuery UI wird bei allen auf Version 1.8.11 angehoben.

Hier wird allerdings die System-interne jQuery Version ersetzt, was bei manchen Modulen zu Problemen führen kann.

jQuery 1.5.2 ist meiner Meinung nach unbedenklich und mir sind keine Probleme mit dieser Version bekannt.

Ab jQuery 1.7 fangen im Admin-bereich die Probleme an, so muss die aktuellste DEV-Version von cTools herhalten um den Fehlerfreien Admin-Betrieb zu gewährleisten (z.b. von Panels & Views).

Mit jQuery 1.8+ versagen zahlreiche Admin-Funktionen und lassen sich nicht mehr bedienen, viele andere Module kommen mit dieser Version auch nicht klar.

 

2. jQuery Multi

Das Libraries Module vorrausgesetzt, kopiert man hier seine Wunschversion in "sites/all/libraries/jquery/jquery-<version>.min.js"

Es wird immer nur die kleinste Version eingelesen welche dann unter "admin/config/settings/jqmulti" aktiviert werden kann.

An gleicher Stelle (sites/all/libraries) können auch weitere Javascript Libraries mit dieser jQuery Version aktiviert werden, wovon ich jedoch abrate.

Aktuell arbeitet sich das jqMulti Modul rekursiv durch die aktivierten Verzeichnisse, so das z.B. jQuery-UI mit sämtlichen Modulen und Sprachversionen geladen wird.

 

Abhilfe schafft hier folgender Hook (als Beispiel mit jQuery-UI):

function hook_jqmulti_files() { return array( libraries_get_path('jquery-ui').'/ui/jquery.ui.core.js', libraries_get_path('jquery-ui').'/ui/jquery.ui.position.js', ); }

 

Damit lassen sich selektiv einzelne Javascript Dateien mit der neuen jQuery Version aktivieren.

 

Die neue jQuery Version lässt sich dann wie folgt ansprechen:

jq183(document).ready(function($) { jq183(... mein custom jQuery code hier ... });

 

oder als Wrapper für Drupal.behaviors:

(function($) { Drupal.behaviors.mymodule = { attach: function(context, settings) { ... } }; })(jq183);

"jq183" ersetzt man mit der in jqMulti aktivieren jQuery Version mit gleicher Schreibweise, ohne . oder -

 

Zu letzterem sei noch gesagt das man auf keinen Fall Drupal Funktionen und externe jQuery Versionen mixen sollte.

Als Beispiel kann ich nur sagen das z.b. ein click() oder mousedown() auf Drupal Standard submit-buttons oder ajax-buttons über eine "fremde" jQuery Version geblockt wird.

D.h. wer sehr nah an Drupal mit Javascript arbeiten möchte sollte für diese Scripte auch die Standard-Drupal jQuery Version nutzen, ansonsten spricht auf Frontend-Seite nichts gegen die aktuellste jQuery + jQuery-UI Version.