Comment fournir un modèle pour un mode d'affichage particulier?

46

Je souhaite thématiser le mode d'affichage des résultats de recherche avec un modèle.

Je pensais que nommer un nœud de fichier modèle - article - search-result.tpl.php ferait l'affaire, mais je me trompe évidemment à ce sujet.

Je me rends compte que je peux faire node - article.tpl.php et à l'intérieur de cette vérification $ view_mode, mais c'est gênant avec tous les autres modes d'affichage que je ne souhaite pas modéliser.

Des idées?

artfulrobot
la source

Réponses:

45

L'ajout de suggestions de points d'ancrage dans une fonction de prétraitement de nœud devrait faire l'affaire:

function MYMODULE_preprocess_node(&$vars) {
  if ($vars['node']->type == 'article' && $vars['view_mode'] == 'search_result') {
    $vars['theme_hook_suggestions'][] = 'node__article__search_result';
  }
}

Après avoir effacé les caches, vous devriez pouvoir utiliser noeud - article - search-result.tpl.php pour le nom de votre fichier modèle.

NB Vous pouvez également le faire dans le fichier template.php de votre thème en appelant la fonction à la MYTHEME_preprocess_node()place.

Clive
la source
2
Brillant! Je vous remercie. Était sur le point d'ajouter un lien à même conseil ici: mearra.com/blogs/juha-niemi/drupal-7-custom-node-view-modes
artfulrobot
1
Pas de problème :) Just FYI, search_resultest déjà déclaré comme mode d'affichage, vous n'avez donc pas besoin de l'implémenter hook_entity_info_alter()dans votre cas
Clive
3

Le module des modes de vue Entité ajoute automatiquement ces suggestions de modèles

Le Drupal 7 successeur des modes de construction qui permettra aux administrateurs de définir des modes d’affichage personnalisés pour les entités. Les entités personnalisées sont ajoutées au registre d'entités via hook_entity_info_alter () afin qu'elles soient disponibles pour tout code qui utilise entity_get_info () pour fournir une liste des modes d'affichage pour une entité. Cela inclut les champs de référence de nœud et d'utilisateur, les vues, etc.

Bas
la source
2

Voici une fonction qui vous permet d’en ajouter de nouvelles dynamiquement. Il appelle également la fonction de prétraitement correspondante si vous en avez une déclarée.

Ensuite, appelez drush cache-clear theme-registrypour le faire fonctionner.

Pour l'utiliser, remplacez THEME par le nom de votre thème et placez-le dans le fichier template.php de votre thème.

Par exemple, pour un thème nommé Droid, vous l'appelleriez droid_preprocess_node(&$variables, $hook) {...

function THEME_preprocess_node(&$variables, $hook) {
  $view_mode = $variables['view_mode'];
  $content_type = $variables['type'];
  $variables['theme_hook_suggestions'][] = 'node__' . $view_mode;
  $variables['theme_hook_suggestions'][] = 'node__' . $view_mode . '_' . $content_type;

  $view_mode_preprocess = 'THEME_preprocess_node_' . $view_mode . '_' . $content_type;
  if (function_exists($view_mode_preprocess)) {
    $view_mode_preprocess($variables, $hook);
  }

  $view_mode_preprocess = 'THEME_preprocess_node_' . $view_mode;
  if (function_exists($view_mode_preprocess)) {
    $view_mode_preprocess($variables, $hook);
  }
}
Elijah Lynn
la source