我在支持SDL Tridion 2011 SP1工作Dreamweaver中TBBS。
我不知道的处理在Dreamweaver TBBS组件链接。
我的考虑组件名称为“A”,它具有链接到另一个部件“B”。
组件源看起来是这样的:
<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链接组件访问领域?
- 如何从一个链接的组件在2009年SiteEdit编辑字段?
这是问题1,我会提供一个单独的答案的问题2回答。
在外表套上在DWT模板表达式的默认处理你只能访问那些在封装组件的领域。 所以,如果你想访问组件B的领域,你将不得不编写一个推C#TBB该组件到包。
样品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@@
或者您可以使用努诺的Dreamweaver中获取扩展(DGX)来访问这样的领域,而无需编写一个TBB:
@@Get("Fields.Name.first")@@"/>
唯一的缺点使用DGX是,你需要将每一个外表套上服务器上安装它。 在此之后,的扩展功能堆在你载重吨可用。
链接组件的允许领域为可编辑的SiteEdit 2009 SP2已经出台。 基于在该SiteEdit前端工程SiteEdit命令语言嵌入到它会从临时服务器返回的HTML。
所以我们说,你在那里有一个单一的组件:
<div class="cp">
<!-- Start SiteEdit Component Presentation: {"ID" : "cp_1",
"ComponentID" : "tcm:12-549", "ComponentTemplateID" : "tcm:12-568-32",
"ComponentVersion" : 5, "IsQueryBased" : false } -->
<label>Title: </label>
<span>
<!-- Start SiteEdit Component Field: {"ID": "cf_1",
"XPath": "tcm:Content/custom:Content/custom:Title",
"IsMultiValued":false} -->
Tips for getting insurance when you have a pre-existing condition
</span>
</div>
那些Start SiteEdit
在那里的意见是,你的HTML给予SiteEdit命令,你可以看到他们是如何庆祝组件外观和标题字段。
如果您呈现链接组件的领域,你也需要有这样的对应组件呈现命令:
<div class="cp">
<!-- Start SiteEdit Component Presentation: {"ID" : "cp_1",
"ComponentID": "tcm:12-54", "ComponentTemplateID": "tcm:12-56-32",
"ComponentVersion" : 5, "IsQueryBased" : false } -->
<label>Title: </label>
<span>
<!-- Start SiteEdit Component Field: {"ID": "cf_1",
"XPath": "tcm:Content/custom:Content/custom:Title",
"IsMultiValued":false} -->
Tips for getting insurance when you have a pre-existing condition
</span>
<br />
<div class="cp">
<!-- Start SiteEdit Component Presentation: {"ID" : "cp_2",
"ComponentID": "tcm:12-85", "ComponentTemplateID": "tcm:12-60-32",
"ComponentVersion" : 2, "IsQueryBased" : true } -->
<label>Byline: </label>
<span>
<!-- Start SiteEdit Component Field: {"ID": "cf_2",
"XPath": "tcm:Metadata/custom:Metadata/custom:ByLine",
"IsMultiValued":false} -->
"It's a huge problem, because ..." says one expert.
</span>
<br />
<label>Copyright: </label>
<span>
<!-- Start SiteEdit Component Field: {"ID": "cf_3",
"XPath": "tcm:Metadata/custom:Metadata/custom:Copyright",
"IsMultiValued":false} -->
Getty Images
</span>
</div>
</div>
在现在有两个Start SiteEdit Component Presentation
的命令,一个用于外部组件和一个用于连接组件。 这里要注意的一件重要的事情是,嵌套组件外观的IsQueryBased属性必须设置为true。 这告诉SiteEdit前端的组件外观确实不应该存在于它从外表套上检索页面的XML。
到SiteEdit前端没关系的命令是如何投入到HTML。
最常见的是为人们所称RenderComponentPresentation
和RenderComponentField
,这标志着相应的部件。 但不幸的是RenderComponentField
只能用函数来呈现来自所谓的“背景部件”,它看起来像这样的字段:
Item component = _package.GetByType(ContentType.Component);
这意味着,在一个单一的DWT将所有来电RenderComponentField
将在同样的背景下部件的工作方式。 所以,你永远不能叫RenderComponentField
单一DWT呈现来自两个不同的组件领域。
你有两个选择来解决这个问题:
- 呼叫
RenderComponentPresentation
为链接组件 - 渲染
Start SiteEdit Component Presentation
,并Start SiteEdit Component Field
命令自己在DWT
选项1是你可以得到最干净的分离:因为你是从另一个组件呈现的字段,你基本上是渲染另一个组件演示。 如果你的链接字段打出布局到一个单独的DWT,并围绕一个CT,你可以在主DWT使其像这样:
@@RenderComponentPresentation(Component.Fields.Name, "tcm:1-2-32")@@
沃尔特解释这适合他的外表套上模板的文章 :
由于该Dreamweaver模板的范围仅限于显示当前组件领域,额外的步骤是通过使用RenderComponentPresentation功能必要的。 我们需要与其他Dreamweaver模板的中医URI通过TCM URI的多媒体组件的这一功能,在一起。
虽然它确实导致更多的CT和载重吨,那些载重吨将大量简单,因为你现在可以使用RenderComponentField
在他们像往常一样。
选项2真的只是意味着你输出与您载重吨SiteEdit命令HTML注释。 由于命令语言被记录为API的一部分(见上面的链接),很少有机会,它会在2009年SiteEdit的未来版本中改变。
很抱歉的很长的故事,你碰巧在这里引发棘手的用例。 我希望这是有道理的。
如果使用的是2009年SiteEdit有可能,更多的只是有点难度比将它与主要成分领域。 SiteEdit就封装与JSON标记的内容领域。 有没有理由,如果出版指标正在上演,你无法检测和写出来的JSON自己。
或者将价格已经开发了一些模板构建模块,以帮助其SiteEdit可用这里 。
这些都伴随着导在这里 ,特别是在部分嵌入式组件将是对你有用的。
您无法读取使用标准Dreamweaver模版从B场。 你需要写一个C#TBB提取链接的组件,并将其放置在包类型的组件。 然后,您可以使用DWT的语法来读取该组件的领域。 例如:@@ linkedComponent.Fields.first @@
Siteedit是在这一个问题,不同的版本使用不同的语法和能力。 恐怕你不能编辑等领域的最新版本...
文章来源: Retrieving values of a linked component in Dreamweaver TBB - and making it SiteEditable