web-dev-qa-db-fra.com

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

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

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

Je me rends compte que je peux faire node - article.tpl.php et dans cette vérification $ view_mode, mais c'est gênant avec tous les autres modes d'affichage que je ne veux pas modeler.

Des idées?

47
artfulrobot

L'ajout de suggestions de hook de thème 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 node - article - search-result.tpl.php pour le nom de votre fichier de modèle.

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

46
Clive

Le module Modes d'affichage des entités ajoute automatiquement ces suggestions de modèles

Le Drupal 7 successeur de Build modes 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 disponible pour tout code qui utilise entity_get_info () pour fournir une liste de modes d'affichage pour une entité. Cela inclut les champs de référence de nœud et d'utilisateur, les vues, etc.

3
Bas

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.

Appelez ensuite drush cache-clear theme-registry Pour le faire fonctionner.

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

par exemple. Pour un thème nommé Droid, vous l'appeleriez 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);
  }
}
2
Elijah Lynn