Ich arbeite an DWT TBB in SDL Tridion 2011 SP1.
Ich habe ein eingebettetes Feld "body", das mehrwertig ist. In diesem eingebetteten Feld habe ich noch ein einfaches Textfeld "value", welches wiederum mehrwertig ist.
Um das Feld "value" darzustellen, muss ich zwei Wiederholungsschleifen verwenden.
Aber ich kann die Indeces der beiden Schleifen nicht unterscheiden.
Ich habe folgendes geschrieben:
%Vor%Ich kann die Felder nicht rendern.
Kann jemand helfen, mehrere verschachtelte Regionen in DWT TBB zu behandeln.
Danke.
Die Tridion-Übungsseite, auf die sich Neil bezog , ist eine gute Referenz. Aber diese Seite zeigt, wie man generisch über alle eingebetteten Felder iteriert. In Fällen, in denen Sie den Feldnamen kennen, werden die Dinge etwas einfacher. In Ihrem Fall ist das alles, was in Ihrem DWT benötigt wird:
%Vor%Zeile für Zeile:
body
Ihrer Komponente value
Ihres Schemas body
embeddable FieldPath
auf den aktuellen body
Wert, also body[0]
, body[1]
usw. und TemplateRepeatIndex
ist der Index des aktuellen value
. Also können wir mit diesem Wissen den richtigen RenderComponentField
Aufruf erstellen. Ich habe eine Komponente mit zwei body
-Feldern mit jeweils zwei value
-Feldern. Also ist das XML:
Die Ausgabe von der obigen DWT für diese Komponente lautet:
%Vor% Viele Leute haben Probleme, solche Konstrukte zu schreiben. Ich bin keine Ausnahme, ich habe gerade festgestellt, dass ich die meisten Fälle arbeiten kann, indem ich weiß, dass die entscheidenden Variablen sind: Field
, FieldPath
und TemplateRepeatIndex
. Wenn Sie Zweifel haben, betten Sie dieses Fragment einfach in jedem TemplateBeginRepeat
in Ihre DWT ein.
Hilft Ihnen die FieldPath Variable hier nicht?
Siehe die Tridion Practice Site für ein Beispiel für die Iteration über mehrwertige eingebettete Felder.
Wie Sie bereits bemerkt haben, können Sie den äußeren Schleifenindex innerhalb der inneren Schleife nicht verwenden. Der innere Schleifenindex wird den äußeren Schleifenindex ausblenden. Daher benötigen Sie eine Problemumgehung. Ich kann an 2 denken, die ich in der Vergangenheit benutzt habe:
Verwenden Sie eine C # TBB (entweder Assembly oder Fragment), um die Ausgabe zu generieren. Dies ist keine sehr nette Lösung, aber es ist praktisch. Sie könnten zumindest die Ausgabe der inneren Schleife generieren und die einzelnen Werte in Paketvariablen speichern. Dann können Sie in der äußeren Schleife einfach über die Werte iterieren und sie in die Ausgabe einschließen. Beispiel: Erstellen Sie Variablen mit dem Namen body_0
, body_1
usw. Geben Sie sie dann in der äußeren Schleife mit @@body_${TemplateRepeatIndex}@@
Verwenden Sie Dreamweaver-Funktionen, um den inneren Schleifenindex zu simulieren. Sie können eine Funktion für Set
eine Package-Element-Variable und eine für Increment
it haben. Dann benutze diese Variable in den Schleifen. Beispiel:
%Vor%
Sie müssen die Funktionen Set
und Increment
DWT selbst schreiben, um einen Wert im Paket zu speichern und zu erhöhen.
Versuchen Sie diesen Weg: -
%Vor%Ich habe nur eine Idee dazu. Wie wäre es mit diesem Weg?
%Vor% Ohne Verwendung von TemplateRepeatIndex
Für diejenigen, die Tridion 2009 ohne SP1-Version verwenden (wie unseren Kunden), kann die Variable 'FieldPath' nicht wie in den früheren Antworten vorgeschlagen verwendet werden. Aber es gibt eine einfache Möglichkeit, dies in der DWT selbst zu erreichen, wie im Beispielcode unten angegeben:
%Vor%Tags und Links tridion