Глядя на API Drupal.org, я заметил, что hook_init () не документирован для Drupal 8. Просматривая записи изменений, я обнаружил, что перехватчиков Bootstrap больше не существует , что указывает на избавление от всех перехватчиков «bootstrap» , где перехватывает bootstrap Говорят, что hook_boot()
и hook_exit()
; ничего не сказано о hook_init()
.
Я искал hook_init в источнике Drupal 8, и я нашел следующий код. Первый - это ссылка на hook_init()
комментарий; другие два кажутся hook_init()
реализацией, но они оба получают параметр, который я не ожидаю.
function overlay_enable() {
if (strpos(current_path(), 'admin/modules') === 0) {
// Flag for a redirect to <front>#overlay=admin/modules on hook_init().
$_SESSION['overlay_enable_redirect'] = 1;
}
}
/**
* Implements hook_init().
*/
function phptemplate_init($template) {
$file = dirname($template->filename) . '/' . $template->name . '.theme';
if (file_exists($file)) {
include_once DRUPAL_ROOT . '/' . $file;
}
}
/**
* Implements hook_init().
*/
function twig_init($template) {
$file = dirname($template->filename) . '/' . $template->name . '.theme';
if (file_exists($file)) {
include_once DRUPAL_ROOT . '/' . $file;
}
}
Я также искал любую функцию, вызывающую, hook_init()
но я не нашел ни одной.
Все hook_init()
еще используется в Drupal 8? Если он больше не используется, как мне преобразовать реализацию кода в Drupal 7 hook_init()
?
hook_page_attachments
илиhook_page_attachments_alter
.Да,
hook_init()
не используется в Drupal 8. Если вам нужноdrupal_add_js()
илиdrupal_add_css()
вы можете использоватьhook_page_build()
вместо этого ( примечание : этот хук был удален в Drupal 8.0.0-beta3, смотрите запись изменений ), что также полезно для этого в Drupal 7.Например, стили CSS и код JavaScript могут быть добавлены к
hook_page_build()
использованию$page['#attached']
.Если вам нужно выполнить более сложное прослушивание запроса / ответа, вы можете определить прослушиватель событий ядра в стиле Drupal 8, как описано в удаленном hook_init () .
источник
drupal_process_attached
также использует drupal_add_css / js для добавления реквизитов страницы вcall_user_func('drupal_add_' . $type, $data, $options);
drupal_process_attached
срабатывает после получения кэша рендеринга. Если вы это сделаете,#attached
ваш CSS / JS будет добавлен, даже если используется кэш рендеринга.hook_page_build () устарела в пользу записи изменений hook_page_attachments () здесь .
Пример:
имя_библиотеки - это имя библиотеки, определенное в mymodule.libraries.yml вашего модуля
источник