Як додати плагін Jquery до Drupal?


19

Чи повинен я просто вставити код у файл головного шаблону, чи є інший рекомендований спосіб приєднання нових плагінів Jquery в Drupal 7?


Який плагін JQuery ви хочете використовувати і чому? Зазвичай додавання будь-якого типу Javascript додається за допомогою функції drupal_add_js( api.drupal.org/api/drupal/includes--common.inc/function/… ).
Джеймі Холлерн

Відповіді:


15

Найпростіший спосіб - просто додати його до файлу .info вашої теми:

scripts[] = js/my_jquery_plugin.js

Єдиний виняток - якщо ви додаєте зовнішній ресурс (CDN / розміщений скрипт), і в цьому випадку слід використовувати drupal_add_js (), як пояснив Джеймі Холлерн


1
Але хромована консоль мене змінює:Uncaught TypeError: undefined is not a function
TangMonk

@Alex У мене виникло німе запитання. Я знаю, що Drupal використовує бібліотеку jquery. Скажімо, я додаю функцію "назад доверху", використовуючи ідею, у вас є "scriptpts]] [js = js / back_to_top.js" у topic.info. Чи потрібно також додати файл jquery (наприклад, jquery v1.9, v1.11)?
CocoSkin

@CocoSkin у вас має бути добре
Алекс Вебер

Власне - ні. Це не завжди працює. Два приклади: 1) скрипти [] = js / jquery.hoverintent.js 2) скрипти [] = js / jquery.scrollme.js
море26.2

Як правило, це не гарний спосіб зробити це. Як ви керуєте, на яких сторінках він завантажений? Використанняdrupal_add_library()
антонігоре

12

Drupal має в комплекті Jquery.

Щоб додати файл js, ви можете використовувати drupal_add_js способом, визначеним в інших публікаціях.

Це буде працювати в простих випадках, але якщо ви почнете мати плагіни, які залежать від інших плагінів. ви можете подивитися бібліотеки api . Я очікую, що вчасно будуть створені модулі для підтримки популярних бібліотек, є деякі для вбудованого JQuery u див. System_library () .

У цьому прикладі для включення модуля jQuery ui.accordion ви можете використовувати drupal_add_library ()

drupal_add_library('system', 'ui.accordion');

Це забезпечить включення js разом із CSS та будь-якими бібліотеками, які залежать від нього. Він також переконається, що бібліотеки включаються лише один раз.

Якщо ви кажете, яку бібліотеку ви використовуєте, я можу надати зразок коду, як її визначити

Тому спочатку створіть модуль для визначення бібліотеки (називайте його qtip) та завантажте модуль у папку js під папкою модуля

потім реалізуйте moll_library ()

function qtip_library() (
 $libraries['qTip'] = array(
    'title' => 'qTip', 
    'website' => 'http://craigsworks.com/projects/qtip/docs/', 
    'version' => '1.0.0-rc3', 
    'js' => array(
      drupal_get_path('module', 'qtip') . '/js/jquery.qtip-1.0.0.min.js' => array(),
    ),
    'dependencies' => array(
      array('system', 'jquery'),
    ),
  );
  return $libraries;
}

Потім додати файл, покладений у ваш код

drupal_add_library('qtip', 'qtip');

Це може бути надмірним для простої бібліотеки, але якщо вам доведеться керувати великою кількістю бібліотек на кількох сайтах і темах, це значно полегшує життя.


Дякую, я використовую бібліотеку QTip
craigsworks.com/projects/qtip

5

Якщо ви хочете завантажити сценарій лише на деяких сторінках (не на всіх), ви можете додати його через файл template.php. Просто додайте код, подібний до цього:

function YourTheme_preprocess_node(&$variables) {

 $node = $variables['node'];
if (!empty($node) && ($node->nid == 983)
 // here you can esily add more pages
) {

drupal_add_js('sites/all/libraries/jquery.ui/ui/ui.core.js');
drupal_add_js('sites/all/libraries/jquery.ui/ui/jquery-ui-1.7.3.custom.js');
drupal_add_js('sites/all/libraries/jquery.ui/ui/ui.progressbar.js');

drupal_add_css('sites/all/libraries/jquery.ui/themes/redmond/ui.progressbar.css');
drupal_add_css('sites/all/libraries/jquery.ui/themes/redmond/ui.core.css');
drupal_add_css('sites/all/libraries/jquery.ui/themes/redmond/ui.theme.css');
 }
}

Я протестував це лише в Drupal 6.


3

Ви можете додати файл JavaScript до теми, яку ви використовуєте на сайті Drupal, додавши script[] =рядок у файл .info теми, яку ви використовуєте. Я б розглядав цей випадок лише в тому випадку, якщо ви використовуєте індивідуальну тему або модифіковану версію існуючої теми, яка була перейменована; Я б не радив це робити, якщо ви використовуєте, наприклад, Гарленд. Виконання цього в таких випадках означатиме втратити всі зміни кожного разу, коли тема оновлюється, або скопіювати оновлені файли тем, а потім повторно застосувати ті самі зміни, що застосовуються до попередньої версії файлів; якщо зміна лише додає script[]рядок, то зміна мінімальна, і це може бути варто зробити, але це також означатиме, що файли JavaScript не додаються в каталог, що містить файли тем, або ви повинні додавати файли JavaScript кожен час оновлення теми.

В якості альтернативи ви можете створити спеціальний модуль або додати код до наявного користувальницького модуля, який ви вже використовуєте для цього сайту.
Проблема полягає в тому, що файли JavaScript будуть додані до кожної теми, встановленої як за замовчуванням, або для теми адміністрування, без необхідності змінювати всі теми, включені на сайті, і які користувачі можуть вибрати для себе.

Як уже повідомлялося в іншій відповіді, hook_init()це гачок, який ви повинні здійснити. Додам, що hook_library()це новий гак, доданий в Drupal 7 для файлів Javascript, таких як плагіни jQuery.


3

Ви можете використовувати модуль Js Injector для додавання скриптів безпосередньо на панелі адміністратора Drupal. Крім того, ви можете використовувати функцію drupal_add_js (), щоб додати файл js на свою сторінку.


Я думаю, що це саме те, що мені потрібно, я виберу вашу відповідь як найкращу, але я хочу перевірити, чи існують інші рішення першими;)
Бруно Вінсент

Ви можете додати цей рядок до сценарію theme.info [] = "шлях до файлу", який є одним із методів, але при цьому метод js завантажується на всі ваші сторінки, що зазвичай не є хорошою практикою. За допомогою двох вищеописаних методів ви можете додати js саме на ті сторінки, які ви хочете.
Шабір А.

1

Ви можете створити простий спеціальний модуль і додати його таким чином. Код буде подібний до наступного:

MYMODULE_init() {
  drupal_add_js(drupal_get_path('module', 'MYMODULE') . '/FILE.js');
}

спеціальний модуль для додавання JQuery? Серйозно?
Vonder

тільки якщо вона зовнішня, дивіться мою відповідь
Алекс Вебер

1

Ви можете просто використовувати в YOURTHEME_preprocess_theme() якщо ви хочете застосувати логічну умову:

drupal_add_js(drupal_get_path('theme','your_theme').'/js/yourplugin.js');

і додайте також у файл yourtheme.info:

scripts[] = js/yourplugin.js


1

Якщо ви використовуєте модуль контексту, встановіть контекст Додати активи. Налаштуйте глобальний контекст або конкретний контекст і додайте нову реакцію, щоб додати актив JS за маршрутом або за модулем.

Кодування не потрібно.


Спасибі! Це має ту перевагу, що ви можете обмежити бібліотеки певними шляхами, але кодування не потрібно.
Друвінг

1
Але для jQuery плагінів, таких як textext.js, до яких в середньому входить 5 CSS та 5 файлів JS, це ще велика робота.
Druvision

1

Зараз існує багато зовнішніх бібліотек, які потрібно включити.

Розміщувати їх під каталогом js теми не завжди бажано, оскільки іноді ці бібліотеки складаються з декількох js-файлів та декількох файлів css.

Я закінчив використовувати libraries_get_path функцією модуля бібліотеки, щоб взяти їхні шляхи від dir сайтів / усіх / бібліотек:

Ось як я додав вибрані файли, які відносяться до textext.js:

<?php 
function MYMODULE_init() {

  // Add jQuery library to a specific page.
  if (arg(0) == 'messages' && arg(1) == 'new') {
    // Add the jQuery TextExt library ( http://textextjs.com/ )
    $libdir = libraries_get_path('jquery-textext');
    drupal_add_js("$libdir/src/js/textext.core.js");
    drupal_add_js("$libdir/src/js/textext.core.js");
    drupal_add_js("$libdir/src/js/textext.plugin.tags.js");
    drupal_add_js("$libdir/src/js/textext.plugin.autocomplete.js");
    drupal_add_js("$libdir/src/js/textext.plugin.suggestions.js");
    drupal_add_js("$libdir/src/js/textext.plugin.filter.js");
    drupal_add_js("$libdir/src/js/textext.plugin.focus.js");
    drupal_add_js("$libdir/src/js/textext.plugin.prompt.js");
    drupal_add_js("$libdir/src/js/textext.plugin.ajax.js");
    drupal_add_js("$libdir/src/js/textext.plugin.arrow.js");

    drupal_add_css("$libdir/src/css/textext.core.css");
    drupal_add_css("$libdir/src/css/textext.plugin.tags.css");
    drupal_add_css("$libdir/src/css/textext.plugin.autocomplete.css");
    drupal_add_css("$libdir/src/css/textext.plugin.focus.css");
    drupal_add_css("$libdir/src/css/textext.plugin.prompt.css");
    drupal_add_css("$libdir/src/css/textext.plugin.arrow.css");
  }

} ?>

Я хотів би почути, чи є зовнішній сховище, у якому всі ці бібліотеки заздалегідь визначені, тому мені не доведеться їх визначати вручну.


Як ви додаєте до нього сторінки?
Умаїр

0

Рекомендую завантажити jQuery з Google CDN-інтерфейсу Google. Перейдіть за цим посиланням для отримання додаткової інформації: http://code.google.com/apis/libraries/devguide.html#jquery. Просто переконайтеся, що ви не завантажуєте один і той же сценарій кілька разів на своєму сайті.


0

це те, що працювало для мене, немає необхідності створювати модуль для плагіна jQuery або встановлювати його - у свій шаблон.php я додав:

function YOURTHEME_js_alter(&$javascript){
    // overwriting for newer jQuery version
    $javascript['misc/jquery.js']['data'] = path_to_theme() . '/assets/js/jquery-1.9.0.js';
    // also the min...
    $javascript['misc/ui/jquery.ui.core.min.js']['data'] = path_to_theme() . '/assets/js/jquery-ui-1.10.0.custom.min.js';
    // here I add the library (jQuery plugin) to resolve an error -> $.browser.msie undefined
    $javascript[path_to_theme() . '/assets/js/jquery-migrate-1.1.0.min.js'] = array(   
        "group" => -100,
        "weight" => -18.990,
        "version" => "1.1.0",
        "every_page" => true,
        "type" =>   "file",
        "scope" => "header",
        "cache" => true,
        "defer" => false,
        "preprocess" => true,
        "data" =>  path_to_theme() . '/assets/js/jquery-migrate-1.1.0.min.js',
    );

}

-4

інший спосіб - додати наступний код у файл
page.tpl.php drupal_add_js (drupal_get_path ('тема', 'шлях / до / ваш / плагін'). '/plugin.js', 'файл');


4
Додавання коду безпосередньо до шаблонів вважається поганою практикою.
mpdonadio

"Додавання коду безпосередньо до шаблонів вважається поганою практикою" ... значить, тоді найкращий спосіб використання модуля інжекторів SQL?
Бруно Вінсент

Декілька інших згаданих способів можна вважати хорошою практикою @BrunoVincent, це залежить від того, на який рівень ви хочете напасти на це (код у темі, код у користувальницькому модулі або просто встановити модуль на зразок js інжектора)
Clive

в деяких випадках корисно робити так, наприклад, ви хочете додати файл JavaScript умовно
houmem
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.