テンプレートで検索結果表示モードをテーマにしたい。
テンプレートファイルノードに名前を付けると、article--search-result.tpl.phpでうまくいくと思いましたが、明らかに間違っています。
node--article.tpl.phpおよびこのチェック$ view_mode内で実行できることを認識していますが、これはテンプレートにしたくない他のすべてのビューモードでは扱いにくいです。
アイデア?
テンプレートで検索結果表示モードをテーマにしたい。
テンプレートファイルノードに名前を付けると、article--search-result.tpl.phpでうまくいくと思いましたが、明らかに間違っています。
node--article.tpl.phpおよびこのチェック$ view_mode内で実行できることを認識していますが、これはテンプレートにしたくない他のすべてのビューモードでは扱いにくいです。
アイデア?
回答:
ノードのプリプロセス関数にテーマフックの提案を追加すると、次のトリックが実行されます。
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ファイルでこれを行うこともできます。
search_result
、ビューモードとして既に宣言されているのでhook_entity_info_alter()
、あなたのケースに実装する必要はありません
エンティティの表示モードのモジュールは自動的にこれらのテンプレートの提案を追加します
管理者がエンティティのカスタムビューモードを定義できるビルドモードの後継のDrupal 7 。カスタムエンティティはhook_entity_info_alter()を介してエンティティレジストリに追加されるため、entity_get_info()を使用してエンティティのビューモードのリストを提供するコードで使用できます。これには、ノードおよびユーザー参照フィールド、ビューなどが含まれます。
以下は、新しいものを動的に追加できる関数です。また、宣言されている場合は、対応する前処理関数を呼び出します。
次に、呼び出し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);
}
}