Лучший способ встроить JS / JQuery в файл шаблона макета Display Suite?
Я создаю тему для сайта drupal с использованием набора отображения - все текущие версии. Как вы понимаете, в drupal есть много способов достичь эквивалентного результата. Я создал несколько пользовательских макетов в наборе отображения. Теперь я хочу добавить jquery к некоторым из этих макетов, чтобы jquery загружался только при отображении этих макетов (вместо того, чтобы загружать один и тот же файл jquery на каждую страницу в теме).
Конечно, я могу использовать что-то вроде drupal_add_js() или $form#attached и т. Д. Но что плохого в добавлении тега в мой файл шаблона? Что такое "метод Display Suite" для этого - я должен верить, что они (команда Display Suite) уже подумали об этом...
Благодарю.
1 ответ
Один из способов сделать это - через hook_ds_pre_render_alter(), например:
/**
* Implements hook_ds_pre_render_alter();
* Add custom JavaScript.
*/
function MYMODULE_ds_pre_render_alter(&$layout_render_array, $context, &$vars) {
if($vars['type'] === 'MY_NODE_TYPE' && $vars['view_mode'] === 'full') {
drupal_add_js(drupal_get_path('module', 'MYMODULE') . '/js/my_js_file.js');
}
}
Добавление JavaScript через #attached было бы предпочтительнее, так как оно кажется более чистым и более соответствует подходу, принятому в Drupal 8, однако я не смог найти способ сделать это. Display Suite, кажется, переопределяет hook_node_view(), и добавление #attached в реализацию ds_pre_render_alter () никуда меня не привело. Объявление файла.js в пользовательском файле макета DS .inc, к сожалению, также не поддерживается.
Реализация drupal_add_js() непосредственно в файле шаблона.tpl.php может работать не так, как ожидалось, и, похоже, не является "лучшей практикой" (см. https://drupal.stackexchange.com/questions/20520/drupal-add-js-in-html-template-file).
Интересно, что хотя в Drupal 8 drupal_add_js() полностью удаляется в пользу #attached, и будет возможно добавить JavaScript непосредственно в шаблоны, см. https://www.drupal.org/theme-guide/8/assets).