2012-12-19 17 views
7

Rozumiem, że po wyjęciu z pudełka możemy zapętlić lub powtórzyć ponad tablice w blokach szablonów DWT (TBB) z następującymi elementami.Co możemy zrobić w pętli w blokach szablonów DWT (Layout)?

<!-- TemplateBeginRepeat name="array_name" --> 
    <!-- template logic --> 
<!-- TemplateEndRepeat --> 

documentation describes pre-defined package items jak how to use them.

Podsumowując możemy użyć:

  • Component odwołać bieżącego składnika podczas iteracji nad Components lub komponentu Prezentacje
  • ComponentTemplate odwołać bieżącego szablonu komponentu podczas iteracji nad Prezentacje składnik (to byłoby na stronie -level)
  • Field do odniesienia do bieżącego pola podczas iteracji po polach oraz polach wielowartościowych.
  • FieldPath, aby uzyskać pełną ścieżkę do powtarzanego elementu. Przydaje się przy korzystaniu z TemplateRepeatIndex w pętli zagnieżdżonej, jak widać w The Tridion Practice Cookbook. *
  • TemplateRepeatIndex, liczba pętli w oparciu o zero.

Możemy zrobić zagnieżdżone pętle na Fields w danym komponencie wewnątrz pętli tablicy składników, jak również warunkowo sprawdzanie konkretną nazwę pola podczas iteracji nad polami wielowartościowe.

Widziałem podwójne sprawdzanie przez zagnieżdżanie składni DWT (np. @@Image_${TemplateRepeatIndex}@@as described on Yet Another Tridion Blog).

Pytanie (s)

Aby upewnić się, czy są to elementy macierzy/Kolekcje w szablonie Związek na Package, w prawo (albo tam domyślnie lub umieszczony przez naszego kodu)?

Czy możemy ewentualnie "powtórzyć" poszczególne elementy w paczce?

Na przykład, jeśli mamy indywidualne komponenty w Package, czy możemy "iterować" je z czymś takim jak @@Component${TemplateRepeatIndex}@@?

  • komponent1
  • komponent2
  • Component3

widzę mogę odniesienia taka pozycja wewnątrz pętli, ale wszystko widziałem sugeruje poniższych nie jest możliwe:

<!-- TemplateBeginRepeat name="@@Component${TemplateRepeatIndex}@@" --> 
    <!-- do something with @@Component${TemplateRepeatIndex}@@ --> 
<!-- TemplateEndRepeat --> 

Odpowiedz

5

Zasadniczo szablon DWT pozwala na iterowanie rrays i w Pakiecie istnieje tylko jeden rodzaj tablic, które możemy przesuwać, czyli tablica Prezentacji Komponentów (która może zawierać TCMURI z Komponentowego Szablonu, ale także tylko Komponentowe TCMURI).

Dzięki temu możesz wcisnąć (co nazywam) Dummy Component Array w pakiecie, którego możesz użyć do przechodzenia w pętlę, a następnie poprzez funkcję podwójnego wyszukiwania , aby działała jak pętla nad zestawem Zmienne pakietowe.

Na przykład, pchasz w pakiecie Tablicę komponentów z trzema fałszywymi TCMURI (wszystkie mogą być tcm: 0-0-0, nie ma znaczenia, jaką mają wartość). Następnie tworzysz trzy zmienne pakietowe o nazwach: Var_0, Var_1, Var_2. Teraz w swoim szablonie DWT możesz użyć:

<!-- TemplateBeginRepeat name="MyDummyArray" --> 
    @@Var_${TemplateRepeatIndex}@@ 
<!-- TemplateEndRepeat --> 

Co spowoduje, że otrzymasz wartości trzech zmiennych pakietu.

Niestety, nie ma sposobu, aby utworzyć tablicę ciągów bezpośrednio lub tablicę pola dla tej sprawy, więc na wszystko, co chcesz przełączyć, będziesz musiał użyć istniejącej tablicy pól lub utworzyć "Dummy Component Array" ".

Z tego możemy wywnioskować, że twój przykład nie jest możliwy w formie pisemnej, ale kiedy wepchniesz do nich również fałszywą tablicę w Paczce, możesz zapętlić to i mieć to, czego potrzebujesz.

+0

Dzięki Bart, ostatnio widziałem wariacje tego pytania i zastanawiałem się, w jaki sposób możemy "uratować" licznik od tego, co tworzy zmienne pakietu. Dobry towar. –

0

Nie mogę utworzyć fałszywego komponentu Array z tcm: 0-0-0. Mówi, że przedmiot nie istnieje. Czy istnieje jakakolwiek inna możliwość przesłania fałszywej tablicy przez pakiet, dzięki czemu tablica może być zapętlona w DWT.

Powiązane problemy