La funzione del tema personalizzato non viene chiamata?


8

Sto costruendo un modulo Drupal 7 per creare un tipo di campo su misura. Ho implementato tutti gli hook richiesti. La mia hook_field_formatter_view()funzione è simile a questa:

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

Ho quindi definito la theme()funzione di seguito:

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

Ma quando visualizzo la pagina non viene emesso nulla. Se guardo le voci di registro recenti vedo questo messaggio:

Theme key 'test' not found.

Se cambio il mio valore MYMODULE_field_formatter_view render l'array '#theme' in una funzione tema incorporata come 'item_list', funziona. Ma per qualche motivo la mia funzione di tema personalizzato non viene rilevata.

Ho ricostruito il registro dei temi centinaia di volte e ho cancellato le cache.

Risposte:


12

Probabilmente non hai definito il tuo tema agganciato hook_theme().

La sezione Utilizzo del tema del manuale Sviluppo ha una discussione approfondita al riguardo.


A posto, continuo a essere sorpreso da questi piccoli cambiamenti da Drupal 6 a Drupal 7!
Camsoft,

4
Anche le funzioni del tema devono essere registrate in Drupal 6.
Berdir,

10

È necessario definire la funzione tema hook_themee quindi cancellare la cache.

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

2

Stavo affrontando lo stesso problema in cui la mia funzione tema personalizzata non era mai stata chiamata nel mio modello, anche se era registrata. Quando sono passato a un altro tema, ha funzionato.

La mia soluzione è stata quella di rinominare il tema in "qualcosa", perché ho fatto uno stupido errore e avevo già un modulo chiamato "qualcosa".

Modulo e tema non dovrebbero mai avere lo stesso nome , perché portano a una collisione che provoca comportamenti imprevisti e l'override del hook.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.