Пользовательская функция темы не вызывается?


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.

Если я изменю значение моего #Meme массива рендеринга массива MYMODULE_field_formatter_view на встроенную функцию темы, такую ​​как item_list, это сработает. Но по какой-то причине моя пользовательская функция темы не используется.

Я перестраивал реестр тем сотни раз, а также очищал кеши.

Ответы:


12

Вы, вероятно, не определили свою тему hook_theme().

В разделе « Использование слоя темы » руководства по разработке подробно обсуждается этот вопрос.


На месте, меня продолжают ловить эти небольшие изменения с Drupal 6 на Drupal 7!
Camsoft

4
Функции тем тоже должны быть зарегистрированы в Drupal 6.
Berdir

10

Вам нужно определить функцию темы hook_themeи затем очистить кеш.

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

2

Я столкнулся с той же проблемой, когда моя пользовательская функция темы никогда не вызывалась в моем шаблоне, даже если она была зарегистрирована. Когда я переключился на другую тему, это сработало.

Моим решением было переименование темы в «thing_theme », потому что я допустил глупую ошибку и уже имел модуль с именем« что-то ».

Модуль и тема никогда не должны иметь одно и то же имя , потому что это приводит к коллизии, которая вызывает неожиданное поведение и переопределение хука.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.