如何在SDL Tridion 2011 SP1中处理Dreamweaver TBB中的嵌套重复区域

如何在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

我正在SDL Tridion 2011 SP1的DWT TBB上工作

我有一个多值的嵌入字段“body”。在这个嵌入式字段中,我还有一个简单的文本字段“value”,它也是多值的

要呈现“value”字段,我必须使用两个重复循环

但我无法区分两个循环的索引

我写了如下

<!-- 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

,则无法在内部循环中使用外部循环索引。内部循环索引将隐藏外部循环索引。因此,您需要一种变通方法。我能想到我在过去使用过的两种方法:

  • 使用C#TBB(程序集或片段)生成输出。这不是一个很好的解决方案,但它是实用的。您至少可以生成内部循环的输出,并将各个值存储在包变量中。然后在外部循环中,您可以简单地迭代这些值并将它们包含在输出中。示例:创建名为
    body\u 0
    body\u 1
    等的变量。然后使用
    @@body\u0${TemplateRepeatIndex}@

  • 使用Dreamweaver函数模拟内环索引。您可以使用一个函数
    设置
    一个包项目变量,以及一个函数
    递增
    它。然后在循环中使用此变量。例如:

  • 
    @@集合(“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 -->