我们可以在DWT(布局)模板构建块中循环什么?

Alv*_*yes 7 tridion

我知道开箱即用,我们可以使用以下内容在DWT模板构建模块(TBB)中循环或迭代数组.

<!-- TemplateBeginRepeat name="array_name" -->
    <!-- template logic -->
<!-- TemplateEndRepeat -->
Run Code Online (Sandbox Code Playgroud)

文档描述了预定义的包项以及如何使用它们.

总之,我们可以使用:

  • Component 迭代组件或组件演示时引用当前组件
  • ComponentTemplate 迭代组件演示时引用当前组件模板(这将在页面级别)
  • Field 迭代字段和多值字段时引用当前字段.
  • FieldPath获取迭代项的完整路径.TemplateRepeatIndexTridion Practice Cookbook中看到的嵌套循环中使用它很有用.*
  • TemplateRepeatIndex,从零开始的循环计数.

我们可以在Components数组循环中的给定Component中执行嵌套循环,也可以Fields在迭代多值字段时有条件地检查特定的字段名称.

我通过嵌套DWT的语法看到了双重查找(例如@@Image_${TemplateRepeatIndex}@@ ,如Yet Another Tridion Blog所述).

问题(S)

可以肯定的是,这些是复合模板中的项目或数组/集合Package,正确(默认情况下存在或由我们的代码放置)?

我们可以"迭代"一个包中的单独项目吗?

例如,如果我们有单独的组件Package,我们可以用类似的东西"迭代"它们@@Component${TemplateRepeatIndex}@@吗?

  • COMPONENT1
  • COMPONENT2
  • Component3

我看到我可以在循环中引用这样的项目,但是我看到的所有内容都表明以下内容是不可能的:

<!-- TemplateBeginRepeat name="@@Component${TemplateRepeatIndex}@@" -->
    <!-- do something with @@Component${TemplateRepeatIndex}@@ -->
<!-- TemplateEndRepeat -->
Run Code Online (Sandbox Code Playgroud)

Bar*_*man 5

基本上DWT模板允许您迭代数组,而在Package中只有一种我们可以推送的数组,即Component Presentation数组(可以包含组件模板TCMURI,但也只包含组件TCMURI).

通过这个你可以推送(我称之为)包中的虚拟组件数组,您可以使用它来循环然后通过双查找功能,使其像循环一组Package变量一样工作.

例如,你在包中推入一个包含三个虚拟TCMURI的组件数组(它们都可以是tcm:0-0-0,它们具有什么值并不重要).然后创建三个名为Var_0,Var_1,Var_2的包变量.现在在您的DWT模板中,您可以使用:

<!-- TemplateBeginRepeat name="MyDummyArray" -->
  @@Var_${TemplateRepeatIndex}@@
<!-- TemplateEndRepeat -->
Run Code Online (Sandbox Code Playgroud)

这将导致您的三个包变量的值.

遗憾的是,无法直接创建字符串数组或字段数组,因此对于您想要循环的所有内容,您将不得不使用现有的字段数组,或创建"虚拟组件数组".

从中我们确实可以得出结论,你的例子不可能像写的一样,但当你在包中推送一个虚拟数组时,你可以循环它并拥有你想要的东西.