调试这些情况
许多人在编写此类结构时遇到问题.我也不例外,我刚刚发现,通过知道关键变量是:Field
、FieldPath
和 TemplateRepeatIndex
,我可以使大多数案例工作.如有疑问,只需将此片段嵌入到每个 TemplateBeginRepeat
内的 DWT 中即可.
(FieldPath=@@FieldPath@@, TemplateRepeatIndex=@@TemplateRepeatIndex@@)
I am working on DWT TBB in SDL Tridion 2011 SP1.
I have a embedded field "body" which is multivalued. In this embedded field I have one more simple Text field "value", which is again multivalued.
To render the "value" field I have to use two repeating loops.
But I am unable to differentiate the Indeces of the both loops.
I have written as follows.
<!-- TemplateBeginRepeat name="Component.Fields.body" -->
<!-- TemplateBeginRepeat name="Component.Fields.body[${TemplateRepeatIndex}].value" -->
<div>@@RenderComponentField("Fields.body[${TemplateRepeatIndex}].value", TemplateRepeatIndex)@@ </div>
<!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->
I am unable to render the fields.
Can any one help how to handle multiple nested regions in DWT TBB.
Thank you.
解决方案
The Tridion practice page that Neil referred to is a good reference. But that page shows how to generically iterate over all embedded fields. In cases where you know the field name, things get a bit easier. In you case, this is all that is needed in your DWT:
<!-- TemplateBeginRepeat name="body" -->
<!-- TemplateBeginRepeat name="Field.value" -->
<div>@@RenderComponentField(FieldPath+".value",
TemplateRepeatIndex)@@ </div>
<!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->
Line by line:
- Iterate over the values of the
body
field of your Component
- Iterate over the values of the
value
subfield of your body
embeddable schema
- At this stage the
FieldPath
refers to the current body
value, so body[0]
, body[1]
, etc. and TemplateRepeatIndex
is the index of the current value
. So we can construct the correct RenderComponentField
call with this knowledge.
Example
I have a Component with two body
fields, each with two value
fields. So the XML is:
<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>
The output from the above DWT on this Component is:
<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>
Debugging these situations
Many people have problems writing constructs like these. I am no exception, I have just found that I can get most cases working by knowing that the crucial variables are: Field
, FieldPath
and TemplateRepeatIndex
. When in doubt, simply embed this fragment into your DWT inside every TemplateBeginRepeat
.
(FieldPath=@@FieldPath@@, TemplateRepeatIndex=@@TemplateRepeatIndex@@)
这篇关于如何在 SDL Tridion 2011 SP1 中处理 Dreamweaver TBB 中的嵌套重复区域的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!