Cómo mostrar el resumen (avance) sobre el cuerpo en una vista de contenido completo

11

Quiero mostrar un avance en la parte superior de cada artículo debajo del título, como en el siguiente diseño de "contenido completo":

  1. Título
  2. Teaser (resumen del artículo)
  3. Imagen
  4. Cuerpo

Además, el avance debe tener su propio formato (por ejemplo, cursiva y una fuente más grande)

No encontré ninguna forma de hacerlo sin editar archivos tpl o archivos centrales.

Una solución sería agregar un nuevo campo "article_teaser" a mi tipo de contenido, luego administrar la visualización para obtener mi diseño en la vista "Contenido completo". Esto funciona, pero no me gusta tener dos campos teaser en mi formulario de contenido de entrada, porque debería escribir dos veces el mismo texto.

Parece que no puedo dividir el cuerpo del campo en sus partes de "texto" y "resumen", pero solo puedo mostrar uno u otro, ¡pero no ambos!

¿Hay alguna forma (un módulo?) De hacer eso?

(Mi entorno: Drupal 7 con subtema Zen).

gingo
fuente

Respuestas:

10

Puedes hacer esto con Vistas. Cree una vista que anule las rutas para su tipo de contenido. Establezca la visualización en Campos y luego agregue el campo del cuerpo dos veces; configura la primera instancia para mostrar el avance y la segunda instancia para mostrar el cuerpo. Puede agregar las imágenes en el medio. Las vistas también le permitirán personalizar fácilmente el CSS de los campos del teaser / cuerpo (de forma predeterminada, Vistas proporciona una serie de clases, y puede agregar clases adicionales si es necesario).

Para referencia: Node One series de video screencasts sobre el uso de Vistas

Patrick Kenny
fuente
Muchas gracias. El enlace es muy útil, y estoy aprendiendo mucho sobre las vistas: obtuve una vista que hizo las cosas. Pero las vistas muestran una lista de nodos, mientras que mi tipo de contenido (una página de libro) es una sola página: ¿cómo puedo anular una sola página de libro (un nodo) con una lista de nodos (la vista que creé)? Probablemente me falte algo sobre las vistas, tal vez cómo anular la página de libro predeterminada con la suya.
gingo
@gingo Para anular todas las páginas del libro, debe configurar la ruta de visualización de una manera especial. Por ejemplo, mire la vista del término Taxonomía , que es proporcionada por Vistas de forma predeterminada (deshabilitada). El camino se establece en /taxonomy/term/%; Si edita esa vista, puede ver cómo se incorporan los argumentos (filtros contextuales) para permitirle editar la visualización de los términos de taxonomía. Puede configurar algo similar para las páginas del libro en su sitio.
Patrick Kenny
bueno, tengo que profundizar en los filtros contextuales, pero creo que estoy en el camino correcto. gracias.
gingo
3

Las vistas definitivamente pueden hacer el trabajo. Pero creo que es un poco excesivo para este requisito.

Otra forma de lograrlo es implementar hook_field_extra_fields () y hook_node_view () en su módulo personalizado.

/**
 * Implements hook_field_extra_fields().
 */
function mymodule_field_extra_fields() {
  // Put the content type you want to display summary field here.
  $content_type = 'page';

  $extra['node'][$content_type]['display']['body_summary'] = array(
    'label' => t('Body summary'),
    'description' => t('Display body summary.'),
    'weight' => 0,
  );

  return $extra;
}

/**
 * Implements hook_node_view().
 */
function mymodule_node_view($node, $view_mode, $langcode) {
  // Put the content type you want to display summary field here.
  $content_type = 'page';

  if ($node->type == $content_type) {
    $summary = field_view_field('node', $node, 'body', array(
      'type' => 'text_summary_or_trimmed',
    ));

    $node->content['body_summary'] = array(
      '#markup' => $summary,
      '#weight' => 0,  
    );
  }
}

Borre la memoria caché y puede ir al tipo de contenido "Administrar pantalla" para arrastrar y soltar para colocar el campo "resumen del cuerpo". Por ejemplo admin/structure/types/manage/page/display.

eric.chenchao
fuente
Hm, creo que esto está cerca, pero el contenido del campo no se muestra, simplemente Array.
Arjan
Hola @arjan, ¿has verificado los datos de la matriz y los has copiado aquí, por favor?
eric.chenchao
¿Cuál es el punto de crear una variable, 1 línea por encima del único lugar donde se usa, solo ponga la cadena en la declaración if?
Kiee
Hola @Kiee, tienes razón. Pero este fragmento se usa como ejemplo con comentario;)
eric.chenchao
3

en drupal 7:

En el campo Cuerpo, puede usar 'reescribir resultado' y usar en los 'patrones de reemplazo' esto:

[body-summary]

y esto mostrará el resumen completo.

javier eduardo
fuente
Eres un genio Javier, todas las demás explicaciones exageradas, ¡la tuya es la que funciona mejor con diferencia y muuuuuuuuuuuy simple!
Bruno Vincent
0

Para la redefinición del tipo de contenido, debe mirar los Paneles porque una de las funciones de los Paneles es redefinir exactamente el aspecto básico de ciertos Tipos de contenido (o información basada en otros criterios de selección) Csaba

Csaba
fuente
0

Como Arjan notó, el fragmento de Cityreader produce el resultado pero no se procesa correctamente.

Esta variación funcionó para mí:

 /**
 * Implements hook_field_extra_fields().
 */
function mymodule_field_extra_fields() {
  // Put the content type you want to display summary field here.
  $content_type = 'page';

  $extra['node'][$content_type]['display']['body_summary'] = array(
    'label' => t('Body summary'),
    'description' => t('Display body summary.'),
    'weight' => 0,
  );

  return $extra;
}

/**
 * Implements hook_node_view().
 */
function mymodule_node_view($node, $view_mode, $langcode) {
  // Put the content type you want to display summary field here.
  $content_type = 'page';

  if ($node->type == $content_type) {
    $summary = field_view_field('node', $node, 'body', array(
      'type' => 'text_summary_or_trimmed',
    ));

    $node->content['body_summary'] = array(
      '#markup' => $summary['#items'][0]['safe_summary'],
      '#weight' => 0,  
    );
  }
}
Mike Juic3
fuente
0

Si está interesado en una solución sin código utilizando el módulo Vistas y Display Suite , puede:

  1. Crear bloque de Vistas con campo de resumen en él. En la opción de filtro contextual en la configuración avanzada, puede establecer la opción "Proporcionar valor predeterminado" con el tipo Content ID de URL.

  2. En Tipos de contenido -> [su tipo de contenido] -> Administrar pantalla, seleccione la opción Campos personalizados (menú en la parte inferior) y cree un campo de bloque personalizado desde la vista que creó en el paso 1.

  3. Al guardar, el campo personalizado aparecerá en la lista de campos de tipo de nodo donde puede elegir en qué región aparecerá.

usuario1795440
fuente