¿Cuál es la sugerencia de plantilla para el modo de vista 'teaser' de nodo?

37

nodo - [type | nodeid] .tpl.php apunta al modo de vista predeterminado del nodo. Sin embargo, quiero anular la plantilla para el modo de vista teaser.

¿Cuál es la sugerencia de plantilla (archivo .tpl.php) para el modo de vista 'teaser'?

gilzero
fuente

Respuestas:

57

No creo que haya uno por defecto, pero puede agregar fácilmente uno en su archivo template.php:

function MYTHEME_preprocess_node(&$vars) {
  if($vars['view_mode'] == 'teaser') {
    $vars['theme_hook_suggestions'][] = 'node__' . $vars['node']->type . '__teaser';   
    $vars['theme_hook_suggestions'][] = 'node__' . $vars['node']->nid . '__teaser';
  }
}

Eso te permitirá usar un archivo de plantilla como: node--[type|nodeid]--teaser.tpl.php

Clive
fuente
3
También podría simplemente extraer las variables directamente de la matriz en lugar de hacer referencia al objeto del nodo también ...
shaneonabike
1

Hay una manera más fácil de hacerlo, a través del módulo de modos de vista Entidad.

https://www.drupal.org/project/entity_view_mode

The Drupal 7 successor to Build modes which will allow administrators to 
define custom view modes for entities. Custom entities are added to the 
entity registry via hook_entity_info_alter() so they are available to any code
that uses entity_get_info() to provide a list of view modes for an entity. 
This includes node and user reference fields, Views, etc.

It also ensures consistency for template suggestions for all entity types, 
so that you can use any of the template patterns, in order of most specific 
to least specific:

entity-type__id__view-mode
entity-type__id
entity-type__bundle__view-mode
entity-type__bundle
entity-type
fnandogp
fuente
1

La sugerencia de plantilla para un modo de vista "teaser" es:

node--[type]--teaser.tpl.php

De manera predeterminada, el modo de vista "avance" utiliza la node.tpl.phpplantilla normal , por lo que puede copiar ese archivo para comenzar.

Puede ver todas las sugerencias de plantillas activando el theme_debugmodo, https://www.drupal.org/node/223440#theme-debug

Cuando veas el código fuente: en la página deberías ver comentarios HTML que muestran la lista completa de sugerencias de plantillas que Drupal consideró.

zapo
fuente
0

La solución de Clive es correcta. Pero si desea que las nuevas sugerencias se evalúen después de las sugerencias predeterminadas, debe agregarlas en las últimas posiciones de la matriz:

function MYTHEME_preprocess_node(&$vars) {
  if($vars['view_mode'] == 'teaser') {
    array_unshift($vars['theme_hook_suggestions'], 'node__' . $vars['node']->type . '__teaser');
    array_unshift($vars['theme_hook_suggestions'], 'node__' . $vars['node']->nid . '__teaser');
  }
}

De esta manera, evita que su nodo teaser coincida (y use, si existe) nodo - [tipo] .tpl.php antes del nodo - [tipo] - teaser.tpl.php

giucas
fuente