自定义主题功能没有被调用?


8

我正在构建一个Drupal 7模块来创建一个定制字段类型。我已经实现了所有必需的钩子。我的hook_field_formatter_view()函数如下所示:

function MYMODULE_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $element = array();

  switch ($display['type']) {
    case 'default':
      foreach ($items as $delta => $item) {
                $element[$delta] = array(
                  '#theme' => 'test',
                  '#item' => $item,
                );
      }
      break;
  }

  return $element;  
}

然后,我定义了theme()以下函数:

function theme_test($variables) {
    return '<h1>Hello World</h1>';
}

但是,当我查看页面时,什么也不会输出。如果查看最近的日志条目,则会看到以下消息:

Theme key 'test' not found.

如果我将MYMODULE_field_formatter_view渲染数组'#theme'的值更改为内置的主题功能,例如'item_list',则它可以工作。但是由于某种原因,我的自定义主题功能没有被使用。

我已经重建了主题注册表数百次,并清除了缓存。

Answers:



10

您需要在中定义主题功能hook_theme,然后清除缓存。

 function MYMODULE_theme() {
   return array(
     'test' => array (
       'render element' => 'element',
     ),
   );
 }

2

我面临着同样的问题,即即使自定义主题函数已注册,也从未在模板中调用它。当我切换到另一个主题时,它起作用了。

我的解决方案是将主题重命名为“ something_theme”,因为我犯了一个愚蠢的错误,并且已经有了名为“ something”的模块。

模块和主题永远不能使用相同的名称,因为它会导致冲突,从而导致意外行为和钩子覆盖。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.