Sitecore: Vererbung von Presentation Details

03.12.2015 Miklas Bieberstein

Anforderung

Bei der Erstellung von Websites gibt es immer die Anforderung, dass zusätzlich zu den individuellen Inhalten der jeweiligen Seiten, bestimmte Elemente immer präsent sein sollen.

Diese Elemente sind z. B. das Firmenlogo und der Unternehmensname, natürlich die Navigation und andere Verweise auf Inhalte, die, wie das Impressum oder die Nutzungsbedingungen, immer verfügbar sein müssen. Daher gliedert sich eine Website in der Regel in bestimmte Darstellungsbereiche, die entweder den individuellen Inhalt einer Seite oder aber globale Elemente anzeigen.

Ziel soll es sein, diese globalen Elemente nur einmal den jeweiligen Darstellungsbereichen zuweisen zu müssen, um z. B. Redakteure von der Aufgabe zu entlasten, in ihre neu kreierte Seite neben den eigentlichen spezifischen Inhalten zusätzlich noch Logo, Navigation etc. einbauen zu müssen.Zusätzlich erreicht man so die Möglichkeit, das globale Layout und dessen Inhalte zentral verändern zu können, um z. B. im Rahmen einer Kampagne entsprechende Teaser oder aktuelle Nachrichten einblenden zu können.

Hierfür wird das Layout in ein Raster eingeteilt, das aus Bereichen für die globalen Elemente 'Header', 'Navigation', 'Footer' und einem 'Content' Bereich für den individuellen Seiteninhalt besteht:

Templates

Alle Seiten der Website basieren auf demselben globalen Template namens 'Document'. Die Zuweisung der Elemente 'Header', 'Navigation' und 'Footer' erfolgt auf der Ebene der Standardwerte für dieses Template in den Presentation Details.

Für den eigentlichen Seiteninhalt erzeugt man nun ein neues Template, einen 'DocumentContent', und ein entsprechendes Sublayout. Dieses Sublayout unterteilt den Inhaltsbereich noch einmal und fügt einen Bereich für die Darstellung von aktuellen Nachrichten hinzu. Dieser soll auf den meisten Seiten sichtbar sein, aber nicht auf allen. Die Seiten, die Nachrichten darstellen sollen, basieren auf dem neuen Template, bei den anderen Seiten kann man das 'Document' Template weiterverwenden.

Das 'DocumentContent' Template verwendet das 'Document' Template als Basis, erbt also die Konfiguration der Presentation Details, in denen die Zuordnung der globalen Elemente erfolgt ist. Zumindest ist es das, was man erwarten würde. Tatsächlich führt die Konfiguration der Presentation Details im 'DocumentContent' Template aber dazu, dass die Konfiguration der Presentation Details im 'Document' Template quasi überschrieben wird. Das Ergebnis ist, dass die eigentlich global konfigurierten Elemente nicht dargestellt werden.

Die Lösung

Damit sich das gewünschte Verhalten einstellt, muss in den Prozess eingegriffen werden, der die Seiten zur Darstellung bringt. Dabei müssen die Presentation Details der Templates so miteinander kombiniert werden, dass keine Informationen verloren gehen. Das ist in Sitecore aber problemlos möglich.

Um sich in den Rendering Prozess einzuklinken definiert man einen entsprechenden Prozessor, bzw. zwei in einer Konfigurationsdatei, die man im App\Include ablegt:

Der erste Prozessor dient zur Identifikation, ob es sich bei dem jeweiligen Template um eines handelt, bei dem die Presentation Details vererbt werden sollen. Hierfür wird in Sitecore ein neues Layout namens 'Inherit' erstellt und in den Templates verwendet, die entsprechend verarbeitet werden sollen.

Mithilfe des zweiten Prozessors werden die Presentation Details der verschiedenen Vererbungsebenen miteinander kombiniert, indem die Konfigurationen der geerbten Templates durchlaufen werden.

Homepage

Die Homepage wird nun so konfiguriert, dass sie das 'Inherit' Layout verwendet. Zudem werden die Platzhalter mit den Inhaltselementen 'News' und 'Flexslider' belegt: 

Damit haben wir einen neuen Seitentyp erzeugt, der an beliebiger Stelle verwendet werden kann. Weitere Seitentypen können auf diesem Wege implementiert werden, ohne dass das globale Layout geändert werden müsste. Und die Anforderung, die globalen Elemente - also Header, Navigation und Footer - nur einmal konfigurieren zu müssen, ist damit ebenfalls abgedeckt.

Fazit

Dass in Sitecore kein dedizierter Mechanismus für die Vererbung der Presentation Details existiert, sondern das Feld für die Speicherung dieser Informationen bei der Vererbung genauso behandelt wird, wie alle anderen Datenfelder, ist ein echter Mangel. In der Praxis wird man um eine entsprechende Lösung nicht herumkommen, um die Konfiguration einer kompletten Website handhaben zu können.

Hier bei Cocomore haben wir diese Unzulänglichkeit in Sitecore früh erkannt und behoben. Die vorgestellte Erweiterung ist Bestandteil unserer Sitecore Bibliothek und kommt jedem Projekt entsprechend zugute.