Власне кажучи, чим ми сьогодні займемося зрозуміло з назви цієї статті. Раніше в Drupal 6. я писав свої скрипти і довантажувати їх до сторінок сайту без особливих проблем - правильно написаний скрипт завжди працював без збоїв. Але при переходячи на Drupal 7. зіткнувся з такою проблемою, що мої, зауважу синтаксично правильно написані скрипти відмовлялися працювати під сімкою. Довелося лестощі знову в Api Drupal і уважніше перечитувати, що вони там наробили.
Розпишу все на конкретному прикладі: Припустимо ми хочемо звернути «стандартне меню навігації» при натисканні по якому те елементу на сторінці. З першого погляду дуже навіть просте завдання.
Приступимо. У прикладі я використовую стандартний шаблон «Bartik». Для початку нам необхідно визначитися клікаючи по якого елементу на сторінці у нас буде відбуватися згортання меню навігації, я пропоную створити свій елемент, в якості якого у нас буде виступати просто текст. Для цього відкриваємо файл нашої теми page.tpl.php і перед виведенням лівого сайдбара впишемо свій елемент і дамо йому id під назвою «clickFirst».
Природно для його виконання потрібна ще й бібліотека Jquery, я використовував 1.8, скачати можна з офіційного ресурсу. І як би на цьому наша робота повинна була б і закінчитися, залишається тільки підключити нашу нову бібліотеку Jquery і скрипт myscript.js до сайту. Як правильно підключати скрипти можна почитати ось тут. я на цьому зупинятися не буду.
Отже скрипти закинули на сервер, підключили через info файл і дивимося, що у нас вийшло на сайті. Бачимо, що новий елемент з'явився, але він не на що не реагує, а Firebug видав помилку скрипта, хоча скрипт абсолютно правильний:
Так в чому ж проблема? А проблема в тому, що розробники тепер вимагають виробляти виклик функції через так званий «noconflict», потрібен він для того, що б скрипти написані під старі версії Jquery не конфліктували з новими, які допустимо як я написав з під Jquery 1.8. Тобто тепер для переходу до певної то функції в Jquery необхідно застосовувати конструкцію замість:
Тепер все стає більш ясно, давайте так і зробимо як каже нам API. Нова конструкція дуже довга і при написанні довгого скрипта буде дуже не зручною, тому я пропоную запхати її в змінну, припустимо dr. Для цього створимо ще один файл з назва «noconflict.js» де його вміст буде таким:
І так само підключимо його через «info» файл до наших сторінок на сайті. І тепер нам залишилося лише переписати виклик функції на основі нашої змінної, яка лежить в файлі «noconflict.js». Відкриваємо файл «myscript.js» і пишемо наступне:
І тепер дивимося, що у нас на сайті вийшло
Скрипт працює, що нам і потрібно.