Navigation and service panel


Content

This text is fallbacked from the German Version. If you need use Google Translate


Der Gebrauch von Item Renderers

By Martin Haas on 25. July 2013, No comments

Leider ist in der Sitecore MVC-API der Gebrauch von Item Renderers nur sehr knapp beschrieben, obwohl ihr Einsatz einiges erleichtern kann. Dieser Beitrag zeigt anhand eines einfachen Beispiels auf, wie ein Item Renderer effizient benutzt werden kann.

Damit das Beispiel möglichst anschaulich ist, wird ein häufiger Fall verwendet: Die Ausgabe von Kontakten.

Das Item

Das Template eines Kontakt-Items hat der Einfachheit halber nur folgende Felder: Firstname (Single-Line Text), Lastname (Single-Line Text), Picture (Image).

Das View rendering

Da man bei Item Renderers grundsätzlich keinen Controller braucht (man weiss ja schon, was man ausgeben will), wird ein View rendering (Name: Contact Renderer) erstellt. Sitecore stellt uns hierfür ein Default-Model zur Verfügung, welches für dieses Beispiel vollkommen ausreicht. Daher muss lediglich das Feld Path ausgefüllt werden, indem der Pfad unserer View angeben wird (z.B.: /View/Contact.cshtml).

Natürlich kann man auch ein eigenes Model verwenden. Dazu muss man ein Model-Item erstellen und dieses in der View im entsprechendem Feld referenzieren. Ausserdem muss dieses Model dann auch im cshtml-File verwendet werden.

Die View

Unsere View arbeitet mit dem RenderingModel, welches von Sitecore per Default erwartet wird, wenn in der View rendering kein anderes angegeben ist. Der simpel gehaltene Code für die Ausgabe eines Kontaktes sieht folgendermassen aus: 

<pre class="brush:csharp;" xml:space="preserve">@using Sitecore.Mvc @model Sitecore.Mvc.Presentation.RenderingModel

@Html.Sitecore().Field("Firstname") @Html.Sitecore().Field("Lastname")

@Html.Sitecore().Field("Picture")

 

Zuweisung der Renderers

Durch die Zuweisung von Renderers weiss das Item selber, welche Renderings es aufrufen muss, um dargestellt zu werden. Da dies meist auf alle Item des selben Templates zutrifft, setzt man die Renderers am Besten in den __Standard Values unter Layout - Renderers. Wie der Name schon sagt, können mehrere Renderers pipe-separiert angegeben werden. Die Referenz kann dabei mittels ID oder Item-Pfad erfolgen. Diese Renderers werden dann nacheinander ausgeführt.

Im unstenstehendem Bild werden 2 Renderers referenziert: Der erste über die ID, der zweite über den Pfad.

Zuweisung von Renderers mittels ID oder Pfad.

Aufruf des Items

Damit das Item gerendert werden kann, muss es im Code aufgerufen werden. Dies kann man zum Beispiel machen, in dem man einen Resources-Folder für die Kontakte erstellt und einige Kontakte über eine Multilist einem Item zuweist. Natürlich bedeutet dies dann auch, dass man in der entsprechenden View (oder im ViewModel) die Kontakt-Items holen und rendern muss:

<pre class="brush:csharp; highlight:[7];" xml:space="preserve">@if (!string.IsNullOrWhiteSpace(Model.Item["Contacts"])) { MultilistField field = this.Model.Item.Fields["Contacts"];

foreach (var contact in field.GetItems())
{
    @Html.Sitecore().ItemRendering(contact)
}

}

In Zeile 7 wird das Item gerendert. Durch die Angabe der Renderers ist ihm bekannt, welche und in welcher Reihenfolge die View Renderings angewandt werden sollen und der Programmierer muss sich um dies nicht mehr kümmern.
Somit kann man ein Kontakt-Item an jeder beliebigen Stelle ausgeben. Man kann sogar so weit gehen, dass man in einer Multilist mehrere Items mit verschiedenen Templates und Renderers hat. Beim Auslesen der Liste muss man sich dann nicht darum kümmern, um was für ein Item es sich genau handelt.

Categories  Best Practice Tags  Rendering  MVC

No comments

Add your comment

Your email address will not be published. Required fields are marked *

*