A função de tema personalizado não está sendo chamada?

8

Estou construindo um módulo Drupal 7 para criar um tipo de campo sob medida. Eu implementei todos os ganchos necessários. Minha hook_field_formatter_view()função é assim:

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;  
}

Eu defini a theme()função abaixo:

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

Mas quando visualizo a página, nada é produzido. Se eu olhar as entradas de log recentes, vejo esta mensagem:

Theme key 'test' not found.

Se eu alterar meu valor MYMODULE_field_formatter_view da matriz de renderização '#theme' para uma função de tema incorporada como 'item_list', ele funcionará. Mas, por algum motivo, minha função de tema personalizado não está sendo selecionada.

Eu reconstruí o registro do tema centenas de vezes e limpei os caches.

Camsoft
fonte

Respostas:

12

Você provavelmente ainda não definiu seu tema hook_theme().

A seção Usando a camada de tema do manual Desenvolvimento tem uma discussão aprofundada sobre isso.

Damien Tournoud
fonte
Bem, eu continuo sendo pego por essas pequenas mudanças do Drupal 6 para o Drupal 7!
Camsoft
4
Funções temáticos deve ser registrado também no Drupal 6.
Berdir
10

Você precisa definir a função de tema hook_themee limpar o cache.

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

Eu estava enfrentando o mesmo problema em que minha função de tema personalizado nunca era chamada no meu modelo, mesmo que estivesse registrada. Quando mudei para outro tema, funcionou.

Minha solução foi renomear o tema para 'something_theme', porque cometi um erro estúpido e já tinha o módulo chamado 'something'.

O módulo e o tema nunca devem ter o mesmo nome , pois levam à colisão que causa comportamento inesperado e anulação do gancho.

bpile
fonte