我正在使用SDL Tridion 2011 SP1中的Dreamweaver TBB. 我不知道在Dreamweaver TBB中处理组件链接. 考虑我的组件名称是“A”,它具有到另一个组件“B”的链接. 组件A源看起来像这样: Content xmlns="So
我不知道在Dreamweaver TBB中处理组件链接.
考虑我的组件名称是“A”,它具有到另一个组件“B”的链接.
组件A源看起来像这样:
<Content xmlns="Some UUID"> <Name xlink:type="simple" xlink:href="tcm:184-1897" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title="B"></Name> </Content>
组件B来源是:
<Content xmlns="Some other UUID"> <first>first field</first> <second>second field</second> </Content>
我想编写一个DWT TBB,它可以从组件A访问链接组件B中的字段.
我想使用RenderComponentField再现方法.
我是否需要添加任何扩展名,我是否可以在其上应用SiteEdit.
请分享您的观点.
谢谢.
本主题中有两个单独的问题:>如何从DWT中的链接组件访问字段?
>如何在SiteEdit 2009中编辑链接组件中的字段?
这是问题1的答案.我将为问题2提供单独的答案.
在Tridion对DWT模板中表达式的默认处理中,您只能访问包中的组件字段.因此,如果要访问组件B的字段,则必须编写一个C#TBB,将该组件推送到Package中.
一个示例C#片段:
var componentA = (Component) engine.GetObject(package.GetValue("Component.ID")); var fieldsA = new ItemFields(componentA.Content, componentA.Schema); var linkField = (ComponentLinkField) fieldsA["Name"]; var componentB = linkField.Value; var itemB = package.CreateTridionItem(ContentType.Component, componentB); package.PushItem("ComponentB", itemB);
如果你将它放在C#片段TBB中并在DWT之前将其放入CT中,你可以在DWT中执行此操作:
@@ComponentB.Fields.first@@
或者,您可以使用Nuno的Dreamweaver Get eXtension (DGX)来访问这些字段而无需编写TBB:
@@Get("Fields.Name.first")@@"/>
使用DGX的唯一缺点是您需要在每个Tridion服务器上安装它.之后,DWT中提供了一堆扩展功能.