hook_preprocess_page
とき前処理フックが呼び出されたpage.tpl.phpのテンプレートファイルが使用されている、とhook_preprocess_html
するとき前処理フックが呼び出されるhtml.tpl.phpのテンプレートファイルが使用されています。
system_element_info()theme('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テンプレートファイルを使用すると、サイト名、サイトスローガン、ページタイトル、ページに関連付けられたフィードなど、レンダリングされるページをさらに変更できます。ほとんどの場合、代わりに使用する必要がある特定のDrupal関数/フックがあります。
hook_preprocess_HOOK
は、すべての前処理フックに使用される汎用フック名です。同様にhook_form_FORM_ID_alter()
、変更フックのクラスに使用されるフック名です。