it-swarm.com.de

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

Ich möchte den Suchergebnisansichtsmodus mit einer Vorlage versehen.

Ich hatte es im Kopf, dass das Benennen eines Vorlagendateiknotens - article - search-result.tpl.php den Trick machen würde, aber ich liege offensichtlich falsch.

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

Ideen?

47
artfulrobot

Das Hinzufügen von Themen-Hook-Vorschlägen in einer Knotenvorverarbeitungsfunktion sollte den Trick tun:

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

Nach dem Löschen der Caches 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 Datei template.php Ihres Themas tun, indem Sie stattdessen die Funktion MYTHEME_preprocess_node() aufrufen.

46
Clive

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

Der Drupal 7 Nachfolger von Build-Modi , 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 Verfügbar für jeden Code, der entity_get_info () verwendet, um eine Liste der Ansichtsmodi für eine Entität bereitzustellen. Dies umfasst Knoten- und Benutzerreferenzfelder, Ansichten usw.

3
Bas

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

Rufen Sie dann drush cache-clear theme-registry Auf, damit es funktioniert.

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

z.B. Für ein Thema namens Droid würden Sie es droid_preprocess_node(&$variables, $hook) {... nennen.

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