3

我正在尝试获取一个非常简单的模块来使用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") 语句,它正在被执行,但是我的模板根本没有被调用,永远。该模板仅包含一些调试文本,因此我可以看到它正在工作,但在模块的任何视图中均不可见。

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

4

3 回答 3

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'
    ), 
  );  
}
于 2011-10-28T09:51:09.913 回答
1

我遇到了和你一样的问题,我通过清除缓存解决了这个问题,我从数据库中搜索,在表缓存的 cid 列中,我得到了类似“theme_registry:*”的内容,我删除了它们,它可以工作。

于 2014-02-24T03:24:53.003 回答
0

正如上面评论中提到的,我遇到了同样的问题。在开发模块中一切正常,但是当我简单地将这个模块复制到一个将成为我的生产模块的新模块中时,模板文件不再工作。我没有运气就尝试了上面提到的一切。原来的模块被禁用了,只有新的模块被启用了。

我什至回去看看原始模块的主题是否可以工作,但事实并非如此。嗯。

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

因此,似乎任何注册主题名称的模块——即使它被禁用——仍然注册一个主题,而且主题名称似乎需要在整个系统中是唯一的。

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

于 2012-07-15T03:50:00.230 回答