在SDL Tridion 2011中的Dreamweaver模板构建块中处理多个组件演示文稿

Pat*_*tan 4 tridion tridion-2011

我正在使用SDL Tridion 2011 SP1中的Dreamweaver TBB.在TBB中,我使用来自不同组件演示的数据.

My Template Building Block looks like this.
Run Code Online (Sandbox Code Playgroud)

主要成分:

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

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

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

<!-- TemplateEndRepeat -->
Run Code Online (Sandbox Code Playgroud)

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

它的DWT TBB看起来像这样.

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

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

输出:

SchemaName
    data1
    data2
Run Code Online (Sandbox Code Playgroud)

然后我用页面TBB创建了页面.

<html>
    <head></head>
    <body>
        <!-- TemplateBeginRepeat name="Components" -->
            @@RenderComponentPresentation()@@
        <!-- TemplateEndRepeat -->
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

输出不符合预期.组件模板"tcm:1-8142-32"未执行.

输出:

SchemaName
Run Code Online (Sandbox Code Playgroud)

我想将SiteEdit也用于链接组件.

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

我开始知道我们需要添加isQueryBased,属性必须设置为true.

如果是,是否可以帮助命令将其设置为true?

我不知道问题出在哪里.

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

Dav*_*ker 6

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

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

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

假设您正在执行的是第一个,那么您已使用正确的模板将组件添加到页面中.因此,你可以调用@@ RenderComponentPresentation()@@,不带这样的参数:

<html>
    <head></head>
    <body>
        <!-- TemplateBeginRepeat name="Components" -->
            @@RenderComponentPresentation()@@
        <!-- TemplateEndRepeat -->
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

"IsQueryBased"与您的问题无关.它连接到SiteEdit和动态组件演示文稿.

更新 -

看起来你有2个问题:

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

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

@@RenderComponentPresentation(Component.ID,"tcm:xx-xx-xx")@@
Run Code Online (Sandbox Code Playgroud)

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

出于测试目的,首先硬编码组件模板的Tcm ID.

由于将Tcm ID放在模板中是不好的做法,因此您需要编写TBB以便在包中为您提供.然后,您可以替换用于测试的Tcm Id.

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