Behandeln verschachtelter wiederkehrender Regionen in Dreamweaver-TBBs in SDL Tridion 2011 SP1

7

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.

    
Patan 25.04.2012, 05:00
quelle

5 Antworten

15

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:

  1. Iterieren Sie über die Werte des Feldes body Ihrer Komponente
  2. Iterieren Sie über die Werte des Unterfelds value Ihres Schemas body embeddable
  3. Zu diesem Zeitpunkt bezieht sich der 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.

Beispiel

Ich habe eine Komponente mit zwei body -Feldern mit jeweils zwei value -Feldern. Also ist das XML:

%Vor%

Die Ausgabe von der obigen DWT für diese Komponente lautet:

%Vor%

Debuggen dieser Situationen

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.

%Vor%     
Frank van Puffelen 25.04.2012, 19:38
quelle
5

Hilft Ihnen die FieldPath Variable hier nicht?

Siehe die Tridion Practice Site für ein Beispiel für die Iteration über mehrwertige eingebettete Felder.

    
Neil 25.04.2012 07:53
quelle
3

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:

  1. 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}@@

  2. aus
  3. 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.

    
Mihai Cădariu 25.04.2012 06:35
quelle
1

Versuchen Sie diesen Weg: -

%Vor%

UPDATE 1:

Ich habe nur eine Idee dazu. Wie wäre es mit diesem Weg?

%Vor%

Ohne Verwendung von TemplateRepeatIndex

    
Siva Charan 25.04.2012 06:25
quelle
0

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%     
Shahid Eqamuddin 20.03.2013 17:27
quelle

Tags und Links