Drupal и последние jQuery - PullRequest
       1

Drupal и последние jQuery

4 голосов
/ 06 августа 2010

Мне нужно использовать последнюю версию jQuery в моем Drupal.

Недостаточно модуля обновления jQuery, потому что он не обновляет jquery до последней версии.

Есть ли в любом случаеиспользовать последнюю версию jquery во внешнем интерфейсе, и включена ли drupal версия для внутреннего интерфейса?

Должен ли я работать с файлами шаблонов тем?Это вызовет проблемы?

спасибо

Ответы [ 6 ]

3 голосов
/ 07 августа 2010

Drupal включает библиотеку jQuery на каждой странице, которая использует JavaScript.Единственный способ использовать более свежую версию jQuery, чем та, что поставляется с Drupal, - это установить jQuery Update , который также предоставляет скрипт для совместимости со скриптами, использующими старую версию библиотеки.Модуль обновления jQuery обновляет:

  • Drupal 5 до jQuery 1.2.6
  • Drupal 6 до jQuery 1.3.2
  • Drupal 7 до jQuery 1.5.2 иjQuery UI 1.8.11

Если вы собираетесь просто заменить библиотеку jQuery, содержащуюся в / misc, то скрипты Drupal перестанут работать (я попытался это сделать, и это было результатом).Загрузка более поздней версии после загрузки Drupal библиотеки в / misc также вызовет проблемы.

Для завершения информации был модуль, который шел со своей собственной версией библиотеки jQuery, которая затем была привязана к $ui;таким образом, другой код будет по-прежнему использовать библиотеку jQuery по умолчанию, в то время как ваш модуль / тема будет использовать более новую библиотеку.Модуль просто загрузил свою собственную версию jQuery, а затем выполнил следующую строку JavaScript:

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

Используя тот же подход, вы сможете загрузить последнюю версию jQuery, не создавая конфликта с существующими модулями.,Эта система не работает, если вы используете модуль, разработанный кем-то другим, и который использует код Javascript, который использует $;это работает для вашего пользовательского модуля / темы, которую вы запускаете на своем сайте.

2 голосов
/ 05 января 2013

Да, вы можете использовать обновление jquery (если вам нужно, чтобы jQuery 1.8 использовал версию dev) и подобный код в модуле для переключения версии для внешнего интерфейса и внутреннего интерфейса.

/**
 * 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';
  }
}

Я пишу блогпост об этом http://antistatique.net/blog/2013/01/04/drupal-use-a-different-jquerys-version-for-the-frontend-and-backend/.

0 голосов
/ 20 сентября 2014

Для интерфейса я сделал что-то "плохое", но это работает.

Я включил последнюю версию 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>

отключил JQuery у друпала

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

и я получаю

<script no-drupal-jquery="?W"></script>
<script ...
0 голосов
/ 08 августа 2010

А как насчет с использованием jQuery.noConflict()? Я не знаю каких-либо конкретных примеров модулей Drupal, которые работают в jQuery 1.2 / 1.3, но ломаются в 1.4, чтобы проверить это, но якобы загружают jQuery 1.4 после того, как Drupal загружает jQuery 1.2 / 1.3 (поэтому добавьте его в свою тему) и используя var jNew = jQuery.noConflict() передаст $() обратно в jQuery, которого ожидает большинство Drupal, и позволит вам использовать jNew() для выполнения jQuery 1.4 того, что вам нужно.

0 голосов
/ 08 августа 2010

1) Загрузите jquery-1.4.2.js и jquery-1.4.2.min.js.
2) Скопируйте их в папку jquery_update / replace.
3) Отредактируйте jquery_update.module:
заменить функцию jquery_update_jquery_path () {} на

function jquery_update_jquery_path() { 
    $jquery_file = preg_match('/(admin|edit|add)/', request_uri()) ?
        array('none' => 'jquery.js',       'min' => 'jquery.min.js') :
        array('none' => 'jquery-1.4.2.js', 'min' => 'jquery-1.4.2.min.js');
    return JQUERY_UPDATE_REPLACE_PATH . '/' . $jquery_file[variable_get('jquery_update_compression_type', 'min')];
} 
0 голосов
/ 06 августа 2010

Используете ли вы отдельные темы для front-end и back-end? Возможно, вы можете добавить некоторый код в функцию themename_preprocess_page () в файле template.php внешнего интерфейса, чтобы заменить файлы jquery только в этой теме.

...