我正在使用hook_preprocess_node()构建模块 我使用hook_entity_info_alter()
为名为'vacancy_teaser'的节点实体创建了一个新的视图模式这显示在我的节点显示设置和视图
中因此,当使用此视图模式时,我想使用模块中包含的模板。
我的代码:
/**
* Implements hook_preprocess_node().
*/
function vacancies_preprocess_node(&$vars) {
if($vars['view_mode'] == 'vacancy_teaser') {
$vars['theme_hook_suggestions'][] = 'node_vacancy_teaser';
}
}
我的模板文件名为:'node-vacancy-teaser.tpl.php',但未在我的视图输出中使用
视图中为$vars['view_mode'] == 'vacancy_teaser'
。 (已测试)
但是$vars['theme_hook_suggestions'][] = 'node_vacancy_teaser';
在哪里寻找模板文件?不知怎的,它没有被包含/使用。
答案 0 :(得分:7)
确保在hook_theme实现中指定模板文件。 examples project非常适合查找如何执行此类操作的详细信息。具体来说,请查看theming_example_theme() function ...
中的theming_example modulefunction theming_example_theme() {
return array(
// …
'theming_example_text_form' => array(
'render element' => 'form',
// In this one the rendering will be done by a tpl.php file instead of
// being rendered by a function, so we specify a template.
'template' => 'theming-example-text-form',
),
);
}
答案 1 :(得分:0)
不要追加到$vars['theme_hook_suggestions']
数组的末尾,而是尝试:
array_unshift($vars['theme_hook_suggestions'], 'node_vacancy_teaser');
这会将你的建议传递到数组的前面,它将首先被找到。很可能因为你将它附加到数组的末尾,Drupal首先找到一个现有的主题建议并改为使用它(例如node.tpl.php)。