В Drupal 7 я могу использовать drupal_add_js
в файле template.php темы как theme_preprocess_html(&$vars)
функцию:
drupal_add_js(drupal_get_path('theme', 'mytheme') . '/js/scripts.js',
array(
'group' => JS_THEME,
'preprocess' => TRUE,
'weight' => '999',
));
$vars['scripts'] = drupal_get_js();
В Drupal 8 я попытался преобразовать это, используя attached
в файле моей темы .theme, например:
$vars['#attached']['js'] = array(
array(
'data' => drupal_get_path('theme', 'mytheme') . '/js/scripts.js',
'options' => array(
'group' => JS_THEME,
'preprocess' => TRUE,
'every_page' => TRUE,
),
),
);
... но это не сработало, и не было ошибок в сторожевом таймере / консоли или иным образом.
Согласно странице API D8 для drupal_add_js
:
Устаревший - начиная с Drupal 8.0. Вместо этого используйте ключ #attached в массивах рендеринга.
Там было не намного больше информации, что это, однако. Кажется, что drupal_add_css
также будет использовать этот метод. Я знаю, что для Drupal 8 еще рано, но я надеялся на это прыгнуть.
theming
8
javascript
Дэнни Энгландер
источник
источник
Ответы:
Кажется, вы можете использовать
hook_preprocess_page
с прикрепленными как так:Это прекрасно работает ( theme.inc использует этот метод), обратите внимание на дополнительный вложенный массив вокруг веса.
источник
Ключевым моментом в документации является этот бит
Акцент мой.
$variables
Массив в функции темы / Preprocess не делают массив, это просто массив , содержащий переменные. Для использования#attached
вам понадобится что-то вроде этого в функции preprocess:И это в файле шаблона:
Другими словами, более или менее так же, как в Drupal 7 (на данный момент, по крайней мере).
hook_preprocess_html()
скорее всего, это не то место для этого кода; не забывайте, что файлы js / css на самом деле отображаются в этом шаблоне, так что уже слишком поздно добавлять ихhook_preprocess_page()
,hook_preprocess_node()
иначе эквивалент, вероятно, даст вам более надежные результаты.Посмотрите лучшие практики Twig - страницу функций и шаблонов предварительной обработки для получения дополнительной информации о переменных предварительной обработки.
источник
{{ foo }}
в мире Twig, больше нет рендера php / print в шаблонах тем, т.е.node.html.twig
/page.html.twig
#attached
в контексте массива рендеринга; документация правильная. Вам нужно либо использовать описанный выше метод вместе с этим для предварительной обработки и предварительного рендеринга переменной, либо использовать файл .info.yml вашей темы для включения JS. Это единственные варианты, которые я могу сказать до сих пор, не спускаясь по библиотечному маршрутуhook_library_info
и которая подразумеваемой выше МОЛОТ. Я должен немного поиграть с этим. Спасибо.Начиная с Drupal 8.0.x-beta2 вы можете подключать CSS и JS из функций предварительной обработки.
См. Https://www.drupal.org/node/2352319.
источник
В этом примере вы используете реальный массив визуализации, а не тот, который отображается в самой функции.
Таким образом, другие модули, темы и т. Д. Могут изменить его.
источник
Хотя ОП касается Drupal 8, это можно сделать аналогичным образом в Drupal 7 без использования,
drupal_add_js()
чтобы начать привыкать к отсутствиюdrupal_add_js()
:Параметры могут быть определены в пустом массиве, см. Https://api.drupal.org/api/drupal/includes%21common.inc/function/drupal_add_js/7 .
источник