hook_preprocess_page
является ловушкой предварительной обработки, вызываемой, когда используется файл шаблона page.tpl.php , и hook_preprocess_html
является ловушкой предварительной обработки, вызываемой, когда используется файл шаблона html.tpl.php .
Обе ловушки препроцессора вызываются при визуализации страницы theme('page')
, поскольку элемент страницы, определенный из system_element_info (), определяет html как оболочку темы.
$types['page'] = array(
'#show_messages' => TRUE,
'#theme' => 'page',
'#theme_wrappers' => array('html'),
);
Затем system_theme () определяет html следующим образом.
'html' => array(
'render element' => 'page',
'template' => 'html',
),
Что касается того, когда реализовать hook_preprocess_html()
, вы реализуете его для изменения переменных, используемых в файле html.tpl.php, который по умолчанию имеет следующий контент.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"
"http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php print $language->language; ?>" version="XHTML+RDFa 1.0" dir="<?php print $language->dir; ?>"<?php print $rdf_namespaces; ?>>
<head profile="<?php print $grddl_profile; ?>">
<?php print $head; ?>
<title><?php print $head_title; ?></title>
<?php print $styles; ?>
<?php print $scripts; ?>
</head>
<body class="<?php print $classes; ?>" <?php print $attributes;?>>
<div id="skip-link">
<a href="#main-content" class="element-invisible element-focusable"><?php print t('Skip to main content'); ?></a>
</div>
<?php print $page_top; ?>
<?php print $page; ?>
<?php print $page_bottom; ?>
</body>
</html>
Как видите, он содержит только HTML-теги, которые обертывают содержимое страницы, доступное в $page
. При этом вы можете изменить содержимое <head>
тега, заголовок страницы (который идет в <title>
теге <head>
тега), стили CSS и файлы JavaScript, добавленные на страницу, классы и атрибуты <body>
тега.
С помощью файла шаблона page.tpl.php вы можете изменить больше отображаемой страницы, включая имя сайта, слоган сайта, заголовок страницы и каналы, связанные с этой страницей. Для большинства из них есть специальная функция / ловушка Drupal, которую вы должны использовать вместо этого.
hook_preprocess_HOOK
это общее имя хука, используемое для всех хуков препроцесса, таким же образом hook_form_FORM_ID_alter()
является имя хука, используемое для класса хуков изменения.