代わりに「template_」と「theme_」というプレフィックスがあるのはなぜですか?


7

関数名のこれらの違いは何ですか?template.phpでそれぞれを上書きできるので?


あなたはそれを少し逃しました...それはtemplate_process_/ template_preprocess_です。それが違いです-1つはテーマ関数、もう1つはテーマのプロセス/前処理関数です
Clive

それで彼らは名前の衝突を避けるためだけに「テーマ」の代わりに「テンプレート」という言葉を使用しましたか?
2013

1
よくわかりません、いい質問ですね。これらの関数に名前を付ける動機についてコメントすることはできません(CMSを使用する前に、いくつかのDrupalバージョンに戻ります)が、これはDrupal 5/6 php_templateの規則または類似のものからの逆戻りだと思います。私は彼らがなぜそれをしたのか疑問に思ったことはありません。いつ、どこで、どれを使うべきかを学んだだけです:)
クライブ

少し紛らわしいのは、カスタムモジュールのMYMODULE_代わりに、template_またはtheme_カスタムモジュール内で、作成したモジュールを使用できることです。したがって、基本的にはこれらのいずれかをhook_モジュールのように扱うことができます。これは私が自分をしっかりと握っているものではありません。@kiamlalunoの応答をもう一度読む必要があると思います。興味深い質問です。
cdmo 2013

回答:


3

theme_で始まる名前の関数はテーマフックですが、template_で始まる名前の関数は、相対テーマフックを実装するモジュールによって実装される前処理および処理関数です。

たとえば、theme_image()は、イメージをレンダリングするテーマフックです。 template_preprocess_nodeは()モジュールが実装ノードモジュールによって実装前処理機能であるノードテーマフック。(node_theme()の最初のコード行、Nodeモジュールによって実行されるhook_theme()実装を参照してください。)ノードテーマフックの前処理関数を実装できる他のモジュールがありますが、これらのモジュールの場合、その前処理関数はMYMODULE_preprocess_node()、ないtemplate_preprocess_node()

テーマは、テーマフック(bartik_menu_tree()を参照)とプリプロセス関数(bartik_preprocess_node()を参照)の両方を実装できます。違いは、現在のテーマがBartikテーマであるbartik_menu_tree()場合、デフォルトの実装(theme_menu_tree())をbartik_preprocess_node()オーバーライドしますがtemplate_preprocess_node()、はオーバーライドしませんが、その後に実行されます。(theme()のドキュメントを参照してください。)

2つの接頭辞を使用する場合、その目的は関数の目的を文書化することです。theme_は例の両方で使用された場合であっても、違いtheme_image()とはtheme_preprocess_node()まだ明らかになり、それはあなたがtheme_を以下のものを読むために必要であろう。現在の実装では、関数名の最初の単語を読み取るだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.