2

我正在尝试编写 Dreamweaver TBB,但我被困在需要在不同模板级别获取字段值的地方。

下面是我的 XML,我需要将 formField 级别的 inputType 字段获取到输入模板级别。

<formField>
    <divClassName>fieldClassName</divClassName>
    <label>Please enter your Name</label>
    <labelId>labelNameId</labelId>
    <inputType>text</inputType>
    <input>
        <inputName>sam</inputName>
        <inputId>ssss</inputId>
        <inputSize>40</inputSize>
        <inputLabel>xxx</inputLabel>
        <inputValue>zzz</inputValue>
    </input>
    <input>
        <inputName>gf</inputName>
        <inputId>g</inputId>
        <inputSize>fdg</inputSize>
        <inputLabel>sg</inputLabel>
        <inputValue>gsdfg</inputValue>
    </input>
    <param1>ssss</param1>
    <param2>ssss</param2>
</formField>

要获得相同级别的值,我们可以使用

<!-- TemplateBeginRepeat name="Component.Fields.formField" -->
    @@inputType@@
<!-- TemplateEndRepeat -->

但我的要求是在输入模板级别获取 inputValue

<!-- TemplateBeginRepeat name="input" -->
    @@inputType@@
<!-- TemplateEndRepeat -->

此代码无法返回,因为输入模板级别不存在 inputType。所以我尝试使用:

<!-- TemplateBeginRepeat name="input" -->
    @@RenderComponentField("formField[0].inputType",0)@@
<!-- TemplateEndRepeat -->

这里有两个问题,当我使用 RenderComponentField 时,输出如下所示:

<tcdl:ComponentField name="formField[0].inputType" index="0">
    text
</tcdl:ComponentField>

它返回值以及我不需要的 tcdl 标签。

其次,我需要使用而不是直接给出 0 的索引TemplateRepeatIndex,但是如果我使用它会给出错误@@RenderComponentField("formField[TemplateRepeatIndex].inputType",0)@@

那么如果我们想在不同的模板级别获取字段值,我们如何实现这一点。

4

3 回答 3

2

As you have discovered, it is not possible to access the "outer" TemplateRepeatIndex from the "inner" loop with the standard DWT functions.

There are a few ways to solve this. The simplest is probably to write custom Dreamweaver callable functions that use the context variables to store and retrieve values.

This approach is described well, with accompanying source code, at Get and Set Variables in DWTs | SDL Tridion Developer

于 2013-02-06T14:03:42.940 回答
1

你必须使用下面的 $ 符号和 TemplateRepeatIndex

@@RenderComponentField("formField[${TemplateRepeatIndex}].inputType",0)@@

让我知道如果不工作

于 2013-02-06T07:40:04.483 回答
1

您的问题有点令人困惑,但似乎您有 2 个问题

  1. <tcdl:ComponentField/>你有一个你不想要的额外标签
  2. 使用时出现错误TemplateRepeatIndex

如果这不正确,请考虑修改您的问题。

对于问题编号 #1- 我可以假设您<tcdl:ComponentField/>在模板生成器中看到了吗?还是您在最终发布的页面中看到了这一点?该标签由@@RenderComponentField@@函数添加到输出中,以允许您将 TridionUI 标记的 SiteEdit 添加到输出中。如果您在模板末尾应用“默认完成操作”TBB,则不应出现在您发布的页面中。默认模板包含在应用任何 SiteEdit/UI 标记后清理此标记的代码。

对于您的第二个问题,请查看这些帖子“如何在 SDL Tridion 2011 SP1 中处理 Dreamweaver TBB 中的嵌套重复区域”和“ http://www.tridiondeveloper.com/get-and-set-variables-in-dwts '。

Nested/embeded fields can be confusing using the default Tridion syntax for Dreamweaver, so you might consider using the great GetExtension from Nuno Linhares. This will make your life much easier

于 2013-02-06T10:20:10.553 回答