特定の表示モードのテンプレートを提供する方法は?


46

テンプレートで検索結果表示モードをテーマにしたい。

テンプレートファイルノードに名前を付けると、article--search-result.tpl.phpでうまくいくと思いましたが、明らかに間違っています。

node--article.tpl.phpおよびこのチェック$ view_mode内で実行できることを認識していますが、これはテンプレートにしたくない他のすべてのビューモードでは扱いにくいです。

アイデア?

回答:


45

ノードのプリプロセス関数にテーマフックの提案を追加すると、次のトリックが実行されます。

function MYMODULE_preprocess_node(&$vars) {
  if ($vars['node']->type == 'article' && $vars['view_mode'] == 'search_result') {
    $vars['theme_hook_suggestions'][] = 'node__article__search_result';
  }
}

キャッシュをクリアすると、node--article--search-result.tpl.phpをテンプレートファイル名に使用できるようになります。

NB。MYTHEME_preprocess_node()代わりに関数を呼び出すことで、テーマのtemplate.phpファイルでこれを行うこともできます。


2
ブリリアント!ありがとうございました。ただ、ここで同じアドバイスへのリンクを追加しようとしていました:mearra.com/blogs/juha-niemi/drupal-7-custom-node-view-modes
artfulrobot

1
問題ありません:)参考までにsearch_result、ビューモードとして既に宣言されているのでhook_entity_info_alter()、あなたのケースに実装する必要はありません
Clive

3

エンティティの表示モードのモジュールは自動的にこれらのテンプレートの提案を追加します

管理者がエンティティのカスタムビューモードを定義できるビルドモードの後継のDrupal 7 。カスタムエンティティはhook_entity_info_alter()を介してエンティティレジストリに追加されるため、entity_get_info()を使用してエンティティのビューモードのリストを提供するコードで使用できます。これには、ノードおよびユーザー参照フィールド、ビューなどが含まれます。


2

以下は、新しいものを動的に追加できる関数です。また、宣言されている場合は、対応する前処理関数を呼び出します。

次に、呼び出しdrush cache-clear theme-registryて動作させます。

これを使用するには、テーマをテーマの名前に置き換えて、テーマのtemplate.phpファイルに配置します。

例えば、ドロイドという名前のテーマの場合、それを呼び出すとdroid_preprocess_node(&$variables, $hook) {...

function THEME_preprocess_node(&$variables, $hook) {
  $view_mode = $variables['view_mode'];
  $content_type = $variables['type'];
  $variables['theme_hook_suggestions'][] = 'node__' . $view_mode;
  $variables['theme_hook_suggestions'][] = 'node__' . $view_mode . '_' . $content_type;

  $view_mode_preprocess = 'THEME_preprocess_node_' . $view_mode . '_' . $content_type;
  if (function_exists($view_mode_preprocess)) {
    $view_mode_preprocess($variables, $hook);
  }

  $view_mode_preprocess = 'THEME_preprocess_node_' . $view_mode;
  if (function_exists($view_mode_preprocess)) {
    $view_mode_preprocess($variables, $hook);
  }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.