How to handle nested repeating regions in Dreamweaver TBBs in SDL Tridion 2011 SP1
tridion
Solution
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@@)
Problem
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.