По сравнению с Drupal 7, Drupal 8 только добавить JavaScript, необходимый на этой странице. Это означает, например, что jQuery больше не загружается автоматически на всех страницах.
Для добавления персонализированного кода JavaScript на странице, в настоящее время три Differents шага:
- Сохранить в CSS или JS в файл.
- Определите «библиотеку», которая может содержать как файлы CSS, так и JS.
- «Прикрепите» библиотеку к массиву рендеринга в крючке.
Чтобы определить библиотеку, вы должны создать * .librairies.yml в своем модуле, где * - имя вашего модуля. Тогда вы должны иметь что-то вроде:
cuddly-slider:
version: 1.x
css:
theme:
css/cuddly-slider.css: {}
js:
js/cuddly-slider.js: {}
dependencies:
- core/jquery
Как я уже сказал, JQuery не всегда загружается на каждой странице, это означает, что если вам нужно использовать JQuery, вы должны сказать Drupal, что библиотека нужна, с ключ зависимостей.
В зависимости от того, какие активы необходимо загрузить, вы захотите присоединить соответствующую библиотеку активов по-другому. Вы можете использовать несколько крючков для загрузки своей библиотеки. Если вы хотите, чтобы он был загружен на некоторые страницы, вы можете использовать hook_page_attachments().
<?php
function contextual_page_attachments(array &$page) {
if (!\Drupal::currentUser()->hasPermission('access contextual links')) {
return;
}
$page['#attached']['library'][] = 'contextual/drupal.contextual-links';
}
?>
прикрепить его к шаблону веточку:
{{ attach_library('contextual/drupal.contextual-links') }}
Вот полная документация о том, как прикрепить файл JS программно: https://www.drupal.org/developing/api/8/assets
Но это загрузит JS на всех страницах. Как загрузить js только на определенную страницу или для одного модуля? – ladhani