Чи повинен я просто вставити код у файл головного шаблону, чи є інший рекомендований спосіб приєднання нових плагінів Jquery в Drupal 7?
Чи повинен я просто вставити код у файл головного шаблону, чи є інший рекомендований спосіб приєднання нових плагінів Jquery в Drupal 7?
Відповіді:
Найпростіший спосіб - просто додати його до файлу .info вашої теми:
scripts[] = js/my_jquery_plugin.js
Єдиний виняток - якщо ви додаєте зовнішній ресурс (CDN / розміщений скрипт), і в цьому випадку слід використовувати drupal_add_js (), як пояснив Джеймі Холлерн
Uncaught TypeError: undefined is not a function
drupal_add_library()
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');
Це може бути надмірним для простої бібліотеки, але якщо вам доведеться керувати великою кількістю бібліотек на кількох сайтах і темах, це значно полегшує життя.
Якщо ви хочете завантажити сценарій лише на деяких сторінках (не на всіх), ви можете додати його через файл 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.
Ви можете додати файл JavaScript до теми, яку ви використовуєте на сайті Drupal, додавши script[] =
рядок у файл .info теми, яку ви використовуєте. Я б розглядав цей випадок лише в тому випадку, якщо ви використовуєте індивідуальну тему або модифіковану версію існуючої теми, яка була перейменована; Я б не радив це робити, якщо ви використовуєте, наприклад, Гарленд. Виконання цього в таких випадках означатиме втратити всі зміни кожного разу, коли тема оновлюється, або скопіювати оновлені файли тем, а потім повторно застосувати ті самі зміни, що застосовуються до попередньої версії файлів; якщо зміна лише додає script[]
рядок, то зміна мінімальна, і це може бути варто зробити, але це також означатиме, що файли JavaScript не додаються в каталог, що містить файли тем, або ви повинні додавати файли JavaScript кожен час оновлення теми.
В якості альтернативи ви можете створити спеціальний модуль або додати код до наявного користувальницького модуля, який ви вже використовуєте для цього сайту.
Проблема полягає в тому, що файли JavaScript будуть додані до кожної теми, встановленої як за замовчуванням, або для теми адміністрування, без необхідності змінювати всі теми, включені на сайті, і які користувачі можуть вибрати для себе.
Як уже повідомлялося в іншій відповіді, hook_init()
це гачок, який ви повинні здійснити. Додам, що hook_library()
це новий гак, доданий в Drupal 7 для файлів Javascript, таких як плагіни jQuery.
Ви можете використовувати модуль Js Injector для додавання скриптів безпосередньо на панелі адміністратора Drupal. Крім того, ви можете використовувати функцію drupal_add_js (), щоб додати файл js на свою сторінку.
Ви можете створити простий спеціальний модуль і додати його таким чином. Код буде подібний до наступного:
MYMODULE_init() {
drupal_add_js(drupal_get_path('module', 'MYMODULE') . '/FILE.js');
}
Ви можете просто використовувати в YOURTHEME_preprocess_theme()
якщо ви хочете застосувати логічну умову:
drupal_add_js(drupal_get_path('theme','your_theme').'/js/yourplugin.js');
і додайте також у файл yourtheme.info:
scripts[] = js/yourplugin.js
Якщо ви використовуєте модуль контексту, встановіть контекст Додати активи. Налаштуйте глобальний контекст або конкретний контекст і додайте нову реакцію, щоб додати актив JS за маршрутом або за модулем.
Кодування не потрібно.
Зараз існує багато зовнішніх бібліотек, які потрібно включити.
Розміщувати їх під каталогом 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");
}
} ?>
Я хотів би почути, чи є зовнішній сховище, у якому всі ці бібліотеки заздалегідь визначені, тому мені не доведеться їх визначати вручну.
Рекомендую завантажити jQuery з Google CDN-інтерфейсу Google. Перейдіть за цим посиланням для отримання додаткової інформації: http://code.google.com/apis/libraries/devguide.html#jquery. Просто переконайтеся, що ви не завантажуєте один і той же сценарій кілька разів на своєму сайті.
це те, що працювало для мене, немає необхідності створювати модуль для плагіна 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',
);
}
інший спосіб - додати наступний код у файл
page.tpl.php drupal_add_js (drupal_get_path ('тема', 'шлях / до / ваш / плагін'). '/plugin.js', 'файл');
drupal_add_js
( api.drupal.org/api/drupal/includes--common.inc/function/… ).