【问题标题】:Looping component links in an Embedded field在嵌入式字段中循环组件链接
【发布时间】:2012-09-07 11:17:13
【问题描述】:

我们有一个“组件 A”,它有一个“嵌入字段”类型的 multivalue 字段。 嵌入的字段又具有类型为“组件链接”的多值字段。

这看起来像: 组件 A -> 嵌入式 Shcema 字段 -> 组件链接

如何在dreamweaver中迭代和访问'组件链接'的字段? 此外,组件字段支持三种不同的模式,我们想在 Dreamweaver 中检查这些模式名称。

我发现this post 很有用。但是更多细节确实很棒。

【问题讨论】:

  • 如果您使用 2011,请查看 razor 调解器 - 让这些事情变得微不足道...

标签: tridion tridion-2011 dwt dreamweaver-templates


【解决方案1】:

看看这些问题:

还有来自 Tridion 练习食谱的这一页:

它们涵盖了您在访问 DWT 中的字段时可能遇到的最常见问题。

如果这些不能回答您的问题,更新您的问题

  1. 您的组件的相关 XML 片段
  2. DWT 片段显示您已经尝试过的内容

【讨论】:

    【解决方案2】:

    您可以轻松地遍历多值嵌入字段的组件链接,但没有直接的方法来获取组件链接值,您必须使用 dwt 扩展名或 .net tbb。 sdltridionworld.com 上有一些可用。

    我之前使用嵌套模板进行了此操作。您也可以根据循环中组件链接字段组件的模式从您的主 dwt tbb 尝试嵌套/子模板。

    我还建议使用剃须刀模板。

    【讨论】:

    • 不是关于循环访问组件链接本身的问题吗?这些是组件本身的字段,因此可以通过 Tridion 的标准 DWT 处理访问。
    【解决方案3】:

    您可以在嵌入式架构字段段落中迭代多值字段段落,如下所示:

    <!-- TemplateBeginRepeat name="Component.Fields.paragraphs" -->
    
        <h2>@@Field.header@@ (@@TemplateRepeatIndex@@)</h2>
        <!-- TemplateBeginRepeat name="Field.paragraph" -->
            <p>@@Field@@</p>
        <!-- TemplateEndRepeat -->
    
    <!-- TemplateEndRepeat -->
    

    【讨论】:

      【解决方案4】:

      正如 Vikas 之前提到的,在多值嵌入模式字段的多值组件链接字段上重复是相对简单的。您的 DWT 代码应遵循以下格式:

      <!-- TemplateBeginRepeat name="XML Name of Embedded Schema Fields" -->
          <!-- TemplateBeginRepeat name="XML Name of multivalued Component Link field" -->
              @@Field@@  - Should write out the TCM ID of your linked component
          <!-- TemplateEndRepeat -->
      <!-- TemplateEndRepeat -->
      

      但是,您无法使用“开箱即用”的 Dreamweaver 模板访问这些组件的字段或架构详细信息。

      你可以:

      1. 在您的 Content Manager 服务器上安装 Dreamweaver Get eXtension,这将允许您使用 @@Get(...)@@ 语法检索链接组件的字段(以及其他内容)
      2. 在 Dreamweaver 模板之前使用来自 Generic SDL Tridion 2011 Template Building Blocks 的“获取链接组件”.Net TBB,这会将链接的组件放入模板包中,以便您可以直接对其进行迭代
      3. 编写您自己的 .Net TBB 来处理与这些链接相关的特定业务逻辑并输出 html(不推荐)或您可以从 DWT 处理的命名包项目、项目或项目数组。
      4. 使用@@RenderComponentPresentation(Field, "tcm:x-xx-32")@@ 从您的 DWT 调用另一个(嵌套)组件模板
      5. 以上任意组合

      【讨论】:

        【解决方案5】:

        请尝试使用以下代码:

                  <!-- TemplateBeginRepeat name="paragraphs" -->
                       <!-- TemplateBeginRepeat name="Internal_Link" -->
                         <!-- TemplateBeginIf cond = "Internal_Link != ''" -->
                            <p> @@Component.ID@@ </p>
                         <!-- TemplateEndIf -->
                       <!-- TemplateEndRepeat -->
                 <!-- TemplateEndRepeat -->
        

        要检查第零个组件,您可以使用以下代码:

                  <!-- TemplateBeginRepeat name="paragraphs0.Internal_Link" -->
        

        【讨论】:

        • 我认为,要获取段落0,您还需要 GetLinkedComponent TBB。
        • 如果paragraphs 是一个组件链接字段,那么确实需要一个 TBB 来将链接的组件推送到包中。但从命名上看,paragraphs 听起来像是当前上下文组件上的一个多值字段,在这种情况下,您可以使用 Tridion 的内置 DWT 支持查看这些值,而无需任何自定义 TBB。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-13
        • 1970-01-01
        相关资源
        最近更新 更多