4 Stimmen

Drupal und das neueste jQuery

Ich muss die neueste Version von jQuery in meinem Drupal verwenden.

Das jQuery-Update-Modul reicht nicht aus, da es jquery nicht auf die neueste Version aktualisiert.

Gibt es eine Möglichkeit, die neueste Version von Jquery im Front-End zu verwenden und die in Drupal enthaltene Version für das Back-End?

Soll ich die Dateien der Themenvorlagen bearbeiten? Wird dies zu Problemen führen?

danke

3voto

apaderno Punkte 26483

Drupal enthält die jQuery-Bibliothek in jeder Seite, die JavaScript verwendet. Die einzige Möglichkeit, eine neuere Version von jQuery als die in Drupal enthaltene zu verwenden, ist die Installation von jQuery Update , die auch ein Skript für die Kompatibilität mit Skripten, die eine ältere Version der Bibliothek verwenden, bereitstellt. Das Modul jQuery Update aktualisiert:

  • Drupal 5 zu jQuery 1.2.6
  • Drupal 6 zu jQuery 1.3.2
  • Drupal 7 zu jQuery 1.5.2 und jQuery UI 1.8.11

Wenn Sie einfach die in /misc enthaltene jQuery-Bibliothek ersetzen, funktionieren die Drupal-Skripte nicht mehr (ich habe das versucht, und das war das Ergebnis). Das Laden einer neueren Version, nachdem Drupal die Bibliothek in /misc geladen hat, führt ebenfalls zu Problemen.

Um die Informationen zu vervollständigen, gab es ein Modul, das seine eigene Version der jQuery-Bibliothek enthielt, die dann mit $ui Auf diese Weise würden andere Codes weiterhin die standardmäßige jQuery-Bibliothek verwenden, während Ihr Modul/Theme die neuere Bibliothek nutzen würde. Das Modul lud einfach seine eigene Version von jQuery und führte dann die folgende JavaScript-Zeile aus:

window.$ui = jQuery.noConflict(true);

Mit dem gleichen Ansatz können Sie die neueste Version von jQuery laden, ohne dass es zu Konflikten mit bestehenden Modulen kommt. Dieses System funktioniert nicht, wenn Sie ein Modul verwenden, das von jemand anderem entwickelt wurde, und das Javascript-Code verwendet, der $ Es funktioniert jedoch für Ihr benutzerdefiniertes Modul/Thema, das Sie auf Ihrer Website verwenden.

2voto

gagarine Punkte 3868

Ja, Sie können jquery update verwenden (wenn Sie jQuery 1.8 benötigen, verwenden Sie die Dev-Version) und einen Code wie diesen in einem Modul, um die Version für Front-End und Back-End zu wechseln.

/**
 * Implements hook_module_implements_alter().
 */
function mymodule_site_module_implements_alter(&$implementations, $hook) {
  if ($hook == 'library_alter') {
    if(isset($implementations['jquery_update'])) {
      // Move jquery update to the end. This will make sure our hook_library_alter
      // is always called before the jquery_update.
      $jquery_update = $implementations['jquery_update'];
      unset($implementations['jquery_update']);
      $implementations['jquery_update'] = $jquery_update;
    }
  }
}

/**
 * Implements hook_library_alter().
 */
function mymodule_site_library_alter(&$libraries, $module) {
  // If it is the admin theme all we want to do is change the global $conf
  // variable so when jquery_update runs right after us it will use 1.5.
  // We are not using path_is_admin(current_path()) because some admin path can use
  // the frontend theme like node edit page
  global $theme_key;
  if (variable_get('admin_theme') == $theme_key) {
    // Modifying global $conf variable, can be dangerous. Be carefull.
    global $conf;
    $conf['jquery_update_jquery_version'] = '1.5';
  }
}

Ich schreibe einen Blogbeitrag darüber http://antistatique.net/blog/2013/01/04/drupal-use-a-different-jquerys-version-for-the-frontend-and-backend/ .

0voto

marcvangend Punkte 5467

Verwenden Sie separate Themes für Front-End und Back-End? Wahrscheinlich können Sie der Funktion themename_preprocess_page() in der template.php des Frontends etwas Code hinzufügen, um die Jquery-Dateien nur in diesem Theme zu ersetzen.

0voto

Was ist mit mit jQuery.noConflict() ? Ich kenne keine konkreten Beispiele von Drupal-Modulen, die in jQuery 1.2/1.3 funktionieren, aber in 1.4 kaputt gehen, um dies zu testen, aber angeblich lädt jQuery 1.4, nachdem Drupal jQuery 1.2/1.3 geladen hat (also fügen Sie es zu Ihrem Thema hinzu) und verwendet var jNew = jQuery.noConflict() würde passieren $() zurück zum jQuery, das Drupal größtenteils erwartet, und erlauben Ihnen die Verwendung von jNew() um die jQuery 1.4 Dinge zu tun, die Sie tun müssen.

0voto

moldcraft Punkte 428

Für das Frontend habe ich etwas "Schlechtes" gemacht, aber es funktioniert.

Ich habe die neueste jQuery

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">$.browser = {msie: false}; // fix for scripts that use that property</script>

das jQuery von Drupal deaktiviert

<?php print str_replace(
    '<script type="text/javascript" src="/misc/jquery.js', 
    '<script no-drupal-jquery="', 
    $scripts
);
?>

und ich bekomme

<script no-drupal-jquery="?W"></script>
<script ...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X