私はカスタムテーマを使用していますが、管理テーマとしてSevenを使用しています。
テーマ関数 'theme_node_preview
'をオーバーライドするにはどうすればよいですか?
theme_node_preview
がノードフォームで呼び出され、オーバーレイで表示されていることに注意してください。したがって、それは管理テーマの一部です。
phptemplate_
接頭辞を使用しようとしましたが、このテーマ関数をオーバーライドする方法は、Drupal 7。seven_node_preview
からtemplate.tpl.php
を試しましたが、うまくいきませんでした。私は、Sevenのサブテーマを作成したくないことを明確に述べたと思いますが、Sevenのコアテーマをハッキングするか、テーマレジストリをいじるのではなく(これについては、より良い判断に対して以下で説明します)、これが最も簡単な方法です。あなたがしようとしている。これを行うためのオーバーヘッドの量は信じられないほど小さく、必要なファイルは3つだけです。 「mytheme」のような名前のフォルダを作成し、次のコードを含む「mytheme.info」ファイルに加えて、空の「mytheme.css」ファイルを追加するだけです。
name = My Theme
description = Custom subtheme of Seven.
core = 7.x
base theme = seven
stylesheets[all][] = mytheme.css
次に、template.phpファイルを追加し、以下のようなテーマフックをオーバーライドします。
function mytheme_node_preview($variables) {
// Do custom stuff here.
}
すべて完了。これは、テーマフックのオーバーライドを行う「Drupal方法」です。
繰り返しになりますが、以下のコードを投稿することは私のより良い判断に反します。絶対にサブテーマを作成しないことに専念している場合は、hook_theme_registry_alter()を実装できます。このソリューションはハックであり、フックは純粋に悪であることを私は言及しましたか? :-)「mymodule」という名前のカスタムモジュールで、次の操作を行います。
function mymodule_theme_registry_alter(&$registry) {
$path = drupal_get_path('module', 'mymodule');
$registry['node_preview']['file'] = 'mymodule.module';
$registry['node_preview']['theme path'] = $path;
$registry['node_preview']['function'] = 'mymodule_node_preview';
$registry['node_preview']['includes'] = array(
$path . '/mymodule.module'
);
}
function mymodule_node_preview($variables) {
// Do whatever you need to do here.
}
上記のスニペットは自己責任で使用してください。