¿No se llama a la función de tema personalizado?

8

Estoy creando un módulo Drupal 7 para crear un tipo de campo a medida. He implementado todos los ganchos necesarios. Mi hook_field_formatter_view()función se ve así:

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

Luego he definido la theme()función a continuación:

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

Pero cuando veo la página no sale nada. Si miro las entradas de registro recientes, veo este mensaje:

Theme key 'test' not found.

Si cambio mi valor de MYMODULE_field_formatter_view render array '#theme' a una función de tema integrada como 'item_list', funciona. Pero por alguna razón, mi función de tema personalizado no se está recogiendo.

He reconstruido el registro de temas cientos de veces, así como borrado los cachés.

Camsoft
fuente

Respuestas:

12

Probablemente no hayas definido tu enlace de tema hook_theme().

La sección Uso de la capa de tema del manual de Desarrollo tiene una discusión en profundidad sobre esto.

Damien Tournoud
fuente
¡En seguida, sigo siendo atrapado por estos pequeños cambios de Drupal 6 a Drupal 7!
Camsoft
44
Las funciones del tema también deben registrarse en Drupal 6.
Berdir
10

Debe definir la función del tema hook_themey luego borrar el caché.

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

Estaba enfrentando el mismo problema en el que mi función de tema personalizado nunca se llamaba en mi plantilla, a pesar de que estaba registrada. Cuando cambié a otro tema, funcionó.

Mi solución fue renombrar el tema en 'something_theme', porque cometí un estúpido error y ya tenía un módulo llamado 'something'.

El módulo y el tema nunca deben tener el mismo nombre , ya que conduce a una colisión que causa un comportamiento inesperado y anulación del enganche.

bpile
fuente