Muito bem! Saindo um pouco das bobagens que foram publicadas até agora na nova versão do Xulispa, entro em um assunto que é de interesse a todo desenvolvedor web que usa Drupal em seus projetos. Aqui vou ensinar como fazer um bloco de conteúdo relacionado, baseado em Taxonomia, usando Views. Para ver o bloco em questão, basta clicar no link "Veja completo" desta publicação. Segue uma imagem de demonstração:

Conteúdo relacionado

Atenção: esse tutorial é válido para #Drupal 6. Mãos à obra!

passo: Criar um vocabulário de taxonomia (administrar > organizar conteúdo > taxonomia ou seusite.com/admin/content/taxonomy) e relacioná-lo a pelo menos um tipo de conteúdo existente. No meu caso, ainda marquei nas configurações do vocabulário para ser do tipo "Tags" (free tags) e também "Obrigatório" (para não correr o risco de ficar conteúdo sem categoria), mas essa questão é opcional e você pode ficar livre para configurar o vocabulário como quiser. No entanto, é necessário existir termos cadastrados no vocabulário para que o tutorial seja válido.

passo: Criar uma view do tipo "node". No meu caso, usei "related_content" como nome da view, pra ficar melhor organizado (clique na imagem para ampliar).

View content_related

passo: O "Row style" da view deve ser do tipo "Fields" (campos), para nos dar mais liberdade do quê vamos exibir.

passo: Nos Fields, deve ter pelo menos um campo. O título (node title) é o mais conveniente. No meu caso, coloquei "Título" e "Imagem" (campo cck adicional que uso em todos os tipos de conteúdo). Também usei um preset feito com o módulo ImageCache para configurar o tamanho de saída da imagem. Os dois campos foram configurados para linkar ao node, mas isso pode variar de acordo a necessidade do seu projeto ou da sua vontade.

5° passo: Nos Filtros, coloquei "Node: Publicado = Sim" e "Node: Tipo = [Vários tipos de conteúdo. Escolha de acordo seu projeto]".

Tipo de conteúdo

6° passo: Em Sort criteria (critério de ordenação), defini como "Node: Update date = descendente". Isso vai fazer com que a cada vez que um conteúdo for atualizado, será mostrado primeiro. Mas você tem a possibilidade de definir o critério de ordenação como quiser.

7° passo: Aqui que realmente começa a mágica. Vamos definir os argumentos que farão a relação dos conteúdos. Em Argumentos, adicione o primeiro da seguinte forma:

  • Taxonomia: Term ID;
  • Marque "Provide default argument";
  • Marque "Default argument type" como "PHP code" (Vai abrir um campo de texto para inserir o código PHP que veremos logo abaixo);
  • Marque "Allow multiple terms per argument";
  • Marque "Reduce duplicates";

Coloque o código a seguir no campo do PHP code:

$node=node_load(arg(1));
if($node){
foreach($node->taxonomy as $term){$terms[]=$term->tid;}
return implode('+',$terms);
}else {return;}

Veja também a imagem (clique para ampliar):

Argumento da view

8° passo: Um toque mais simples, mas não menos importante. Adicione mais um argumento, para que não exiba o conteúdo principal (o da URL atual), da seguinte forma:

  • Node: Nid;
  • Marque "Provide default argument";
  • Marque "Defalt argument type" como "Node ID from URL";
  • Marque "Eclude the argument";

Veja na imagem como ficou (clique para ampliar):

Segundo argumento da view

9° passo: Adicione um display do tipo "Bloco" e salve a sua view.

10° e último passo: Na página de administração dos blocos, habilite o bloco criado pela view na região desejada:

Bloco habilitado

Agora é só criar conteúdo, sem esquecer de inserir (ou escolher) termos de taxonomia no momento da criação e pronto! Seu conteúdo relacionado está aparecendo e funcionando dinamicamente. :D

Provavelmente você vai querer exibir seu bloco em páginas específicas. Isso pode fazer na configuração do próprio bloco. Mas também fica por sua conta e essa configuração depende da necessidade do seu projeto.

Se você gostou ou teve utilidade, curta, compartilhe. Se for replicar esta publicação, não esqueça de indicar onde leu.

imagem de Jefferson
# - Jefferson qua, 04/01/2012 - 09:00

Salvou o dia! HAHA!

Obrigado pela super dica!

imagem de Denison
# - Denison qua, 08/08/2012 - 19:48

Man, segui o seu tutorial no Drupal 7 e foi preciso fazer uma pequena modificação no código:

if($node){
foreach($node->field_tags['und'] as $term) {
$terms[] = $term['tid'];
}
return implode('+',$terms);
}
else {
return;
}

Desta forma funciona perfeitamente para o D7. Valew por compartilhar seu conhecimento.

Abs.

Seu nome (obrigatório)
Seu email (não será publicado) (obrigatório)
Seu site/URL (inicie com http://)