OPTEN, das einzige Umbraco-zertifizierte Unternehmen der Schweiz

Umbraco - Relationen (bezieht sich auf Umbraco 4-Versionen)

Ein wichtiges aber wenig beachtetes Feature von Umbraco ist das Konzept der Relationen zwischen aller Art von Umbraco-Elementen.

Bestimmt sind Sie als aufmerksamer Umbraco-Nutzer bereits einmal über diese Funktionalität gestolpert. Wenn Sie nämlich eine Seite in Umbraco kopieren, haben Sie die Möglichkeit das Häckchen „Related copied items to original“ anzulicken (siehe Printscreen).

Was bewirkt dieses Häckchen? Dieser Blog-Post erläutert die Hintergründe.

Elemente In Umbraco Kopieren

In der Grundinstallation von Umbraco wird per Default ein Relationstyp angelegt. Dieser heisst „Relate Document On Copy“ und kann in der Developer-Section unter „Relation Types“ angesehen werden.

Wie im unteren Printscreen ersichtlich, werden dabei die Umbraco-Elemente „Document“ miteinander in Verbindung gebracht („Relationiert“). Zudem ist die Beziehung bidirektional. Das bedeutet, es kann in beide Richtungen von einem Dokument zum verbundenen Dokument navigiert werden (Parent --> Child / Child --> Parent). Den entsprechenden Code, um zwischen den Relationen navigieren zu können, sehen Sie im Beispiel am Schluss dieses Blogeintrages.

Umbraco Standart Relation

Falls Sie einen eigenen Relation-Typ anlegen möchten, präsentieren sich Ihnen die folgenden Eingabefelder.

Eigene Relationstypen In Umbraco

Wie Sie sehen, können Sie alle in Umbraco zur Verfügung stehenden Elemente miteinander in Verbindung bringen. Die interessantesten Möglichkeiten bieten sich sicherlich in der Kombination von Document und Media mit den Member-spezifischen Elementen (z.B. alle Medias einer bestimmten Member-Gruppe). Kaum ein Anwendungsfall kann damit nicht abgebildet werden.

 

Exemplarisches Vorgehen für die Verlinkung zwischen zwei Seiten

(Document, typischerweise bei mehrsprachigen Seiten)

 

Als erstes müssen drei neue Datentypen angelegt werden.

1. Related Document Links

Mit diesem Dokumenttypen wird Ihnen später im Backend die Relation angezeigt.

Am besten nutzen Sie dazu die Komponente „Relation Links“ von uComponents und wählen den vorgängig beschriebenen Standard-Relation-Type „Relate Document On Copy“ aus.

Umbraco Related Document Link 

2. Related Document Content Picker

Hiermit können Sie später die zu verknüpfende Seite auswählen. Alternativ zum „Multi-Node Tree Picker“ können Sie auch einen einfachen „Content-Picker“ nutzen.

Umbraco Related Document Content

3. Related Document

Wählen Sie hier „Picker Relations“ als Datatypen Ihrer Wahl aus. Dieses Property wird für die Speicherung der Relation benutzt.

Als Picker Alias müssen Sie das Property wählen, dass Sie im Dokumenttypen „Related Document Content Picker“ als Alias eingetragen wurde.

Hinweis: Dieser Datentyp lässt sich also erst konfigurieren, wenn Sie einen Dokumenttypen wie weiter unten folgend bereits erfassten.

Als Relation Type wählen Sie auch hier die Standartrelation “Related Document On Copy“.

Mit dem Häckchen bei "Hide Data Editor" verhindern Sie, dass dem Editor verwirrende und wenig aussagekräftige Informationen angezeigt werden.

Umbraco Related Document

 

Als zweites können Sie nun einen Dokumenttypen mit den oben angelegten Datentypen fertig konfigurieren.

Dies könnte wie folgt aussehen:

Umbraco Dokumenttyp

Fertig! Sie sind nun in der Lage von Hand einzelne Seiten miteinander zu verbinden.

Die Eingabemaske könnte nun wie folgt aussehen:

Resultat

 

Zum Schluss zeige ich Ihnen wie Sie diese Relation mit C#-Code auslesen:

Folgendes Using-Statement muss hinzugefügt werden:

@using umbraco.cms.businesslogic.relation

Mit folgendem Code können Sie die Node-Url der verbundenen Elemente finden:

// Check relations
var nodeUrl = String.Empty;
var currentNodeId = Model.Id;
// Initialisieren des Relationstypen
var relType = RelationType.GetByAlias("relateDocumentOnCopy");
// Suchen einer Relation auf der aktuellen Node eines spezifischen Typen
var relations = Relation.GetRelations(currentNodeId, relType);
// Prüfen ob eine Relation gefunden wurde
if (relations != null && relations.Length > 0) {
   var relatedNodeId = -1;
   // Auswahl der ersten Relation im Array
   var relation = relations[0];
   // Navigation über das Elternelement
   if (currentNodeId != relation.Parent.Id) {
      relatedNodeId = relation.Parent.Id;
   } else {
      // Navigation über das Kindelement
      relatedNodeId = relation.Child.Id;
   }
   nodeUrl = Library.NodeById(relatedNodeId).Url;
}

 

Viel Vergnügen beim Verlinken!


kommentieren


0 Kommentar(e):