Tel. 06151 / 39 10 793

Node Relations mit Drupal 7 - Nur wie?

30.01.2012  • 2
Reference Jungle

Wer den Umstieg von Drupal 6 auf Drupal 7 erleben durfte wird viele Verbesserungen, die Drupal 7 mit sich bringt, sehr zu schätzen wissen. Der Umstieg verläuft aber nicht immer ganz reibungslos. In Drupal 7 ist dank dem neuen Entity Konzept eine viel größere Flexibilität geboten um Beziehungen zwischen Nodes, oder abstrakter zwischen Entities, herzustellen.
In Drupal 6 war für diesen Zweck das Nodereference Modul (als Submodul von CCK) als Basismodul zu diesem Zweck das Mittel der Wahl. Für dieses CCK-Field standen Widgets zur Verfügung um das Ziel, die Verknüpfung von zwei Nodes, zu erreichen. Das Reference by URL Widget erlaubt es, einen zu referenzierenden Node direkt über einen URL-Parameter im Formular vorzuselektieren. Das macht Sinn, wenn man z.B. aus der Nodeansicht einer Firma direkt einen neuen Mitarbeiter-Node anlegen möchte. Dieser Mitarbeiter-Node referenziert dann automatisch die zugehörige Firma im Edit-Formular. Diese Funktion existiert sowohl in Drupal 6 als auch in Drupal 7 über das genannte Modul "Reference by URL".
Das Noderelationships Modul existiert aktuell nur in Drupal 6. Dieses Modul war jedoch sehr nützlich, und für einen guten Workflow beim Erstellen von sich gegenseitig referenzierenden Nodes ein absolutes Muss. Es war dadurch möglich, zu verknüpfende Nodes aus einem View auszuwählen, den aktuell verknüpften Node direkt zu bearbeiten, einen neuen Node anzulegen, ihn direkt zu verknüpfen und den verknüpften Node anzeigen zu lassen. All diese Vorgänge finden in einem Popup per iFrame (Overlay) statt und können nahezu beliebig tief verschachtelt werden. Die Benutzer waren für diese Funktionen oft sehr dankbar.
In Drupal 7 sind diese Overlays bereits integriert.
Das Modul, welches Noderelationships in Drupal 7 am nähsten kommt, ist das Modul Reference Dialog. Auch hier stehen die Funktionen wie weiter oben zum Modul Noderelationships beschrieben, zur Auswahl. Es ist mit diesem Modul nicht nur möglich, Nodes zu referenzieren. Die Funktion ist abstrakter und arbeitet mit Entities (auch ein Node ist ein Entity) welche wiederum "fieldable" sind.
Zur Info: Das Modul Node Reference ist ein Submodul von References, welches User References und Node References als Untermodule zur Verfügung stellt.

Und dann gibt es noch das abstrakteste Modul unter den genannten - das Modul Relation.
Hier wird die Abstraktion perfektioniert. Ein Entity stellt eine Relation (Beziehung zwischen Nodes) her. Dies geschieht über einen Entity-Type, welcher zwei Endpoints referenziert - die beiden zu verbindenden Nodes (es können auch mehrere sein). Dank Entity ist es hier möglich, die Relation um weitere Informationen zu ergänzen. So lässt sich z.B. zu einem Mitarbeiter-Node (oder Entity), der mit einem Firmen-Node (ebenfalls Entity) verbunden werden soll, hinterlegen, seit wann der Mitarbeiter im Unternehmen arbeitet und was seine Position in der Firma ist. Dies ist etwas, was sich in Drupal 6 nur mit sehr hohem Mehraufwand zu Lasten der Performance mit dafür vorgesehenen Link-Nodes abbilden lies. Das Modul ist noch in der Entwicklung, hat jedoch aus meiner Sicht das größte Potential.

Die Frage ist nun, welches der Module "das Modul" der Wahl wird, wenn es um das Verknüpfen von Nodes oder besser Entites geht.
Dazu möchte ich die Vor- und Nachteile der einzelnen Varianten noch kurz im Anriss beleuchten.

Nodereference
Vorteile: Einfache Handhabung, wie in Drupal 6 gewohnt
Nachteil: Wenig flexibel, die eigentliche Referenz ist kein Entity, keine weiteren Informationen zur Beziehung hinterlegbar.

Entity Reference
Vorteil: Abstrakt gehalten, jeder Entity kann referenziert werden, nicht nur Nodes
Nachteil: ohne Erweiterung kein passendes Widget, programmatisch nicht so einfach abzufragen wie eine Node Reference.

Relation
Vorteil: Sehr abstrakt, Beziehung kann mit Informationen hinterlegt werden
Nachteil: Noch kaum Widgets zur Eingabe, weniger intuitiv ohne erweiternde Widgets.

Mittelfristig wird es meiner Meinungen nach (und man bekommt diese Meinung in den Modulbeschreibungen der Maintainer bestätigt) kein Nodereference Modul mehr geben. Dieses weicht zu Gunsten von Entity Reference oder gut und gerne dem Relation Modul.

Das Relation Modul ist zunächst als API gedacht und stellt ein neues Konzept zum "verheiraten" von Nodes und Entities da. Da aktuell nur sehr wenige Widgets zum Herstellen der Relation als "Submodule" existieren und diese wenigen Module noch im Dev-Status sind, ist ein Produktiveinsatz noch nicht zu empfehlen.
Das Modul Relation Select geht einen großen Schritt in die richtige Richtung. Es erweitert das Relation Modul und stellt ein Widget zur Verfügung, welches die Auswahl eines Entites ermöglicht. Zwischen dem Entity (z.B. ein Node) der gerade bearbeitet wird und dem ausgewählten Entity (durch das Relation Select Widget) wird die Beziehung (Relation) hergestellt. Das Modul ist jedoch noch in einem frühen Entwicklungsstatus, funktioniert aber dennoch in den wesentlichen Funktionen.
Geplant ist ebenfalls, dass man direkt nach dem Herstellen der Relation, welche über einen Relation-Entity abgebildet wird, alle weiteren Felder, die die Beziehung beschreiben, füllen kann. Dies ist aktuell nur möglich, indem man im Nachgang die Relation bearbeitet nachdem der Entity gespeichert wurde.

Fazit: Meiner Meinung nach ist die Entwicklungsrichtung, welche das Relation Modul vorgibt, konsequent und "most Drupal 7 like". Es ist nur eine Frage der Zeit, bis es zahlreiche Module gibt, die dieses Modul erweitern und Widgets dafür bereitstellen. Der erste Ansatz ist das Modul "Relation Select".
Wer aktuell eine Lösung für den Produktiveinsatz benötigt ist mit der Modulkombination Entity Reference und Reference Dialog am besten bedient.

Bild von pistner

Gerade noch entdeckt: http://drupal.org/project/nodeconnect erweitert das Nodereference Modul um die Möglichkeit eine neuen Node zu referenzieren. Das kann jedoch auch mit dem Modul Reference Dialog abgebildet werden. Der Unterschied ist, dass nodeconnect nur mit Nodereferencen arbeitete und nicht in einem Popup geöffnet wird, daher beliebig viele Verschachtelungstiefen erlaubt.

Einfache Node- und User-Refs müssen in D7 auf Entities bezogen sein. Sonst funktionieren zB Referenzen zu profile2-Elementen nicht. Entity Reference bietet alles was man will - inklusive einer sehr guten Views-Anbindung. Nur die deutsche Übersetzung in Views ist arg unverständlich...

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.

Suchen


Newsletter

Melden Sie sich zu unserem kostenlosen Newsletter an. Wir informieren Sie regelmässig über unsere Leistungsangebote, Drupal Best-Practices, Mobile Apps, ERPAL Updates und Veranstaltungen.

Unsere Partner
comm-press comm-press
Drupal Spezialisten aus Hamburg
neosmart - Digital Media, Webdesign & Webentwicklung<br />
aus Darmstadt neosmart
Digital Media, Webdesign & Webentwicklung aus Darmstadt
trinomica - Software Solutions trinomica
Software Solutions
Sponsoring und Mitgliedschaften

Drupal Initiative Deutschland - Firmen-Mitglied

Wir sind Diamant Sponsors für das DrupalCamp Frankfurt 2014

So finden Sie uns