Tel. 06151 / 39 10 793

Drupal Node Relationships für Nodereferenzen - Ein Überblick

Wer schon einmal mit dem Node-Reference-Field gearbeitet hat, hat vielleicht festgestellt, das die Standardwidgets für dieses Feld oftmals suboptimal bezüglich Usability sind. Vor allem wenn man aus einem größeren Pool von Nodes auswählen muss. Eine Dropdown Liste mit einigen hundert Einträgen - unpraktikabel. Ein Autocomplete Feld vielleicht ... wie hiess der Beitrag doch gleich, den ich referenzieren wollte?

Aber, wie das bei Drupal nunmal so üblich ist, gibt es auch für diese Probleme ein Modul, bzw. in diesem Fall eine Schar von Modulen, wie zum Beispiel der "Nodereference Explorer".
Hier kommt auch Node-Relationships ins Spiel. Es bietet Grundfunktionalitäten um Nodereferenzen bequem über ein View im Popup auswählen zu können ("Search and reference"). Sogar einen neuen Node im Popup anlegen, speichern und direkt referenzieren ("Add and Reference") ist möglich. Ist die Referenz dann angelegt, lässt sie sich auch direkt im Popup bearbeiten ("Edit Reference") und anschauen ("View Reference"). Dies ist natürlich für jedes Nodereference Field einzeln konfigurierbar, genauso wie das View das zur Auswahl der Referenzen genutzt wird.
Als Vorraussetzung für die Popup-Funktionalität muss das Modul "Modal Frame API" installiert sein. Views ist natürlich auch eine Vorraussetzung.

Ich will jetzt die Funktionsweise anhand kleinen Beispieles demonstrieren: Eine Musikdatenbank. Dazu lege ich die drei Inhaltstypen "Song", "Album" und "Interpret" an.
Den Songs sollen Alben und Interpreten zugeordnet werden, und in der Ansicht des Albums/Interpreten soll angezeigt werden, welche Songs diesem zugeordnet sind.
Im Inhaltstyp "Song" füge ich ein Feld "Album" hinzu, dieses Feld ist eine Nodereferenz, und als Widget wähle ich das Autocomplete Textfeld (das ist wichtig, da nur mit Autocomplete-Textfeld Node-Relationships benutzt werden kann). In den Einstellungen lege ich fest, das dieses Feld nur auf Nodes des Typs "Album" verweisen kann.
Weiterhin füge ich ein Feld "Interpret" hinzu, mit genau den gleichen Einstellungen (aber erlaubter Typ="Interpret").
Durch Node-Relationships ist im Inhaltstyp "Song" jetzt ein neuer Tab zu sehen: "Beziehungen". Hier befinden sich die Einstellungen.

1) Entity relations diagram: Eine Grafische Darstellung der Verlinkung dieses Inhaltstypen

2) Node reference extras: Hier kann man für jedes Nodereference-Feld einstellen, welches View zur Auswahl der Nodes verwendet wird, sowie welche Buttons neben dem Auswahlfeld erscheinen sollen. In diesem Beispiel wähle ich nur "Create and reference" sowie "Edit reference" für das Default-View welches bei Node Relationships mitgeliefert wird (und für alle Inhaltstypen funktioniert). Möchte man ein anderes View zur Auswahl benutzen, sollte man das Default-View duplizieren und seine Anpassungen vornehmen.

3) Im Tab "Back reference settings" befinden sich Optionen zur Anzeige von Inhalten, die auf den gewählten Inhaltstyp referenzieren. Auf den "Song" Typ wird nicht referenziert, daher erscheint hier nichts. Beim "Album" sieht das anders aus, aber dazu später mehr.

Nachdem diese Einstellungen getätigt sind, zeigt sich das node/add Formular von "Song" wie folgt:

Klickt man nun auf einen der Buttons, öffnet sich das Popup mit dem View zur Auswahl/Erstellung des Referenznodes. Innerhalb des Popups kann man auch noch einmal wechseln, wenn man sich verklickt hat. Alles in allem eine sehr angenehme Sache.

Somit kann man die Eingabe abschliessen, und alles ist wie gewünscht verlinkt.

Jetzt wäre es natürlich noch interessant zu sehen, welche Lieder sich in welchem Album befinden. Dazu bearbeiten wir den Inhaltstyp "Album", und gehen auf den zuvor ignorierten Tab "Beziehungen -> Back reference settings".

Hier sehen wir, das vom Typ Song auf den Typ Album referenziert wird.
Jetzt haben wir mehrere Optionen der Darstellung zur Verfügung: Als Field im Inhaltsteil des Nodes, als Seite und als Tab in der Nodeansicht. Ich wähle "Als Feld", indem ich per Drag&Drop die Region für "Song/Album" wähle, und speichere ab.
Im angezeigten Node sieht das dann folgendermaßen aus:

Das gleiche würde man für den Inhaltstyp "Interpret" machen, um zu sehen welche Songs zu einem Interpreten gehören.
Das war jetzt ein zugegebenermaßen sehr simples Beispiel, aber schon hieran lässt sich erkennen, wie man sich Node Relationships sehr leicht zunutze machen kann, und wie man mit nur wenigen Klicks Dinge realisieren kann, die vorher nur umständlich oder durch manuelle Programmierung zu machen waren.
Wir sind sehr begeistert von Node Relationships, und nutzen es in vielen unserer Projekte.

Link zu Node-Relationships: http://drupal.org/project/noderelationships

Hey, vielen Dank für diese ausführliche Beschreibung! Werde das Modul gleich mal installieren und testen. Was ich nicht ganz verstanden habe, bringt "Node Relationships" gleich einen Standard-View mit? Gut werde es ja gleich sehen ...

Bild von andrisek

Genau. Das bringt ein Standardview mit. Ein Tipp: Wenn dieses View geändert werden soll, empfiehlt es sich dieses zuvor zu duplizieren, damit das Original erhalten bleibt.

Danke für den Tip! Das mache ich ohnehin aber schon immer.

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
CAPTCHA
Diese Frage hat den Zweck zu testen, ob Sie ein menschlicher Benutzer sind und um automatisierten Spam vorzubeugen.
So finden Sie uns