web-dev-qa-db-ja.com

theme_node_previewをオーバーライドする

私はカスタムテーマを使用していますが、管理テーマとしてSevenを使用しています。

テーマ関数 'theme_node_preview'をオーバーライドするにはどうすればよいですか?

theme_node_previewがノードフォームで呼び出され、オーバーレイで表示されていることに注意してください。したがって、それは管理テーマの一部です。

  • 汎用のphptemplate_接頭辞を使用しようとしましたが、このテーマ関数をオーバーライドする方法は、Drupal 7。
  • モジュールとカスタムテーマのseven_node_previewからtemplate.tpl.phpを試しましたが、うまくいきませんでした。
  • これだけのためにセブンのサブテーマを作りたくありません。
6
corbacho

私は、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.
}

上記のスニペットは自己責任で使用してください。

5
Chris Pliakas