SiteEdit 2009 SP2 中引入了允许编辑链接组件的字段。SiteEdit 前端基于嵌入到从登台服务器返回的 HTML 中的SiteEdit 命令语言工作。
因此,假设您在其中有一个组件:
<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 前端组件表示确实不应该出现在它从 Tridion 检索的页面 XML 中。
对于 SiteEdit 前端,如何将命令放入 HTML 并不重要。
最常见的是人们调用RenderComponentPresentation
and RenderComponentField
,它标记了相应的部分。但不幸的是,该RenderComponentField
函数只能用于渲染所谓的“上下文组件”中的字段,它看起来像这样:
Item component = _package.GetByType(ContentType.Component);
这意味着在单个 DWT 中,所有调用都RenderComponentField
将在同一个上下文组件上工作。因此,您永远不能调用RenderComponentField
单个 DWT 来呈现来自两个不同组件的字段。
你有两个选择来解决这个问题:
- 调用
RenderComponentPresentation
链接的组件
- 在 DWT 中自己渲染
Start SiteEdit Component Presentation
和命令Start SiteEdit Component Field
选项 1 是您可以获得的最清晰的分离:因为您正在渲染来自另一个组件的字段,所以您实际上是在渲染另一个组件表示。如果将链接字段的布局拆分为单独的 DWT 并围绕它构建 CT,则可以在主 DWT 中像这样呈现它:
@@RenderComponentPresentation(Component.Fields.Name, "tcm:1-2-32")@@
Walter 在他关于 Tridion 模板的文章中解释了这一点:
由于此 Dreamweaver 模板的范围仅限于显示当前组件字段,因此需要一个额外的步骤,即使用 RenderComponentPresentation 函数。我们需要将多媒体组件的 TCM URI 连同另一个 Dreamweaver 模板的 TCM URI 一起传递给该函数。
尽管它确实会导致更多的 CT 和 DWT,但这些 DWT 会简单得多,因为您现在可以RenderComponentField
照常使用它们。
选项 2 实际上只是意味着您在 DWT 中使用 SiteEdit 命令输出 HTML 注释。由于命令语言被记录为 API 的一部分(参见上面的链接),因此它在 SiteEdit 2009 的未来版本中发生变化的可能性很小。
很抱歉,你碰巧在这里触发了一个棘手的用例。我希望这是有道理的。