it-swarm-eu.dev

Vlastní funkce motivu není volána?

Vytvářím modul Drupal 7 pro vytvoření typu pole na míru. Implementoval jsem všechny požadované háčky. Moje funkce hook_field_formatter_view() vypadá takto:

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

Poté jsem definoval funkci theme() níže:

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

Ale když vidím stránku, nic není na výstupu. Když se podívám na poslední položky protokolu, zobrazí se tato zpráva:

Theme key 'test' not found.

Pokud změním svou hodnotu renderovacího pole MYMODULE_field_formatter_view pole '#theme' na zabudovanou funkci motivu, jako je 'item_list', bude to fungovat. Ale z nějakého důvodu moje vlastní funkce motivu není zachycena.

Přestavěl jsem tematický registr stokrát a vyčistil jsem mezipaměti.

8
Camsoft

Pravděpodobně jste v hook_theme() nedefinovali svůj motivový háček.

V části Používání tematické vrstvy v příručce Development se o tom podrobně diskutuje.

12
Damien Tournoud

Funkci motivu musíte definovat v hook_theme a pak vyčistěte mezipaměť.

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

Čelil jsem stejnému problému, kdy moje vlastní funkce motivu nebyla v mé šabloně nikdy vyvolána, přestože byla zaregistrována. Když jsem přešel na jiné téma, fungovalo to.

Mým řešením bylo přejmenovat téma na 'něco_theme', protože jsem udělal hloupou chybu a modul jsem již pojmenoval 'něco'.

Modul a téma by nikdy neměly mít stejný název, protože to vede ke kolizi, která způsobuje neočekávané chování a potlačení háčku.

2
bpile