如何在SDL Tridion 2011 SP1中处理Dreamweaver TBB中的嵌套重复区域
我正在SDL Tridion 2011 SP1的DWT TBB上工作 我有一个多值的嵌入字段“body”。在这个嵌入式字段中,我还有一个简单的文本字段“value”,它也是多值的 要呈现“value”字段,我必须使用两个重复循环 但我无法区分两个循环的索引 我写了如下如何在SDL Tridion 2011 SP1中处理Dreamweaver TBB中的嵌套重复区域,tridion,Tridion,我正在SDL Tridion 2011 SP1的DWT TBB上工作 我有一个多值的嵌入字段“body”。在这个嵌入式字段中,我还有一个简单的文本字段“value”,它也是多值的 要呈现“value”字段,我必须使用两个重复循环 但我无法区分两个循环的索引 我写了如下 <!-- TemplateBeginRepeat name="Component.Fields.body" --> <!-- TemplateBeginRepeat name="Component.Fie
<!-- TemplateBeginRepeat name="Component.Fields.body" -->
<!-- TemplateBeginRepeat name="Component.Fields.body[${TemplateRepeatIndex}].value" -->
<div>@@RenderComponentField("Fields.body[${TemplateRepeatIndex}].value", TemplateRepeatIndex)@@ </div>
<!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->
@@RenderComponentField(“Fields.body[${TemplateRepeatIndex}].value”,TemplateRepeatIndex)@@
我无法渲染这些字段
任何人都可以帮助处理DWT TBB中的多个嵌套区域
谢谢。请尝试以下方法:-
<!-- TemplateBeginRepeat name="Component.Fields.body" -->
@@Push("PrimaryIndex", TemplateRepeatIndex)@@
<!-- TemplateBeginRepeat name="Component.Fields.body[${PrimaryIndex}].value" -->
@@Push("SecondaryIndex", TemplateRepeatIndex)@@
<div>@@RenderComponentField("Fields.body[${PrimaryIndex}].value", ${SecondaryIndex})@@ </div>
<!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->
@@推送(“PrimaryIndex”,TemplateRepeatIndex)@@
@@推送(“第二索引”,TemplateRepeatIndex)@@
@@RenderComponentField(“Fields.body[${PrimaryIndex}].value”,${SecondaryIndex})@@
更新1:
只是我有个主意。这样做怎么样
<!-- TemplateBeginRepeat name="Component.Fields.body" -->
<!-- TemplateBeginRepeat name="value" -->
<div>@@Field@@</div>
<!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->
@@字段@@
如您所注意到的,如果不使用任何
TemplateRepeatIndex
,则无法在内部循环中使用外部循环索引。内部循环索引将隐藏外部循环索引。因此,您需要一种变通方法。我能想到我在过去使用过的两种方法:
body\u 0
,body\u 1
等的变量。然后使用@@body\u0${TemplateRepeatIndex}@
设置
一个包项目变量,以及一个函数递增
它。然后在循环中使用此变量。例如:
@@集合(“i”,0)@@
@@Component.Fields.body[${i}].value[${TemplateRepeatIndex}]
@@增量(“i”)@@
您必须自己编写
Set
和Increment
DWT函数来存储和增加包中的值。变量在这方面对您没有帮助吗
有关迭代多值嵌入字段的示例,请参见。是一个很好的参考。但该页面显示了如何对所有嵌入字段进行一般性迭代。在知道字段名的情况下,事情会变得简单一些。在您的情况下,这就是DWT所需的全部内容:
@@RenderComponentField(FieldPath+“.value”,
TemplateRepeatIndex)@
逐行:
正文
字段的值value
子字段的值字段路径
引用当前的正文
值,因此正文[0]
,正文[1]
等,而TemplateRepeatIndex
是当前值的索引。因此,我们可以利用这些知识构造正确的RenderComponentField
调用
body
字段,每个字段都有两个value
字段。因此,XML是:
正文1.1
正文1.2
正文2.1
正文2.2
上述DWT在该组件上的输出为:
body1.value1
正文1.2
正文2.1
正文2.2
调试这些情况
许多人在编写这样的结构时都有问题。我也不例外,我刚刚发现,如果知道关键变量是:Field
、FieldPath
和templaterepeattindex
,我就可以让大多数案例正常工作。如果有疑问,只需将此片段嵌入每个模板beginrepeat
中的DWT中即可
(FieldPath=@@FieldPath@@, TemplateRepeatIndex=@@TemplateRepeatIndex@@)
对于那些使用Tridion 2009而不使用SP1版本的用户(如我们的客户),不能按照前面回答中的建议使用“FieldPath”变量。但有一种简单的方法可以在DWT中实现这一点,示例代码如下所示:
<!-- TemplateBeginRepeat name="Component.body" -->
<!-- TemplateBeginRepeat name="Field.value" -->
<div> @@Field@@> </div>
<!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->
@@字段@@@
谢谢您提供的信息。您还可以帮助我在DWTT中编写增量函数吗SDL Live文档提供了一个关于如何实现自定义函数的很好的部分。这里还有一个Nickoli Roussakov的例子:不需要定制函数也不需要定制TBB来实现这一点。查看我的答案,如果你同意,请向上投票。我得到的错误是推送功能不可用。你能帮我克服这个错误吗?我想Push一定是Siva使用的自定义函数。默认情况下不可用。@DaveHoulker:Push是一个自定义函数。@Siva Charan。我认为这将不允许我们实现网站编辑功能。如果我是,请纠正我wrong@Siva当前位置您与最后一个示例非常接近。唯一需要考虑的是该内部中的一个@RenderComponentField(FieldPath,TemplateRepeatIndex)@@。我会写在一个单独的答案中。我试过使用FieldPath变量。但仍然没有新的平静。aaa aa@@RenderComponentField(FieldPath,TemplateRepeatIndex)@@n您说得对,尼尔,问题在于没有正确地遵循该示例。我将在一个单独的例子中介绍如何做到这一点。正如尼尔所说,您的问题在于尝试使用TemplateRepeatIndex访问当前字段。我会在一个单独的答案中写一个最小的样本(因为这允许我包含格式)。非常好的答案。多谢各位
<!-- TemplateBeginRepeat name="Component.body" -->
<!-- TemplateBeginRepeat name="Field.value" -->
<div> @@Field@@> </div>
<!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->