我正在尝试使用drupal的hook_theme()来获取非常简单模块来加载模板文件。它就像你想象的那么简单。
function sectionheader_theme ( $existing, $type, $theme, $path ) {
return array(
'sectionheader' => array(
'variables' => array( 'foo' => NULL ),
'template' => 'sectionheader',
),
);
}
该模板名为sectionheader.tpl.php。该模块的其余部分正在按预期工作。我已经清除了Drupal缓存。我在这个函数中插入了一个die(“Debug”)语句, 正在执行,但我的模板根本就没有被调用过。模板中只有一些调试文本,所以我可以看到它正在工作,但在模块的任何视图中都不可见。
我已经完成了我能找到的每个示例中的所有内容,我甚至直接从其他模块复制并粘贴了代码,但此模板仍然无法加载。
答案 0 :(得分:5)
注意,如果您已将模板文件放在模块目录中的/ theme子文件夹中(这是最佳做法),您还需要在hook_theme中指定文件路径
function example_theme($existing, $type, $theme, $path) {
return array(
'example_function' => array(
'variables' => array('var1' => array(), 'var2' => array(), 'var3' => array()),
'template' => 'example-template',
'path' => drupal_get_path('module', 'example').'/theme'
),
);
}
答案 1 :(得分:1)
我遇到了与你相同的问题,我通过清除缓存解决了这个问题,我从数据库中搜索了一下,在表缓存的cid列中,我得到类似“theme_registry:*”的内容,然后删除它们,它有效。
答案 2 :(得分:0)
如上面的评论所述,我遇到了同样的问题。一切都在开发模块中正常工作,但当我简单地将这个模块复制到一个新的模块中时,该模块将成为我的生产模块,模板文件不再有效。我尝试了上面提到的一切,但没有运气。原始模块已禁用,只启用了新模块。
我甚至回去看看原始模块的主题是否可行,但事实并非如此。 hmmmm。
当我更改主题的名称时,它突然开始工作:找到并显示模板文件。
因此,似乎任何注册主题名称的模块----即使它被禁用---仍然会注册一个主题,并且似乎主题名称在整个系统中都必须是唯一的。
答案:寻找在其他模块中声明的相同主题名称