7

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

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

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

总之,我们可以使用:

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

我们可以在组件数组循环内的给定组件上进行嵌套循环Fields,以及在迭代多值字段时有条件地检查特定字段名称。

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

问题)

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

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

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

  • 组件1
  • 组件2
  • 组件3

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

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

2 回答 2

5

基本上,DWT 模板允许您迭代数组,并且在包中只有一种我们可以自己推送的数组,即组件表示数组(它可以包含组件模板 TCMURI,但也只能包含组件 TCMURI)。

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

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

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

这将导致您获得三个包变量的值。

不幸的是,没有办法直接创建字符串数组或字段数组,因此对于您想要循环的所有内容,您必须使用现有的字段数组,或创建一个“虚拟组件数组”。

从中我们确实可以得出结论,您的示例不可能像所写的那样,但是当您在 Package 中也推送一个带有它们的虚拟数组时,您可以遍历它并拥有您想要的东西。

于 2012-12-19T09:06:39.837 回答
0

我无法使用 tcm:0-0-0 创建一个虚拟组件数组。它说项目不存在。是否有任何其他可能性通过包传递一个虚拟数组,以便可以在 DWT 中循环该数组。

于 2016-02-08T08:49:38.400 回答