ニールが参照したトリディオンの練習ページは良い参考資料です。しかし、そのページは、すべての埋め込みフィールドを一般的に反復する方法を示しています。フィールド名がわかっている場合は、少し簡単になります。あなたの場合、これがあなたのDWTに必要なすべてです:
<!-- TemplateBeginRepeat name="body" -->
<!-- TemplateBeginRepeat name="Field.value" -->
<div>@@RenderComponentField(FieldPath+".value",
TemplateRepeatIndex)@@ </div>
<!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->
1行ずつ:
body
コンポーネントのフィールドの値を繰り返し処理します
- 埋め込み可能なスキーマの
value
サブフィールドの値を繰り返し処理しますbody
- この段階で
FieldPath
は、は現在のbody
値、つまりbody[0]
、body[1]
などを参照し、現在TemplateRepeatIndex
ののインデックスですvalue
。したがってRenderComponentField
、この知識を使用して正しい呼び出しを作成できます。
例
body
それぞれ2つのフィールドを持つ2つのフィールドを持つコンポーネントがあり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
。疑わしい場合は、このフラグメントをすべての内のDWTに埋め込むだけTemplateBeginRepeat
です。
(FieldPath=@@FieldPath@@, TemplateRepeatIndex=@@TemplateRepeatIndex@@)