Dividindo campos de conteúdo em diferentes regiões


11

Minha situação é a seguinte: Tenho um tipo de conteúdo Seminário, com os campos A, B e C. Tenho as regiões Cabeçalho, Rodapé, Conteúdo e Barra Lateral Esquerda. Existem alguns campos no Seminário que quero exibir na região Conteúdo, mas também na região Esquerda da barra lateral.

Como faço para fazer isso? Desculpas se isso já foi respondido antes. Sou desenvolvedor e não hesito em mergulhar nas funções de gancho e pré-processador. Eu tenho o módulo Views instalado, mas nunca o usei (este é o meu primeiro site Drupal, se você não souber: P).

Felicidades.

EDIT: Isto é para Drupal 7 .


Qual versão do Drupal?
Kev

Desculpe, este é o Drupal 7. Adicionei essa informação à minha pergunta original.
Lester Peabody

Aceito uma resposta assim que resolver o problema. Atualmente estou tentando descobrir como configurar as minhas sugestões para exibir o conteúdo de forma adequada ...
Lester Peabody

Respostas:


11

Não há uma maneira fácil e imediata de adicionar o conteúdo de um nó a diferentes regiões da página. Existem várias maneiras de resolver esse problema.

Maneira sem codificação: vistas e blocos

Crie uma vista

  • Tipo: Bloco
  • Filtro contextual: Conteúdo: Nid
    • valor padrão: pegue da página atual
  • Campos: o que você quiser
  • Filtro:
    • Tipo de Conteúdo: Seminário

(além das configurações adicionais desejadas)

Em seguida, vá para a página de bloqueio do administrador Mova o novo bloco de exibição para a região que você deseja que ele seja exibido. Ele deve ser exibido apenas nas páginas do nó do seminário.

Repita para todas as regiões

Caminho de codificação com theme_preprocess_region ():

código seria algo parecido com isto

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

Isto é apenas para o Drupal 7. Agora está disponível em sua region.tpl.php.


1
A abordagem de visualizações / blocos é realmente a que eu prefiro, mas sugeriu o Display Suite, já que alguns o acham mais acessível.
jhedstrom

O Views funciona muito bem para isso, como estou descobrindo. Views é fantástico em geral. Também uso o módulo Bloco de menus para dividir meus menus com base em onde estou no site (deixe-me dividir o menu principal para que ele sempre seja exibido e os submenus com base em que menu se enquadra no menu principal). Módulo totalmente incrível, altamente recomendado.
Lester Peabody

Meio louco que eu perguntei isso quase um mês, aceitei a resposta, mas estou começando a aplicar essa resposta agora (embora eu tenha usado o Views uma tonelada desde então). Você poderia esclarecer um pouco o uso do Views para o Drupal 7? Parece que o Argumento: nid não existe no Views 3 para o Drupal 7. Obrigado.
Lester Peabody

Eu descobri. A noção de argumento foi substituída por filtros contextuais em avançado.
Lester Peabody

D7, Ajustador contextual: Conteúdo: NID. Edit: veja você o encontrou, antes que eu pudesse responder
iStryker

7

O módulo Display Suite permite fazer isso. Você precisará habilitar o módulo Display Suite Extras para expor regiões do tema como destinos para componentes do nó. Informações sobre como fazer isso podem ser encontradas nos campos Adicionar a uma página de bloqueio da documentação do Display Suite


5

Eu tive o mesmo problema. A solução é bastante fácil. Você pode basear o fato de que no Drupal 7 podemos definir nosso próprio view_mode, não apenas FULL e TEASER (como sabemos nas versões mais antigas). Portanto, defina outro view_mode para uso em sua região: por exemplo, LEFTHAND. Drupal exibe view_mode COMPLETO na região de conteúdo. Então, você deve dizer ao Drupal para exibir LEFTHAND na região da barra lateral esquerda.

  1. Em template_preprocess_page ()

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

  2. No node.tpl.php, adicione uma nova exibição para o modo de visualização à esquerda

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


1
Essa resposta é super ultra-inteligente e não requer módulos externos, exceto para definir os modos de exibição. Alternativa simples para exibição Suite é Entity Modos de Visualização: drupal.org/project/entity_view_mode
paul-m

Eu realmente gostei desse aqui. Envolva-o em uma função if para que apenas apareça em determinadas páginas. Eu costumava if (array_key_exists('block_14',$vars['page']['main_content'])){}fazer aparecer apenas em páginas com um bloco específico.
Dominic Woodman

3

Se o Display Suite parecer demais para você (é um ótimo módulo, mas pode ser um exagero se você apenas precisar realocar alguns campos), existe um módulo apenas para esse fim -> CCK Blocks .

Eu sei que é chamado de blocos 'CCK', mas funciona com o Drupal 7 (que trouxe a funcionalidade do CCK ao núcleo).


1

Uma pequena alteração na resposta do @Patrik Lucan if ($vars['node'])estava causando problemas em páginas que não eram nós, por exemplo, página inicial personalizada com bloco ou página de visualizações.

Alterado para:

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

O que parece ter resolvido o problema.


0

Enquanto isso, há um módulo para isso. Na página do módulo:

Campo como bloco fornece uma maneira fácil de exibir um ou mais campos do nó atual em um bloco.

Este módulo pretende ser uma alternativa leve a módulos como Panels e Display Suite, ou usar Views para definir um bloco que recupera apenas um campo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.