Come fornire un modello per una particolare modalità di visualizzazione?


46

Voglio creare un tema per la modalità di visualizzazione dei risultati della ricerca.

Avevo in mente che nominare un nodo di file modello - articolo - search-result.tpl.php avrebbe funzionato, ma ovviamente mi sbaglio.

Mi rendo conto di poter fare node - article.tpl.php e all'interno di questo controllo $ view_mode, ma questo è imbarazzante con tutte le altre modalità di visualizzazione che non voglio modellare.

Idee?

Risposte:


45

L'aggiunta di suggerimenti di hook del tema in una funzione di preelaborazione del nodo dovrebbe fare il trucco:

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

Dopo aver svuotato le cache dovresti essere in grado di usare il nodo - articolo - search-result.tpl.php per il nome del tuo file modello.

NB. Puoi anche farlo nel file template.php del tuo tema chiamando MYTHEME_preprocess_node()invece la funzione .


2
Brillante! Grazie. Stavo
artfulrobot

1
Nessun problema :) Solo FYI, search_resultè già stato dichiarato come modalità di visualizzazione, quindi non è necessario implementarlo hook_entity_info_alter()nel tuo caso
Clive

3

Il modulo Modalità di visualizzazione entità aggiunge automaticamente questi suggerimenti di modello

Il successore di Drupal 7 ha creato le modalità che consentiranno agli amministratori di definire modalità di visualizzazione personalizzate per le entità. Le entità personalizzate vengono aggiunte al registro delle entità tramite hook_entity_info_alter (), quindi sono disponibili per qualsiasi codice che utilizza entity_get_info () per fornire un elenco di modalità di visualizzazione per un'entità. Ciò include i campi di riferimento nodo e utente, viste, ecc.


2

Ecco una funzione che ti consente di aggiungerne di nuovi in ​​modo dinamico. Chiama anche la funzione di preelaborazione corrispondente se ne hai dichiarata una.

Quindi chiama drush cache-clear theme-registryper farlo funzionare.

Per usarlo, sostituisci THEME con il nome del tuo tema e inseriscilo nel file template.php dei temi.

ad es. per un tema chiamato Droid lo chiameresti 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);
  }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.