如何在第三级访问 componentlink 字段名称?我有一个包含作为可嵌入模式的字段的模式,在该可嵌入模式中,我有一个从另一个模式派生的组件链接。我如何检索该架构的字段?
4 回答
这真的取决于这些字段的目的,也许您可以提供更多信息?
此处未提及的另一个选项是编写您自己的 C# 构建块以将这些 3 级组件添加到您的包中。通过这样做,您可以更轻松地在 DWT 布局中使用它们。
例如,如果您的第三级项目用于生成办公室位置列表,您可以编写一个 C# 块来获取所有相关的办公室位置组件并将它们作为组件列表“位置”添加到您的包中,您只需要在您的 DWT 中要做的是循环这些项目并提供您需要的显示。
就我个人而言,我不喜欢在 DWT 中使用/添加功能,我尽量让它尽可能简单,如果你能提供更多关于你的场景的信息,这会从社区为你产生更好的答案。
据我所知,您需要一个特殊的 DWT TBB 来控制您的嵌入式/组件链接。也许你可以使用 Nuno 的 Get Extensions ?http://www.sdltridionworld.com/community/extension_overview/dreamweaver_get_extension.aspx 或者使用 Razor Mediator,也许: http ://www.sdltridionworld.com/community/2011_extensions/razormediator.aspx
为了避免不得不使用 DGX(如 MDa 所建议的那样)或编写 C# TBB(如 John Winter 所建议的那样),您还可以简单地调用RenderComponentPresentation
以使用您要使用的模板来渲染链接的组件。
<!-- TemplateBeginRepeat name="Component.Fields.LinkFieldName" -->
@@RenderComponentPresentation(Field, "tcm:1-23-32")@@
<!-- TemplateEndRepeat -->
它是组件模板的TCM tcm:1-23-32
URI,它只是将组件的名称呈现为超链接。在您使用的 DWT 中,tcm:1-23-32
您可以简单地引用链接组件的所有字段和属性,例如Component.Title
、Component.Fields.Field1
等。
请注意,这些其他问题/答案中已经涵盖了相关主题:
- 渲染链接组件的标题 -在 SDL Tridion 2011 中的 Dreamweaver TBB 中循环多个组件链接以获取链接组件的架构名称
- 获取链接组件的值 -在 Dreamweaver TBB 中检索链接组件的值 - 并使其成为 SiteEditable
- 处理嵌套的嵌入式架构 -如何在 SDL Tridion 2011 SP1 中处理 Dreamweaver TBB 中的嵌套重复区域
如果不知何故这些对您没有足够的帮助,我建议您发布您的组件的 XML 和您正在尝试制作的 DWT。
这是使用 C# 的快速示例
Session session = engine.GetSession();
Item componentItem = package.GetByName(Package.ComponentName);
Component component = new Component(new TcmUri(componentItem.GetValue("ID")), session);
ItemFields itemFields = new ItemFields(component.Content, component.Schema);
IEnumerable<ComponentLinkField> ie = itemFields.OfType<EmbeddedSchemaField>().OfType<ComponentLinkField>();
for (IEnumerator<ComponentLinkField> e = ie.GetEnumerator(); e.MoveNext(); ) {
Component linkedComponent = e.Current.Value;
}
通过使用 Linq,您可以非常快速地浏览字段结构并获得结果。它将为您提供第三级的组件链接,当然您可以使用它来更深入地了解结构。