Je construis un module Drupal 7 pour créer un type de champ sur mesure. J'ai implémenté tous les hooks requis. Ma fonction hook_field_formatter_view()
ressemble à ceci:
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;
}
J'ai ensuite défini la fonction theme()
ci-dessous:
function theme_test($variables) {
return '<h1>Hello World</h1>';
}
Mais quand je regarde la page, rien n'est sorti. Si je regarde les entrées récentes du journal, je vois ce message:
Theme key 'test' not found.
Si je change ma valeur '#theme' du tableau de rendu MYMODULE_field_formatter_view en une fonction de thème intégrée comme 'item_list' cela fonctionne. Mais pour une raison quelconque, ma fonction de thème personnalisé n'est pas récupérée.
J'ai reconstruit le registre de thèmes des centaines de fois et effacé les caches.
Vous n'avez probablement pas défini votre hook de thème dans hook_theme()
.
La section tilisation de la couche de thème du manuel de développement a une discussion approfondie à ce sujet.
Vous devez définir la fonction de thème dans hook_theme
puis vider le cache.
function MYMODULE_theme() {
return array(
'test' => array (
'render element' => 'element',
),
);
}
J'étais confronté au même problème où ma fonction de thème personnalisé n'était jamais appelée dans mon modèle, même si elle était enregistrée. Lorsque je suis passé à un autre thème, cela a fonctionné.
Ma solution consistait à renommer le thème en "quelque chose_de_thème", car j'ai fait une erreur stupide et j'avais déjà un module nommé "quelque chose".
Le module et le thème ne doivent jamais avoir le même nom, car cela conduit à une collision qui provoque un comportement inattendu et une substitution de hook.