¿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.

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.


¡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',
     ),
   );
 }

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.