Benutzerdefinierte Themenfunktion wird nicht aufgerufen?


8

Ich baue ein Drupal 7-Modul, um einen maßgeschneiderten Feldtyp zu erstellen. Ich habe alle erforderlichen Hooks implementiert. Meine hook_field_formatter_view()Funktion sieht so aus:

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

Ich habe dann die folgende theme()Funktion definiert :

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

Aber wenn ich die Seite betrachte, wird nichts ausgegeben. Wenn ich mir die letzten Protokolleinträge ansehe, wird folgende Meldung angezeigt:

Theme key 'test' not found.

Wenn ich meinen Wert für das Rendering-Array '#theme' von MYMODULE_field_formatter_view in eine integrierte Designfunktion wie 'item_list' ändere, funktioniert dies. Aber aus irgendeinem Grund wird meine benutzerdefinierte Themenfunktion nicht übernommen.

Ich habe die Themenregistrierung hunderte Male neu erstellt und die Caches geleert.

Antworten:



10

Sie müssen die Themenfunktion in definieren hook_themeund dann den Cache leeren.

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

2

Ich hatte das gleiche Problem, bei dem meine benutzerdefinierte Designfunktion in meiner Vorlage nie aufgerufen wurde, obwohl sie registriert war. Als ich zu einem anderen Thema wechselte, funktionierte es.

Meine Lösung bestand darin, das Thema in "Something_theme" umzubenennen, weil ich einen dummen Fehler gemacht hatte und bereits ein Modul mit dem Namen "Something" hatte.

Modul und Thema sollten niemals denselben Namen haben , da dies zu einer Kollision führt, die zu unerwartetem Verhalten und Überschreiben von Hooks führt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.