Я вижу, что оба hook_preprocess_page()
и hook_preprocess_html()
являются реализациями hook_preprocess_HOOK()
, но я не понимаю, когда использовать какой.
hook_preprocess_page
называется первым, но это не помогает мне понять, кто его называет.
Глядя на debug_print_backtrace()
результат, он theme()
вызывается, но это не дает мне ответа.
Это просто определяется массивом, в который передается drupal_render()
?
template_preprocess_page()
отличается отhook_preprocess_page()
, и есть документация для hook_preprocess_HOOK , так же, как для hook_process_HOOK .Ответы:
hook_preprocess_page
является ловушкой предварительной обработки, вызываемой, когда используется файл шаблона page.tpl.php , иhook_preprocess_html
является ловушкой предварительной обработки, вызываемой, когда используется файл шаблона html.tpl.php .Обе ловушки препроцессора вызываются при визуализации страницы
theme('page')
, поскольку элемент страницы, определенный из system_element_info (), определяет html как оболочку темы.Затем system_theme () определяет html следующим образом.
Что касается того, когда реализовать
hook_preprocess_html()
, вы реализуете его для изменения переменных, используемых в файле html.tpl.php, который по умолчанию имеет следующий контент.Как видите, он содержит только HTML-теги, которые обертывают содержимое страницы, доступное в
$page
. При этом вы можете изменить содержимое<head>
тега, заголовок страницы (который идет в<title>
теге<head>
тега), стили CSS и файлы JavaScript, добавленные на страницу, классы и атрибуты<body>
тега.С помощью файла шаблона page.tpl.php вы можете изменить больше отображаемой страницы, включая имя сайта, слоган сайта, заголовок страницы и каналы, связанные с этой страницей. Для большинства из них есть специальная функция / ловушка Drupal, которую вы должны использовать вместо этого.
hook_preprocess_HOOK
это общее имя хука, используемое для всех хуков препроцесса, таким же образомhook_form_FORM_ID_alter()
является имя хука, используемое для класса хуков изменения.источник
hook_preprocess_page
иhook_preprocess_html
являются хуками слоя темы, которые вы можете использовать для добавления переменных, которые можно использовать в ваших шаблонах (page.tpl.php
&html.tpl.php
).hook_preprocess_hook
это большой хук слоя темы, который используют страница и html, а также пользовательскиеhook_theme()
.Например, вот объявление
hook_theme()
:и вот ваши функции предварительной обработки:
дополнительно
hook_preprocess()
позволяет захватывать несколько хуков тем, а также добавлять в них переменныеисточник