Como implementar referências de nó bidirecional?

20

O módulo de referência de nó (um componente do CCK) fornece uma ótima maneira de criar uma referência de um nó a partir de outro. Qual é a melhor maneira de expor um relacionamento bidirecional entre os dois? Exemplo abaixo:

Por exemplo, em um sistema de rastreamento de tickets com dois tickets (nós) A e B, você pode criar uma referência de nó do ticket A -> B e marcar B como filho. Ao visualizar o ticket A, seria trivial exibir essas informações. No entanto, eu também gostaria de exibir esse relacionamento ao visualizar o ticket B e mostrar o ticket A como pai.

Esse mesmo requisito também se aplicaria a situações não hierárquicas (tickets C & D) com uma referência de C -> D, o relacionamento deve ser exposto no ticket D e também no C.

markdorison
fonte

Respostas:

25

Existem muitos módulos disponíveis, sua milhagem pode variar:

BackReference (apenas Drupal 6)

NodeReferrer (versão beta do Drupal 7)

Relacionamentos de nós (apenas Drupal 6)

Referências de nó correspondentes (versão estável do Drupal 7)

Referências a entidades correspondentes (versão do desenvolvedor do Drupal 7)

Dependência de conteúdo (versão estável do Drupal 7)

tim.plunkett
fonte
As referências de nó correspondentes funcionam perfeitamente para mim e, quando o CER estiver estável, mudarei para isso.
4

Para o Drupal 6, a melhor opção é provavelmente o módulo NodeReferrer . Para o Drupal 7, o Relation se encaixa na conta, mas ainda não está pronto.

Pierre Buyle
fonte
Eu sempre uso módulo NodeReferrer, para o que vale a pena
electblake
11
O módulo Relation está pronto, desde julho '12
ted.strauss
Sim, a relação parece ser uma opção bastante poderosa. Caso contrário, o CER também é uma boa opção leve.
shivams
4

Se você estiver usando o Drupal 7 / Views, poderá criar um relacionamento 'reverso' para obter uma lista de nós que se referem a um determinado nó (ou, talvez, usuários que se referem a um determinado nó). Confira o patch nesta edição: http://drupal.org/node/1043260

Na minha opinião, a menos que você precise do relacionamento inverso explícito e pré-construído armazenado no banco de dados (isso às vezes pode ser útil por razões de desempenho), o uso de uma das outras soluções é um exagero. Você sempre pode procurar um relacionamento em sua própria consulta SQL, se precisar ...

[Editar: desde a criação original deste post, o patch na edição acima foi confirmado no References for D7 e deve ser a maneira preferida de fazer referência posterior (funciona muito bem quando é necessário simplesmente listas de nós ou usuários que fazem referência a um outro outro nó ou usuário) .]

[Editar 2: se você estiver usando a Referência de entidade, parece que a solução preferida é usar referências de entidade correspondentes e também há a sincronização de campo de referência de entidade menos usada .]

geerlingguy
fonte
Parece que o References ficará obsoleto em favor do Entity Reference. Não sei onde isso deixa essa resposta.
Jay
11
As referências ainda permanecerão até que D7 seja uma memória distante ... mas, se você estiver usando ER, poderá usar as Referências a entidades correspondentes para fazer o mesmo que as referências fornecem.
Geerlingguy 28/05
3

No Drupal 7 (que você indicou), parece que a solução é usar o Módulo de Referência de Entidades em combinação com o módulo de Sincronização de Campos de Referência (de Entidade), que adiciona a funcionalidade necessária para manter os relacionamentos sincronizados.

O mesmo pode ser alcançado com o Módulo de referências com o módulo cnr - esta solução funciona (atualmente estou usando-o em um site do Drupal 7), mas está se tornando obsoleta / obsoleta em favor da primeira solução que forneci.

Todas as outras soluções mencionadas nas respostas acima são relevantes apenas para o Drupal 6 (exceto a Relation, que tem potencial para se tornar um ótimo módulo, mas, no momento, realmente não faz muito e tem muitos problemas).

Moshe Eshel
fonte
Votar esta resposta porque é recente e Moshe é um membro sênior da comunidade Drupal. Na resposta aceita, o único módulo D7 estável é o CNR, e isso está sendo depreciado em favor do CER (que ainda não possui uma versão estável).
aendrew
11
A relação ainda não teve muitos problemas em março. E Moshe Eshel drupal.org/user/168876 ! = Moshe Weitzman drupal.org/user/23 (veja esse uid ...) entre.
@chx Fiquei surpreso ao me ver destacado como membro sênior ... Estou tentando ser um colaborador melhor, mas acho que nunca chegarei ao nível do Moshe Original. No que diz respeito ao módulo Relation, baseei isso no feedback de alguém que sabe (não vou citar nomes) - não tive a oportunidade de realmente testá-lo na época e confiei nessa opinião. Atualmente, estou trabalhando em um projeto D7 - acho que preciso disso, então darei minha opinião atualizada aqui quando terminar.
Moshe Eshel
2

Como alternativa, se você estiver trabalhando em uma implementação customizada e desejar uma maneira direta de se referenciar novamente, poderá conectar-se nodeapi, ouvir a saveoperação e atualizar programaticamente o nó referenciado.

enikola
fonte
0

Você pode usar o módulo Dependência de conteúdo .

Ele fornece referências reversas via guia e suporta os seguintes módulos: referência de nó / referência de entidade .

drupal
fonte
11
Não sabe ao certo como isso pode ser usado para criar referências mútuas?
mpdonadio