Referência de conteúdo com busca integrada

Tutorial passo a passo explicando o uso de referência de conteúdo com busca.

Estive sofrendo por alguns dias para resolver uma questão num projeto que se mostrava simples mas quando vista com mais atenção se tornou muito complicada. O cenário com o qual me debati foi o seguinte:

Um tipo de conteúdo precisa referenciar conteúdos já existentes mas é necessária uma busca no momento de criar a relação devido a enorme quantidade de conteúdo existente.

Trocando em miúdos, quando um conteúdo fosse relacionado com outro para criar algo como uma lista de artigos do tipo “você poderá gostar destes também”, no momento da criação desta relação, seria necessário apresentar alguma forma de busca devido a grande quantidade de conteúdo existente.

Se você conhece um pouco de Drupal sabe que tanto o módulo Entity Reference quanto o módulo References não possuem uma opção para efetuar buscas que não seja usando um widget de autocomplete. Para uma quantidade pequena de conteúdo ou ainda quando o editor do conteúdo sabe o que procura, este não é um problema grande. Porém se você possui um cenário onde existem dezenas de categorias com milhares de conteúdos diferentes, uma busca é mais que bem vinda.

Em cena o References dialog

Depois de muito quebrar a cabeça tentando realizar a busca de outras formas, me deparei com o módulo References dialog que faz o necessário: conecta um campo Entity Reference numa view que permite a criação de quaisquer tipos de filtros desejados.

tut-references-01

A figura anterior ilusta uma das opções deste módulo (a busca) que atende perfeitamente a necessidade aqui apresentada.

Como fazer

Neste tutorial uso o seguinte cenário para ilustrá-lo:

  • Um tipo de conteúdo “receitas” que irá armazenar minhas famosas receitas de massa aprendidas com a “nona”;
  • Um tipo de conteúdo “ingredientes” que irá armazenar os ingredientes para a receita;
  • Uma referência entre “receitas” e “ingredientes” que permita a pesquisa dos ingredientes por nome.

Módulos necessários

Os módulos que precisam ser instalados e são necessários:

Instale os módulos acima da forma que está mais acostumado (Drush, Download, etc). Se não sabe como instalar, leia este artigo ou ainda procure na web as informações.

Observação: neste tutorial são apresentadas telas em Português. Se quiser instalar a tradução do módulo References Dialog, o arquivo está disponível no fim do tutorial.

Criando a relação

Após a instalação é necessário ter dois tipos de conteúdo para realizar o relacionamento. No caso deste tutorial foram criados os tipos de conteúdo “receitas” e “ingredientes”.

No tipo de conteúdo que receberá a relação (receitas), crie um novo campo do tipo Entity Reference e selecione o widget Autocompletar (não use a opção Autocompletar (tags style).

tut-references-02a

Nas configurações deste campo selecione a opção Pesquisar diálogo para permitir a pesquisa de conteúdo com uma view. As demais configurações do campo podem ser configuradas de acordo com suas necessidades, como por exemplo, a quantidade de relacionamentos permitidos (neste tutorial, ilimitado).

tut-references-03

Salve as configurações do campo.

Configurando uma view de pesquisa

Depois que a configuração do campo foi realizada, é hora de criar uma view para ser apresentada numa janela de busca. Para isso, acesse a interface de gerenciamento de views (admin > structure > views) e crie uma nova view de conteúdo.

Com a view criada é necessário incluir um novo painel de exibição (display) do tipo Diálogo de Pesquisa de Referências. Para isso, clique na opção + Adicionar (1) no topo de sua view e escolha a opção Adicionar Diálogo de Pesquisa de Referências (2). Será criado um novo painel em sua view que pode ser confugurado com os filtros que desejar.

tut-references-04

Com os campos, filtros e demais parâmetros configurados, falta relacionar a view com o campo de referência para que a mágica comece.

tut-references-05

Para isso, clique sobre a opção Campo quebrado existente na área Diálogos Referenciados (1) e na janela apresentada, selecione o campo que será anexado à view (2). Clique em Aplicar para salvar a configuração.

Um truque aprendido batendo cabeça: sua view DEVE ter o campo Nid listado como campo, mesmo que não use-o. Este campo é necessário pois a relação é sempre realizada pelo Nid do conteúdo e não por seu título. Não esqueça-o!

Com tudo configurado, salve a view e limpe o cache do Drupal (obrigatório) para começar a usar a pesquisa na referência criando um novo conteúdo.

Considerações finais

  • Você somente pode referenciar conteúdo já publicado. Conteúdo que não está publicado ou que está em modo de revisão não pode ser referenciado;
  • Você pode usar quaisquer opções de filtro (campos expostos), bastando configurá-los corretamente;
  • Para melhor performance de resposta da janela, principalmente quando existe uma grande quantidade de conteúdo, ative a opção de cache da view;
  • Você pode usar o mesmo painel da view (display) para diferentes campos, bem como criar diferentes painéis para diferentes campos e com diferentes configurações.

Mesmo o módulo References Dialog estando em versão “alpha”, o mesmo está bem estável (em meu projeto estou usando a versão beta com successo) e certamente é uma ótima opção para aqueles que precisam referenciar conteúdos quando existe uma enorme quantidade destes e se faz necessário oferecer uma opção de pesquisa melhor que somente o título do conteúdo que deseja referenciar.

Aproveite!