hook_preprocess_page
是使用page.tpl.php模板文件时调用的预处理挂钩,并且hook_preprocess_html
是使用html.tpl.php模板文件时调用的预处理挂钩。
当使用呈现页面时,两个预处理钩子都被调用theme('page')
,因为从system_element_info()定义的page元素将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模板文件,您可以更改要呈现的页面的更多内容,包括网站名称,网站标语,页面标题以及与该页面关联的feed。对于其中大多数,您应该使用特定的Drupal函数/挂钩。
hook_preprocess_HOOK
是用于所有预处理挂钩的通用挂钩名称,以相同的方式hook_form_FORM_ID_alter()
用于一类变更挂钩的挂钩名称。