Jak zaimplementować dwukierunkowe odwołania do węzłów?

20

Moduł odniesienia do węzła (komponent CCK) zapewnia świetny sposób na utworzenie odniesienia między węzłami. Jaki jest najlepszy sposób na ujawnienie dwustronnej relacji między nimi? Przykład poniżej:

Na przykład w systemie śledzenia biletów z dwoma biletami (węzłami) A i B można utworzyć odniesienie do węzła z biletu A -> B i oznaczyć B jako dziecko. Podczas wyświetlania biletu A wyświetlenie tych informacji byłoby banalne. Chciałbym również wyświetlić tę relację podczas przeglądania biletu B i pokazania biletu A jako jego rodzica.

Ten sam wymóg miałby również zastosowanie w sytuacjach niehierarchicznych (bilety C i D) z odniesieniem od C -> D, relacja powinna być ujawniona na bilecie D, a także na C.

markdorison
źródło

Odpowiedzi:

4

W przypadku Drupala 6 najlepszą opcją jest prawdopodobnie moduł NodeReferrer . W przypadku Drupala 7 Relacja pasuje do rachunku, ale nie jest jeszcze gotowa.

Pierre Buyle
źródło
Zawsze używam modułu NodeReferrer, za co jest wart
electblake
1
Moduł Relacja jest teraz gotowy, od lipca '12
ted.strauss
Tak, Relacja wydaje się dość potężną opcją. W przeciwnym razie CER jest również dobrą lekką opcją.
shivams
4

Jeśli korzystasz z Drupal 7 / Views, możesz zbudować relację odwrotną, aby uzyskać listę węzłów, które odnoszą się do danego węzła (lub, być może, użytkowników, którzy odnoszą się do danego węzła). Sprawdź poprawkę w tym numerze: http://drupal.org/node/1043260

Moim zdaniem, chyba że potrzebujesz jawnej, wstępnie zbudowanej relacji odwrotnej przechowywanej w bazie danych (może to czasem być pomocne ze względu na wydajność), użycie jednego z innych rozwiązań jest przesadą. Zawsze możesz wyszukać relację we własnym zapytaniu SQL, jeśli chcesz ...

[Edycja: Od czasu napisania tego postu łatka w powyższym wydaniu została przypisana do Odniesień do D7 i powinna być preferowanym sposobem odwołań zwrotnych (działa świetnie, gdy po prostu potrzebujesz list węzłów lub użytkowników odwołujących się do określonego innego węzła lub użytkownika) .]

[Edycja 2: Jeśli używasz Referencji encji, wygląda na to, że preferowanym rozwiązaniem jest użycie odpowiednich referencji encji , a także rzadziej używana synchronizacja pola referencji encji .]

geerlingguy
źródło
Wygląda na to, że Referencje staną się przestarzałe na rzecz Referencji Entity. Nie jestem pewien, gdzie to pozostawia tę odpowiedź.
Jay
1
Referencje nadal będą się pojawiać, dopóki D7 nie będzie odległym wspomnieniem ... ale jeśli używasz ER, możesz użyć Referencyjnych Encji Odpowiednich, aby zrobić to samo, co Referencje od razu po wyjęciu z pudełka.
geerlingguy
3

W Drupal 7 (który wskazałeś) wydaje się, że rozwiązaniem jest użycie modułu referencyjnego encji w połączeniu z modułem synchronizacji pola referencyjnego (encji), który dodaje funkcjonalność niezbędną do synchronizacji relacji.

To samo można osiągnąć dzięki modułowi Referencje z modułem cnr - to rozwiązanie działa (obecnie używam go na jednej stronie Drupal 7), ale staje się przestarzałe / przestarzałe na rzecz pierwszego rozwiązania, które podałem.

Wszystkie inne rozwiązania wspomniane w powyższych odpowiedziach dotyczą tylko Drupala 6 (z wyjątkiem Relacji, która może stać się świetnym modułem, ale w tej chwili tak naprawdę niewiele robi i ma wiele problemów).

Mosze Eshel
źródło
Głosowałem na tę odpowiedź, ponieważ jest ostatnia, a Moshe jest starszym członkiem społeczności Drupal. W przyjętej odpowiedzi jedynym stabilnym modułem D7 jest CNR, który jest amortyzowany na korzyść CER (który nie ma jeszcze stabilnego wydania).
aendrew 15.01.2013
1
Relacja nie miała wielu problemów nawet w marcu. I Moshe Eshel drupal.org/user/168876 ! = Moshe Weitzman drupal.org/user/23 (spójrz na ten Uid ...) btw.
@chx Byłem zaskoczony, widząc mnie jako starszego członka ... Staram się być lepszym współpracownikiem, ale nie sądzę, żebym kiedykolwiek osiągnął poziom Pierwszego Moshe. Jeśli chodzi o moduł Relacji, oparłem go na opiniach kogoś znanego (nie będę wymieniał nazwisk) - nie miałem wtedy okazji naprawdę go przetestować i polegałem na tej opinii. Obecnie pracuję nad projektem D7 - myślę, że jest to potrzebne, więc przedstawię moją zaktualizowaną opinię, gdy skończę.
Moshe Eshel
2

Alternatywnie, jeśli pracujesz nad niestandardową implementacją i chcesz prostego sposobu odwoływania się z powrotem, możesz podłączyć się nodeapi, nasłuchiwać saveoperacji i następnie programowo zaktualizować odwołany węzeł.

enikola
źródło
0

Możesz użyć modułu Zależności treści .

Zapewnia odwrotne odniesienia za pomocą karty i obsługuje następujące moduły: odwołanie do węzła / odwołanie do obiektu .

drupal
źródło
1
Nie bardzo wiesz, jak można to wykorzystać do tworzenia wzajemnych odniesień?
mpdonadio