4

我正在 SDL Tridion 2011 SP1 中开发 Dreamweaver TBB。在 TBB 中,我使用来自不同组件表示的数据。

My Template Building Block looks like this.

主要成分:

<div>@@Component.Schema.Title@@</div>

<!-- TemplateBeginRepeat name="Fields.link" -->

    @@RenderComponentPresentation(Field, "tcm:1-8142-32")@@

<!-- TemplateEndRepeat -->

组件模板:tcm:1-8142-32

它的 DWT TBB 看起来像这样。

<!-- TemplateBeginIf cond="Component.Fields.text" --> 
    <div>@@RenderComponentField("text",0)@@</div>
<!-- TemplateEndIf -->

当我预览组件时,我得到了输出,并且所有组件演示都按预期执行。

输出:

SchemaName
    data1
    data2

然后我创建了带有页面 TBB 的页面。

<html>
    <head></head>
    <body>
        <!-- TemplateBeginRepeat name="Components" -->
            @@RenderComponentPresentation()@@
        <!-- TemplateEndRepeat -->
    </body>
</html>

输出不如预期。组件模板“tcm:1-8142-32”未执行。

输出:

SchemaName

我也想让 SiteEdit 成为链接组件。

我是否需要在现有模板中添加额外的模板?我正在使用 Tridion 2012 UI。

我知道我们需要 add isQueryBased,属性必须设置为 true。

如果是,任何人都可以帮助该命令将其设置为真的吗?

我不知道问题出在哪里。

任何人都可以帮我修改代码并为嵌入式组件实现 SiteEdit 吗?

4

1 回答 1

6

在 Dreamweaver 模板中,可以通过两种方式调用 RenderComponenetPresentation()。

  1. 如果您正在遍历页面上的组件演示文稿(我认为这是您在做什么?)

  2. 如果由于某种原因您需要使用不同的模板渲染组件,而不是您将其添加到页面的模板。

假设第一是您正在做的事情,那么您已经使用正确的模板将组件添加到页面中。因此,您可以调用 @@RenderComponentPresentation()@@ 而不使用这样的参数:

<html>
    <head></head>
    <body>
        <!-- TemplateBeginRepeat name="Components" -->
            @@RenderComponentPresentation()@@
        <!-- TemplateEndRepeat -->
    </body>
</html>

“IsQueryBased”与您的问题无关。这连接到 SiteEdit 和动态组件演示。

更新 -

看起来您在这里有 2 个问题:

  1. 如何为链接组件调用 RenderComponentPresentation
  2. 如何使组件成为“SiteEditable”

查看问题 1 - 假设您的组件数组不是页面上的组件演示文稿,您的初始方法几乎是正确的:

@@RenderComponentPresentation(Component.ID,"tcm:xx-xx-xx")@@

您应该能够从数组中获取组件 ID,但您需要自己指定 ComponentTemplate ID。

出于测试目的,首先对组件模板的 Tcm ID 进行硬编码。

由于将 Tcm ids 放在模板中是不好的做法,因此您需要编写一个 TBB 以使其在包中可供您使用。然后,您可以替换您用于测试的 Tcm Id。

关于您的 SiteEdit 问题,本指南可能会有所帮助,如果没有发布一个新问题,详细说明您的问题的确切性质。

于 2012-05-25T06:37:35.337 回答