Найти

Loading

Использование новейших версий jQuery в Drupal

Множество веток форумов, обсуждений и комментариев вращаются вокруг необходимости использования новейшей версии jQuery на сайта, созданных на Drupal 6.x. Подобно любым прогрммным решениям есть несколько путей для реализации этой цели, но я сфокусируюсь на рекомендованном варианте использования 2 версий jQuery на одном сайте.

Проблема.

Ваши theme / menu / slideshow / все остальное используют jQuery 1.4, jQuery 1.8 и некоторые другие плагины, а Drupal 6 поставляется с jQuery 1.2.6. Технически вы можете просто заменить файл jquery.js в example.com/misc новейшей версией, но вы столкнетесь с рядом проблем, как то:
Полезные UI штуки, типа перетаскиваемых рядов в таблицах, поиск на ajax по всей вероятности прекратят работать. После обновления Друпала ваш новый файл jquery.js будет переписан старым версии 1.2.6.

Решение

В jQuery уже встроен функционал, позволяющий работать на одном сайте с разными версиями jQuery (или, на самом деле, с лбыми другими библиотеками JavaScript, использующими символ $ как функцию или переменную). Это функция noConflict(), и ее страница API находится здесь: http://api.jquery.com/jQuery.noConflict/. Для ее использования внутри вашей темы откройте page.tpl.php и измените ее следующим образом:
<head>
  <title><?php print $head_title; ?></title>
  <?php print $head; ?>
  <?php print $styles; ?>
  <?php if (arg(0) != 'admin') { ?>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
    <script type="text/javascript">
      var $jq = jQuery.noConflict();
    </script>
  <?php } ?>
  <?php print $scripts; ?>
</head>
В строке  if (arg(0) != 'admin') { производится проверка, не является ли данная страница административной, и если нет, то подключается новая версия jQuery. Вы не должны использовать этот метод, если вы пользуетесь административной темой, так что убедитесь, что вы выбрали пункт «Использовать административную тему для редактирования контента».
Таким образом, jQuery 1.2.6 грузится на каждой странице и может использоваться Views, Draggable.js, вызовами Ajax, и т.д. jQuery 1.4.4 (в данном примере) грузится также, и эти две версии никак не взаимодействуют. Стоит еще добавить, что версия 1.4.4 подгружается с Google CDN.
Для того чтобы выполнять скрипты с новой версией jQuery вам просто нужно вместо $ использовать $jq, как например:
$jq(document).ready(function(){
$jq('#my-div').function();
});
Оригинал материала: 

http://drupal.org/node/1058168