it-swarm-es.com

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

Quiero crear un tema para 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 crear.

Ideas?

47
artfulrobot

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 plantilla.

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

46
Clive

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

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

3
Bas

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 a drush cache-clear theme-registry Para que funcione.

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

p.ej. 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);
  }
}
2
Elijah Lynn