Je vois que hook_preprocess_page()
et hook_preprocess_html()
sont des implémentations de hook_preprocess_HOOK()
, mais je ne comprends pas quand utiliser lequel.
hook_preprocess_page
Est appelé en premier, mais cela ne m'aide pas vraiment à comprendre qui l'appelle.
En regardant la sortie debug_print_backtrace()
, elle est appelée par theme()
, mais cela ne m'amène pas vraiment à la réponse.
Est-il simplement défini par le tableau qui est passé dans drupal_render()
?
hook_preprocess_page
Est le hook de prétraitement invoqué lorsque le fichier de modèle page.tpl.php est utilisé, et hook_preprocess_html
Est le hook de prétraitement invoqué lorsque html. tpl.php le fichier modèle est utilisé.
Les deux crochets de prétraitement sont invoqués lorsqu'une page est rendue avec theme('page')
, car l'élément de page défini à partir de system_element_info () définit html comme wrapper de thème.
$types['page'] = array(
'#show_messages' => TRUE,
'#theme' => 'page',
'#theme_wrappers' => array('html'),
);
system_theme () définit alors le html comme suit.
'html' => array(
'render element' => 'page',
'template' => 'html',
),
Quant au moment d'implémenter hook_preprocess_html()
, vous l'implémentez pour modifier les variables utilisées dans le fichier html.tpl.php, qui par défaut a le contenu suivant.
<!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>
Comme vous pouvez le voir, il ne contient que les balises HTML qui enveloppent le contenu d'une page, disponibles dans $page
. Avec cela, vous pouvez changer le contenu de la balise <head>
, Le titre de la page (celui qui va dans la balise <title>
Dans la balise <head>
), Les styles CSS et les fichiers JavaScript ajoutés à une page, les classes et les attributs de la balise <body>
.
Avec le fichier de modèle page.tpl.php, vous pouvez modifier davantage la page en cours de rendu, y compris le nom du site, le slogan du site, le titre de la page et les flux associés à la page. Pour la plupart d'entre eux, il existe une fonction/hook spécifique Drupal) que vous devriez utiliser à la place.
hook_preprocess_HOOK
Est le nom générique du hook utilisé pour tous les hooks de prétraitement, de la même manière que hook_form_FORM_ID_alter()
est le nom du hook utilisé pour une classe de hooks de modification.
hook_preprocess_page
Et hook_preprocess_html
Sont des crochets de calque de thème que vous pouvez utiliser pour ajouter des variables pouvant être utilisées dans vos modèles (page.tpl.php
& html.tpl.php
).
hook_preprocess_hook
Est le grand crochet de calque de thème que cette page et ce code HTML utilisent, ainsi que ceux personnalisés que vous avez créés dans hook_theme()
.
Par exemple, voici la déclaration de hook_theme()
:
function mymodule_theme($existing, $type, $theme, $path) {
return array(
'custom_theme_function' => array(
'variables' => NULL
'template' => 'custom-theme-template', // available as custom-theme-template.tpl.php
),
);
}
et voici vos fonctions de prétraitement:
mytheme_preprocess_page(&$vars) {
$vars['variable'] = 'string'; // $variable will be available in page.tpl.php
}
mytheme_preprocess_html(&$vars) {
$vars['variable'] = 'string'; // $variable will be available in html.tpl.php
}
mytheme_preprocess_custom_theme_function(&$vars) {
$vars['variable'] = 'string'; // $variable will be available in the template you specified in mymodule_theme() (custom-theme-template.tpl.php)
}
hook_preprocess()
vous permet également de capturer plusieurs crochets de thème et d'y ajouter des variables
mymodule_preprocess(&$vars, $hook) {
if ($hook == 'custom_theme_function') {
$vars['variable'] = 'string'; // $variable will be available in them template you specified in mymodule_theme() (custom-theme-template.tpl.php)
}
if ($hook == 'page') {
$vars['variable'] = 'string'; // $variable will be available in page.tpl.php
}
if ($hook == 'html') {
$vars['variable'] = 'string'; // $variable will be available in html.tpl.php
}
}