Come implementare i riferimenti nodo bidirezionali?


20

Il modulo di riferimento nodo (un componente di CCK) fornisce un ottimo modo per creare un riferimento da un nodo all'altro. Qual è il modo migliore per esporre una relazione a due vie tra i due? Esempio sotto:

Ad esempio, in un sistema di tracciamento dei ticket con due ticket (nodi) A e B, è possibile creare un riferimento nodo dal ticket A -> B e contrassegnare B come figlio. Quando si visualizza il biglietto A, sarebbe banale visualizzare queste informazioni. Tuttavia, vorrei anche visualizzare questa relazione durante la visualizzazione del biglietto B e mostrare il biglietto A come genitore.

Lo stesso requisito si applicherebbe anche in situazioni non gerarchiche (ticket C e D) con un riferimento da C -> D, la relazione dovrebbe essere esposta sul ticket D e su C.

Risposte:


25

Ci sono molti moduli disponibili, il tuo chilometraggio può variare:

BackReference (solo Drupal 6)

NodeReferrer (versione beta di Drupal 7)

Node Relationships (solo Drupal 6)

Riferimenti nodo corrispondenti (versione stabile Drupal 7)

Riferimenti entità corrispondenti (versione sviluppatore Drupal 7)

Dipendenza del contenuto (versione stabile di Drupal 7)


I riferimenti ai nodi corrispondenti funzionano perfettamente per me, e una volta che CER è stabile passerò a quello.


4

Per Drupal 6, l'opzione migliore è probabilmente il modulo NodeReferrer . Per Drupal 7, Relation si adatta al conto ma non è ancora pronto.


Uso sempre il modulo NodeReferrer, per quello che vale
electblake,

1
Il modulo di relazione è ora pronto, dal luglio '12
ted.strauss il

Sì, la relazione sembra essere un'opzione abbastanza potente. Altrimenti, CER è anche una buona opzione leggera.
Shivams,

4

Se stai usando Drupal 7 / Views, puoi creare una relazione "inversa" per ottenere un elenco di nodi che fanno riferimento a un determinato nodo (o, forse, utenti che fanno riferimento a un determinato nodo). Dai un'occhiata alla patch in questo numero: http://drupal.org/node/1043260

A mio avviso, a meno che non sia necessaria la relazione inversa esplicita e preconfigurata archiviata nel database (ciò può talvolta essere utile per motivi di prestazioni), l'utilizzo di una delle altre soluzioni è eccessivo. Puoi sempre cercare una relazione nella tua query SQL se devi ...

[Modifica: da quando ho scritto questo post in origine, la patch nel problema sopra è stata assegnata a Riferimenti per D7 e dovrebbe essere il modo preferito di backreferencing (funziona alla grande quando semplicemente hanno bisogno di elenchi di nodi o utenti che fanno riferimento a un certo altro nodo o utente) .]

[Modifica 2: se si utilizza il riferimento entità, sembra che la soluzione preferita sia utilizzare i riferimenti entità corrispondenti , e c'è anche la sincronizzazione dei campi di riferimento entità meno utilizzata .]


Sembra che i riferimenti diventeranno deprecati a favore di Entity Reference. Non sono sicuro di dove rimanga questa risposta.
Jay,

1
I riferimenti rimarranno attivi fino a quando D7 non sarà una memoria distante ... ma se si utilizza ER, è possibile utilizzare i riferimenti entità corrispondenti per fare la stessa cosa fornita dai riferimenti.
geerlingguy,

3

In Drupal 7 (che hai indicato) sembra che la soluzione sia utilizzare il Modulo di riferimento entità in combinazione con il modulo di sincronizzazione dei campi di riferimento (Entità) che aggiunge le funzionalità necessarie per mantenere sincronizzate le relazioni.

Lo stesso si può ottenere con Modulo di riferimento con modulo cnr - questa soluzione funziona (lo sto usando su un sito Drupal 7 attualmente), ma sta diventando obsoleta / deprecata a favore della prima soluzione che ho dato.

Tutte le altre soluzioni menzionate nelle risposte sopra sono rilevanti solo per Drupal 6 (ad eccezione di Relation che ha il potenziale per diventare un ottimo modulo, ma in questo momento, non fa davvero molto e ha molti problemi).


Votare questa risposta perché è recente e Moshe è un membro anziano della comunità Drupal. Nella risposta accettata, l'unico modulo D7 stabile è CNR, che viene ammortizzato a favore di CER (che non ha ancora una versione stabile).
Annunciato il

1
Le relazioni non hanno avuto molti problemi nemmeno a marzo. E Moshe Eshel drupal.org/user/168876 ! = Moshe Weitzman drupal.org/user/23 (guarda quell'uid ...) tra l'altro.

@chx Sono stato sorpreso di vedermi descritto come membro senior ... Sto cercando di dare un contributo migliore, ma non credo che potrò mai salire al livello del Moshe originale. Per quanto riguarda il modulo di relazione, ho basato questo sul feedback di qualcuno che conosce (non nominerò i nomi) - non ho avuto l'opportunità di provarlo davvero in quel momento, e ho fatto affidamento su tale opinione. Attualmente sto lavorando a un progetto D7 - penso di averne bisogno, quindi quando avrò finito darò la mia opinione aggiornata qui.
Moshe Eshel,

2

In alternativa, se stai lavorando su un'implementazione personalizzata e desideri un modo semplice per fare riferimento ai riferimenti, puoi collegarti nodeapi, ascoltare l' saveoperazione e aggiornare a livello di codice il nodo di riferimento.




0

È possibile utilizzare il modulo Dipendenza contenuto .

Fornisce riferimenti inversi tramite scheda e supporta i seguenti moduli: riferimento nodo / riferimento entità .


1
Non sei davvero sicuro di come questo possa essere usato per creare riferimenti reciproci?
mpdonadio
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.