Drupal 7 hook_theme()没有加载模板文件

时间:2011-10-25 02:39:14

标签: drupal drupal-7 drupal-theming drupal-themes

我正在尝试使用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”)语句, 正在执行,但我的模板根本就没有被调用过。模板中只有一些调试文本,所以我可以看到它正在工作,但在模块的任何视图中都不可见。

我已经完成了我能找到的每个示例中的所有内容,我甚至直接从其他模块复制并粘贴了代码,但此模板仍然无法加载。

3 个答案:

答案 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。

当我更改主题的名称时,它突然开始工作:找到并显示模板文件。

因此,似乎任何注册主题名称的模块----即使它被禁用---仍然会注册一个主题,并且似乎主题名称在整个系统中都必须是唯一的。

答案:寻找在其他模块中声明的相同主题名称