Wie kann ich eine Vorlage für einen bestimmten Ansichtsmodus bereitstellen?

46

Ich möchte den Anzeigemodus für Suchergebnisse mit einer Vorlage versehen.

Ich hatte es im Kopf, dass die Benennung einer Template-Datei node-article-search-result.tpl.php den Trick machen würde, aber ich liege offensichtlich falsch.

Mir ist klar, dass ich node-article.tpl.php ausführen kann, und dass $ view_mode aktiviert ist, aber dies ist mit allen anderen Ansichtsmodi, die ich nicht als Vorlage verwenden möchte, umständlich.

Ideen?

Kunstvollroboter
quelle

Antworten:

45

Das Hinzufügen von Themen-Hook-Vorschlägen in einer Knoten-Vorverarbeitungsfunktion sollte den Trick ausführen:

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

Nachdem Sie die Caches geleert haben, sollten Sie in der Lage sein, node-article-search-result.tpl.php für den Namen Ihrer Vorlagendatei zu verwenden.

NB. Sie können dies auch in der template.php-Datei Ihres Themas tun, indem Sie MYTHEME_preprocess_node()stattdessen die Funktion aufrufen .

Clive
quelle
2
Brillant! Danke. War gerade dabei, einen Link zu demselben Hinweis hinzuzufügen: mearra.com/blogs/juha-niemi/drupal-7-custom-node-view-modes
artfulrobot
1
Kein Problem :) Nur search_resultzu hook_entity_info_alter()Ihrer Information, ist bereits als Anzeigemodus deklariert, sodass Sie ihn in Ihrem Fall nicht implementieren müssen
Clive
3

Das Modul Entitätsansichtsmodi fügt diese Vorlagenvorschläge automatisch hinzu

Der Drupal 7-Nachfolger der Erstellungsmodi, mit dem Administratoren benutzerdefinierte Ansichtsmodi für Entitäten definieren können. Benutzerdefinierte Entitäten werden der Entitätsregistrierung über hook_entity_info_alter () hinzugefügt, sodass sie für jeden Code verfügbar sind, der entity_get_info () verwendet, um eine Liste der Ansichtsmodi für eine Entität bereitzustellen. Dies umfasst Knoten- und Benutzerreferenzfelder, Ansichten usw.

Bas
quelle
2

Hier ist eine Funktion, mit der Sie dynamisch neue hinzufügen können. Es ruft auch die entsprechende Vorverarbeitungsfunktion auf, wenn Sie eine deklariert haben.

Dann rufen Sie drush cache-clear theme-registryan, damit es funktioniert.

Um es zu verwenden, ersetzen Sie THEMA durch den Namen Ihres Themes und platzieren Sie es in Ihrer theme-template.php-Datei.

zB für ein Thema namens Droid würde man es nennen 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
quelle