Как подружить Drupal и jQuery
Что делать, если скрипт на jQuery, найденный вами в интернете не работает при его вставке в Drupal. В чем проблема и как ее решить?
При написании кода лучшая практика — это обернуть свой код в «замыкание» (обертку, хз как назвать). «Замыкание» — это не более чем функция, которая позволяет ограничить область действия переменных, чтобы случайно не перезаписать глобальных переменных.
- // Объявляем новую функцию.
- (function () {
- // Функции объявленые здесь не будут влиять на заданные глобально.
- var window = "Whoops, at least I only broke my code.";
- console.log(window);
- // Дополнительный набор скобках говорит запустить функцию, которую мы только что определили.
- }());
- // Наш дурацкий код внутри замыкания не влияет на всё остальное.
- console.log(window);
У Drupal 7 есть одна особенность, после загрузки misc/drupal.js включается режим jQuery.noConflict. Это мешает нам выполнять скрипты jQuery как раньше, простым копированием кода.
Решить это можно например вот так
Обратите внимание, что есть два приемлемых синтаксиса для закрытия: скобка, которая закрывает первую скобку может идти как до, так и после (JQuery).
Функция .ready() так же имеет возможность задавать псевдоним объекту jQuery:
- jQuery(document).ready(function($) {
- // Code that uses jQuery's $ can follow here.
- });
В Drupal 7 jQuery.noConflict () вызывается, чтобы сделать его проще в использовании других библиотек JS, так что вам либо придется вводить JQuery () или у вас будет замыкание переименовывающее его для вас
Но, есть еще один универсальный метод, позволяющий избежать этих нудных заморочек!!!
Использовать модуль jQuery Dollar
Он сделает всю грязную работу за вас, код будет работать, если его просто скопировать из примеров, взятых в интернете. Проверил, все пучком :-)