Ich sehe, dass beides hook_preprocess_page()
und hook_preprocess_html()
Implementierungen von sind hook_preprocess_HOOK()
, aber ich verstehe nicht, wann ich welche verwenden soll.
hook_preprocess_page
wird zuerst angerufen, aber das hilft mir nicht wirklich zu verstehen, wer es anruft.
Wenn ich mir die debug_print_backtrace()
Ausgabe anschaue, wird sie aufgerufen theme()
, aber das bringt mich nicht wirklich zur Antwort.
Wird es einfach durch das Array definiert, an das übergeben wird drupal_render()
?
template_preprocess_page()
unterscheidet sich vonhook_preprocess_page()
und es gibt Dokumentation für hook_preprocess_HOOK , genauso wie für hook_process_HOOK .Antworten:
hook_preprocess_page
wird der Vorverarbeitungs-Hook aufgerufen, wenn die Vorlagendatei page.tpl.php verwendet wird, undhook_preprocess_html
wird der Vorverarbeitungs-Hook aufgerufen, wenn die Vorlagendatei html.tpl.php verwendet wird.Beide Preprocess-Hooks werden aufgerufen, wenn eine Seite mit gerendert wird
theme('page')
, da das von system_element_info () definierte Seitenelement html als Theme-Wrapper definiert.system_theme () definiert dann HTML wie folgt.
Wenn
hook_preprocess_html()
Sie implementieren möchten, müssen Sie es implementieren, um die in der Datei html.tpl.php verwendeten Variablen zu ändern, die standardmäßig den folgenden Inhalt hat.Wie Sie sehen, enthält es nur die HTML-Tags, die den Inhalt einer Seite umschließen, die in verfügbar sind
$page
. Damit können Sie den Inhalt des<head>
Tags, den Seitentitel (derjenige, der in das<title>
Tag im<head>
Tag eingefügt wird), die CSS-Stile und die einer Seite hinzugefügten JavaScript-Dateien, die Klassen und die Attribute für das<body>
Tag ändern.Mit der Vorlagendatei page.tpl.php können Sie einen größeren Teil der gerenderten Seite ändern, einschließlich des Site-Namens, des Site-Slogans, des Seitentitels und der mit der Seite verknüpften Feeds. Für die meisten von ihnen gibt es eine spezielle Drupal-Funktion / einen speziellen Hook, den Sie stattdessen verwenden sollten.
hook_preprocess_HOOK
ist der generische Hook-Name, der für alle Vorverarbeitungs-Hooks verwendet wird, ebenso wiehook_form_FORM_ID_alter()
der Hook-Name, der für eine Klasse von Änderungs-Hooks verwendet wird.quelle
hook_preprocess_page
undhook_preprocess_html
sind Themenebenen-Hooks, mit denen Sie Variablen hinzufügen können, die in Ihren Vorlagen (page.tpl.php
&html.tpl.php
) verwendet werden können.hook_preprocess_hook
ist der große Theme-Layer-Hook, den diese Seite und HTML verwenden, und die benutzerdefinierten, die Sie ebenfalls erstellt habenhook_theme()
.Zum Beispiel ist hier die Deklaration von
hook_theme()
:Und hier sind Ihre Vorverarbeitungsfunktionen:
Außerdem
hook_preprocess()
können Sie mehrere Themen-Hooks erfassen und Variablen hinzufügenquelle