Warum gibt es stattdessen die Präfixe "template_" und "theme_"?

7

Was ist der Unterschied zwischen diesen in Funktionsnamen? Ich kann jeden in template.php überschreiben, also?

erachten
quelle
Du hast ein bisschen davon verpasst ... es ist template_process_/ template_preprocess_. Das ist der Unterschied - eine ist eine Themenfunktion, eine ist eine Prozess- / Vorverarbeitungsfunktion für das Thema
Clive
Also haben sie das Wort "Vorlage" anstelle von "Thema" verwendet, um Namenskonflikte zu vermeiden?
halten
1
Ich bin mir nicht sicher, das ist eine gute Frage! Ich kann die Motivation für die Benennung dieser Funktionen nicht kommentieren (sie gehen einige Drupal-Versionen vor meiner Zeit mit dem CMS zurück), aber ich denke, es ist ein Rückschritt von Drupal 5/6 php_template-Konventionen oder ähnlichem. Ich habe nie gefragt, warum sie es getan haben, habe nur gelernt, welches wann und wo verwendet werden soll :)
Clive
Was es etwas verwirrender macht, ist, dass Sie für jedes Modul, das Sie schreiben, MYMODULE_anstelle template_oder theme_in einem benutzerdefinierten Modul verwenden können. Im Wesentlichen können Sie beide wie hook_in einem Modul behandeln. Das habe ich nicht gut im Griff. Ich denke, ich muss die Antwort von @ kiamlaluno noch ein oder zwei Mal lesen. Interessante Frage.
CDMO

Antworten:

3

Die Funktionen, deren Name mit theme_ beginnt, sind Theme-Hooks, während die Funktionen, deren Name mit template_ beginnt, Vorverarbeitungs- und Prozessfunktionen sind, die von dem Modul implementiert werden, das den relativen Theme-Hook implementiert.

Zum Beispiel ist theme_image () ein Theme-Hook, der ein Bild rendert. template_preprocess_node () ist die vom Node-Modul implementierte Vorverarbeitungsfunktion, die das Modul implementiert, das den Node- Theme-Hook implementiert . (Siehe die ersten Codezeilen von node_theme () , die vom Node-Modul durchgeführte Implementierung von hook_theme () .) Es gibt andere Module, die eine Vorverarbeitungsfunktion für den Knoten- Theme- Hook implementieren können , aber für diese Module wird diese Vorverarbeitungsfunktion benannt MYMODULE_preprocess_node(). nicht template_preprocess_node().

Ein Thema kann sowohl einen Themen-Hook (siehe bartik_menu_tree () ) als auch eine Vorverarbeitungsfunktion (siehe bartik_preprocess_node () ) implementieren . Der Unterschied besteht darin, dass bartik_menu_tree()die Standardimplementierung ( theme_menu_tree () ) bartik_preprocess_node()überschrieben wird template_preprocess_node(), wenn das aktuelle Thema das Bartik-Thema ist, während es nicht überschreibt , sondern danach ausgeführt wird. (Siehe Dokumentation zu Thema () .)

Bei der Verwendung von zwei Präfixen besteht der Grund darin, den Zweck der Funktion zu dokumentieren. Selbst wenn theme_ in beiden Fällen verwendet würde, wäre der Unterschied zwischen theme_image()und theme_preprocess_node()immer noch klar, aber Sie müssten das folgende Thema_ lesen. Bei der aktuellen Implementierung lesen Sie nur das erste Wort des Funktionsnamens.

kiamlaluno
quelle