Como fazer a exibição de conteúdo relacionado por taxonomia com Views

Alô pessoal! Estamos aqui mais uma vez para falar de um assunto recorrente: Conteúdo relacionado. Na verdade, existe um monte de formas para fazer isso, incluindo alguns módulos prontos. Não vou falar dos módulos prontos, pois nenhum atende com abrangência a maioria dos casos. Por isso, vou abordar o meu jeito preferido, que é mais fácil de ser personalizado. :)

Vou usar taxonomia para relacionar os conteúdos. Motivo? É mais fácil inserir um só campo do tipo free tag com autocomplete no tipo de conteúdo do que um campo múltiplo de outro tipo texto. Além do mais, com a taxonomia já tenho uma relação entre conteúdos por padrão. Tanto que, o Drupal lista, nativamente, todos os conteúdos relacionados por um termo ou vocabulário de taxonomia. Massa? Então beleza! Sendo assim, fica implícito que todos os meus tipos de conteúdo que desejo exibir como conteúdo relacionado, tem um campo de taxonomia do tipo free tag. Estou usando o campo que vem padrão em uma instalação com perfil Standard do Drupal.

Criação da view que vai fazer a mágica de exibir o conteúdo relacionado

É importante deixar claro logo no início que, como estamos falando de views, por mais que a view criada por mim contenha somente o título do node, vocês podem colocar qualquer coisa que o node contenha. Também pode fazer critérios de ordenação, paginação, entre outras coisas que são propriedade uma view. Por isso, fica mais personalizável do que qualquer módulo pronto, de um jeito fácil de fazer sem precisar de programar.

A primeira coisa que farei é criar uma view de conteúdo, com um display block. Essa view precisa conter:

  • Um relacionamento com "Conteúdo: Termos de taxonomia no node";
  • Um filtro contextual "Termo de taxonomia: ID do termo", a partir do relacionamento criado anteriormente;
  • Outro filtro contextual "Conteúdo: Nid";
  • "Distinto" marcado nas configurações da query.

 

Beleza! Vamos ver com detalhes as configurações de cada opção. Mas antes deixo uma imagem de como ficou as configurações gerais da minha view, no final das contas:

 

related 01

Agora vamos ver cada configuração individualmente.

1. Relacionamento "Conteúdo: Termos de taxonomia no node":

Nessa configuração, as únicas coisas que fiz foi escolher qual vocabulário contém os termos que eu quero exibir como conteúdo relacionado e marcar que a relação é obrigatória. Look na imagem:

related 02

2. Filtro contextual "Termo de taxonomia: ID do termo", a partir do relacionamento criado anteriormente:

Essa configuração é a que contém mais opções. Obrigatoriamente, já fica escolhido o relacionamento que criei na primeira configuração. A seguir, eu escolho:

  • Fornecer um valor padrão
  • Tipo: ID do termo de taxonomia a partir da URL
  • Carregar o filtro padrão da página de termos
  • Load default filter from node page, that's good for related taxonomy blocks
  • Limitar termos por vocabulário
  • Vocabulários: Tags
  • Manipulação de múltiplos valores: Filtro para itens que compartilham algum termo
  • Mais: Permite múltiplos valores

 

As outras opções não falei delas porque não precisa mexer. Vamos ver como ficou?

 

related 03

3. Filtro contextual: "Conteúdo: Nid":

Nessa configuração, vamos marcar o seguinte:

  • Fornecer um valor padrão
  • Tipo: ID do conteúdo pela URL
  • Mais: Excluir

Da mesma forma das configurações do filtro contextual anterior, não falei das outras opções pois não é necessário mexer. Veja como ficou:

related 04

Beleza! Agora só falta mais uma configuração adicional simples.

4. "Distinto" marcado nas configurações da query:

Na área "outros" das configurações avançadas da view, existe um item "Configurações da query", conforme vimos na primeira imagem deste artigo, que mostra as configurações gerais da view. Na configuração da query, vamos marcar:

  • Distinto
  • Pure Distinct

 

Vamos ver?

 

related 05

Pronto! Agora é só salvar a view e habilitar o bloco onde quiser. Crie um tanto de conteúdos, dos tipos que tenham o campo de taxonomia, sem esquecer de inserir termos de taxonomia comuns em alguns conteúdos. Navegue por esses conteúdos e veja o seu bloco de conteúdo relacionado aparecer. Show, né? Mas ainda vou explicar algumas coisas.

Entendendo o que aconteceu

1. Relacionamento "Conteúdo: Termos de taxonomia no node": Com esse relacionamento inserido na view, é possível inserir mais itens em outros lugares na própria view. Sem esse relacionamento, a opção para o filtro contextual que vem a seguir, não aparece. O módulo views, dependendo do tipo de informação que é adicionada como relacionamento, cria possibilidade de campos, filtros contextuais e novos relacionamentos, que podem ser usados a partir da definição de um relacionamento. Esse é um comportamento padrão de views, importante para que as consultas sejam feitas corretamente, sem precisar carregar ou consultar informações desnecessárias que poderiam sobrecarregar a consulta.

2. Filtro contextual "Termo de taxonomia: ID do termo", a partir do relacionamento criado anteriormente: Esse filtro usa o relacionamento que criamos para fazer uma condição complexa na consulta. No entanto, nós só precisamos marcar alguns checkboxes, eliminando a complexidade da programação. Com a condição criada, é aqui que a view nos dá o resultados de conteúdo relacionado. Todos os parâmetros para que as condições sejam feitas são passados por argumentos através de valores contidos na URL, tanto das páginas de listagem padrão das taxonomias quanto das páginas dos nodes. Algumas das opções que o filtro contextual nos dá acabam sendo um pouco redundantes, o que acaba aumentando um pouco o processamento da consulta, se fosse comparar com uma consulta feita programaticamente. Mas essa diferença de processamento da consulta é mínima, não interfere no resultado final do trabalho, nem mesmo se houver uma série de outras consultas que requerem alto processamento.

3. Filtro contextual: "Conteúdo: Nid": Essa é uma configuração mais simples, mas que também é importante para o resultado final da consulta feita pela view. A única coisa que essa parte faz, é verificar qual é o node atual. Caso o node atual esteja na lista de conteúdos gerados pela consulta da view, o node é excluído da exibição. Assim, isso evita mostrar como conteúdo relacionado, o conteúdo que estamos visualizando no momento.

4. "Distinto" marcado nas configurações da query: Não menos importante que as outras configurações, aqui a gente diz pra view, que force um pouco a consulta para que não retorne o mesmo conteúdo na listagem. Assim garantimos que não teremos duplicação de itens na lista de conteúdo relacionado, já que estamos trabalhando com múltiplos valores e interligando conteúdos que já estão relacionados mais de uma vez, quando eles têm mais de um termo de taxonomia em comum.

Beleza! Com isso temos um bloco de conteúdo relacionado, altamente personalizável, que podemos colocar em qualquer região disponível no site. Os conteúdos exibidos nesse bloco são os que têm o(s) mesmo(s) termo(s) de taxonomia do conteúdo que foi acessado. Caso houver alguma coisa que saia dessa regra, o bloco simplesmente não é exibido. Vamos ver como ficou o resultado final?

related 06

É isso galera! Qualquer coisa é só deixar um comentário. Logo nos vemos de novo. :)