¿Cómo proporcionar una plantilla para un modo de vista particular?

46

Quiero tema el modo de vista de resultados de búsqueda con una plantilla

Tenía en mi cabeza que nombrar un nodo de archivo de plantilla - artículo - search-result.tpl.php haría el truco, pero obviamente estoy equivocado sobre eso.

Me doy cuenta de que puedo hacer node - article.tpl.php y dentro de esta comprobación $ view_mode, pero esto es incómodo con todos los demás modos de vista que no quiero plantilla.

Ideas?

artfulrobot
fuente

Respuestas:

45

Agregar sugerencias de enlace de tema en una función de preproceso de nodo debería hacer el truco:

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

Después de borrar los cachés, debería poder usar node - article - search-result.tpl.php para el nombre del archivo de su plantilla.

NÓTESE BIEN. También puede hacer esto en el archivo template.php de su tema llamando a la función en su MYTHEME_preprocess_node()lugar.

Clive
fuente
2
¡Brillante! Gracias. Estaba a punto de agregar un enlace al mismo consejo aquí: mearra.com/blogs/juha-niemi/drupal-7-custom-node-view-modes
artfulrobot
1
No hay problema :) Solo para su información, search_resultya está declarado como un modo de vista, por lo que no necesita implementarlo hook_entity_info_alter()en su caso
Clive
3

El módulo de modos de vista de entidad agrega estas sugerencias de plantilla automáticamente

El sucesor de Drupal 7 para construir modos que permitirá a los administradores definir modos de vista personalizados para las entidades. Las entidades personalizadas se agregan al registro de entidades a través de hook_entity_info_alter () para que estén disponibles para cualquier código que use entity_get_info () para proporcionar una lista de modos de visualización para una entidad. Esto incluye campos de referencia de nodo y usuario, Vistas, etc.

Bas
fuente
2

Aquí hay una función que le permite agregar nuevas dinámicamente. También llama a la función de preproceso correspondiente si tiene una declarada.

Luego llame drush cache-clear theme-registrypara que funcione.

Para usarlo, reemplace THEME con el nombre de su tema y colóquelo en el archivo template.php de su tema.

Por ejemplo, para un tema llamado Droid lo llamarías 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
fuente