Neil 提到的Tridion 练习页面是一个很好的参考。但是该页面显示了如何对所有嵌入字段进行通用迭代。如果您知道字段名称,事情会变得容易一些。在您的情况下,这就是您的 DWT 中所需的全部内容:
<!-- TemplateBeginRepeat name="body" -->
<!-- TemplateBeginRepeat name="Field.value" -->
<div>@@RenderComponentField(FieldPath+".value",
TemplateRepeatIndex)@@ </div>
<!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->
逐行:
- 迭代
body
组件字段的值
- 迭代可嵌入模式的
value
子字段的值body
- 在这个阶段,
FieldPath
指的是当前body
值,所以body[0]
,body[1]
等等,TemplateRepeatIndex
是当前的索引value
。所以我们可以RenderComponentField
用这些知识构造正确的调用。
例子
我有一个包含两个body
字段的组件,每个字段都有两个value
字段。所以XML是:
<Content xmlns="uuid:8841d68e-7b1b-45cd-a6d6-7e7da5de3ef9">
<body>
<value>body1.value1</value>
<value>body1.value2</value>
</body>
<body>
<value>body2.value1</value>
<value>body2.value2</value>
</body>
</Content>
上述 DWT 在此组件上的输出为:
<div><tcdl:ComponentField name="body[0].value"
index="0">body1.value1</tcdl:ComponentField></div>
<div><tcdl:ComponentField name="body[0].value"
index="1">body1.value2</tcdl:ComponentField></div>
<div><tcdl:ComponentField name="body[1].value"
index="0">body2.value1</tcdl:ComponentField></div>
<div><tcdl:ComponentField name="body[1].value"
index="1">body2.value2</tcdl:ComponentField></div>
调试这些情况
许多人在编写这样的结构时遇到问题。我也不例外,我刚刚发现通过知道关键变量是:和Field
,我可以让大多数情况下工作。如有疑问,只需将此片段嵌入到每个.FieldPath
TemplateRepeatIndex
TemplateBeginRepeat
(FieldPath=@@FieldPath@@, TemplateRepeatIndex=@@TemplateRepeatIndex@@)