División de campos de contenido en diferentes regiones.

11

Mi situación es la siguiente: tengo un seminario de tipo de contenido, con campos A, B y C. Tengo regiones de encabezado, pie de página, contenido y barra lateral izquierda. Hay algunos campos en el Seminario que deseo que se muestren en la región Contenido, pero también en la región Barra lateral izquierda.

¿Cómo voy a hacer esto? Disculpas si esto ya ha sido respondido antes. Soy desarrollador y no dudo en sumergirme en las funciones de gancho y preprocesador. Tengo instalado el módulo Vistas, pero nunca lo he usado (este es mi primer sitio de Drupal, si no puede decir: P).

Salud.

EDITAR: Esto es para Drupal 7 .

Lester Peabody
fuente
¿Qué versión de Drupal?
keva
Lo siento, esto es para Drupal 7. He agregado esa información a mi pregunta original.
Lester Peabody
Aceptaré una respuesta tan pronto como llegue a abordar el problema. Actualmente estoy descubriendo cómo configurar mis sugerencias para mostrar el contenido de manera apropiada ...
Lester Peabody

Respuestas:

11

No es una forma fácil de agregar el contenido de un nodo a diferentes regiones de la página. Hay múltiples formas de abordar este problema.

Modo sin codificación: vistas y bloques

Crea una vista

  • Tipo: Bloque
  • Filtro contextual: Contenido: Nid
    • valor predeterminado: tomar de la página actual
  • Campos: lo que quieras
  • Filtrar:
    • Tipo de contenido: Seminario

(más cualquier configuración adicional que desee)

Luego vaya a la página de bloqueo del administrador Mueva el bloque de vista recién creado a la región que desea que se muestre. Solo debe mostrarse en las páginas del nodo del seminario.

Repita para todas las regiones.

Forma de codificación con theme_preprocess_region ():

el código se vería así

MYTHEME_preprocess_region(&$variables) {
  if (isset($node) && ($node->type == 'seminar' )) {
     //add new variable here.     
  }
}

Esto es solo para Drupal 7. Ahora está disponible en su region.tpl.php.

iStryker
fuente
1
El enfoque de vistas / bloque es en realidad el que prefiero, pero sugirió Display Suite ya que a algunos les resulta más accesible.
jhedstrom
Las vistas funcionan muy bien para esto, como estoy descubriendo. Las vistas son fantásticas en general. También utilizo el módulo Bloque de menú para dividir mis menús en función de dónde me encuentre en el sitio (déjenme dividir el menú principal para que siempre se muestre y los submenús según el menú en el que me encuentre en el menú principal). Módulo totalmente impresionante, muy recomendable.
Lester Peabody
Es una locura que pregunté esto casi un mes, acepté la respuesta, pero ahora estoy llegando a la aplicación de esta respuesta (aunque he usado Views un montón desde entonces). ¿Podría aclarar un poco su uso de Views para Drupal 7? Parece que Argument: nid no existe en Views 3 para Drupal 7. Gracias.
Lester Peabody
Me lo imaginé. La noción de Argumento ha sido reemplazada por Filtros contextuales en Avanzado.
Lester Peabody
D7, Contextual Fitler: Contenido: NID. Editar: ver si lo encontró, antes de que pudiera responder
iStryker
7

El módulo Display Suite le permite hacer esto. Deberá habilitar el módulo Extras de Display Suite para exponer regiones temáticas como destinos para componentes de nodo. Puede encontrar información sobre cómo hacerlo en los campos Agregar a una página de bloqueo de la documentación de Display Suite

jhedstrom
fuente
5

He tenido el mismo problema La solución es bastante fácil. Puede basar el hecho de que en Drupal 7 podemos definir nuestro propio view_mode, no solo FULL y TEASER (como sabemos por las versiones más antiguas). Entonces, defina otro view_mode para usar en su región: por ejemplo, LEFTHAND. Drupal muestra FULL view_mode en la región de contenido. Entonces, debe decirle a Drupal que muestre LEFTHAND en la región Sidebar Left.

  1. En template_preprocess_page ()

    if ($vars['node']) {
    $vars['page']['sidebar_left'][] = node_view($vars['node'], 'lefthand');
    }

  2. En node.tpl.php agregue una nueva pantalla para el modo de vista izquierda

    if ($view_mode == 'lefthand') {
    // render content fields here
    }

Patrik Lucan
fuente
1
Esta respuesta es súper ultra inteligente y no requiere ningún módulo externo, aparte de definir los modos de vista. Una alternativa simple a Display Suite es los modos de vista de entidad: drupal.org/project/entity_view_mode
paul-m
Realmente me gustó esto. Envuélvala en una función if para que solo aparezca en ciertas páginas. Solía if (array_key_exists('block_14',$vars['page']['main_content'])){}hacer que solo apareciera en páginas con un bloque específico.
Dominic Woodman
3

Si Display Suite parece demasiado para sus necesidades (es un gran módulo, pero podría ser excesivo si solo necesita reubicar algunos campos), hay un módulo solo para este propósito -> Bloques CCK .

Sé que se llama bloques 'CCK', pero funciona con Drupal 7 (que trajo la funcionalidad de CCK al núcleo).

Oportunidad G
fuente
1

Un ligero cambio en la respuesta de @Patrik Lucan if ($vars['node'])me estaba causando problemas en páginas que no eran nodos, por ejemplo, portada personalizada con bloque o página de vistas.

Cambiado a:

if (array_key_exists('node', $vars))

Lo que parece haber resuelto el problema.

Dominic Woodman
fuente
0

Mientras tanto hay un módulo para esto. Desde la página del módulo:

Field as Block proporciona una manera fácil de mostrar uno o más campos del nodo actual en un bloque.

Este módulo pretende ser una alternativa ligera a módulos como Panels y Display Suite, o usar Vistas para definir un bloque que solo recupera un campo.

phils
fuente