FieldRenderer - Holen Sie sich einen spezifischen Feldnamen aus verschiedenen Vorlagenabschnitten
Frage
Gibt es eine Möglichkeit, einen bestimmten Feldnamen aus einer Vorlage mit mehreren Abschnitten zu einer FeldRenderer -Steuerung zu erhalten?
F.ex. Ich habe eine Vorlage mit den Abschnitten "Daten" und "Data2", beide haben ein Einzel-Text-Feld namens "Text". Gibt es eine Möglichkeit, meinen FieldRenderer das Feld "Text" in Abschnitt "Data2" zu erhalten
Es wäre schön, wenn einer der folgenden Vorschläge funktionieren würde:
<sc:FieldRenderer ID="test" runat="server" FieldName="Text" Section="Data2" />
<sc:FieldRenderer ID="test" runat="server" FieldName="Data2/Text" />
Br Larre
Lösung
Obwohl es absichtlich so entwickelt wurde (wir möchten nicht, dass Sitecore-Entwickler Zeit mit Abschnittsnamen verschwenden), ist es meiner Meinung nach sinnvoll, so etwas einzubeziehen. Lassen Sie mich dies als Feature -Anfrage auflisten.
Wenn Sie dieses Richtige kennenlernen möchten, sollten Sie zunächst verstehen, wie der FieldRenderer funktioniert. Es startet eine Pipeline namens "Renderfield". Im zweiten Schritt wird das FieldValue gelesen:
Ersetzen Sie diese durch Ihre eigene kundenspezifische Klasse durch so etwas:
public void Process(RenderFieldArgs args)
{
Assert.ArgumentNotNull(args, "args");
if(args.RawParameters.Contains("Section"))
{
//Parse args.RawParameters
//Extract Section data
//Take args.Item.Template
//Resolve section
//Resolve fieldvalue
//Set this field value as args.Results.FirstPart
}
if (!string.IsNullOrEmpty(args.FieldValue))
{
args.Result.FirstPart = args.FieldValue;
}
else
{
args.Result.FirstPart = args.Item[args.FieldName];
}
}
Etwas in der Linie von:
args.Result.FirstPart = args.Item[args.Item.Template.GetSection("sectionName").GetField(args.FieldName).ID];
Aber jetzt mit Fehlerprüfungen :)
Andere Tipps
Laut offizielle Dokumentation von Sitecore müssen mir Feldnamen über Abschnitte hinweg eindeutig eindeutig sind.
Dies wurde auch besprochen hier