【发布时间】:2012-06-01 06:18:14
【问题描述】:
如何在第三级访问componentlink字段名称? 我有一个包含作为可嵌入模式的字段的模式,在该可嵌入模式中,我有一个从另一个模式派生的组件链接。如何检索该架构的字段?
【问题讨论】:
-
能否请您指定您要使用的 API 并相应地重命名您的问题
标签: tridion tridion-2011
如何在第三级访问componentlink字段名称? 我有一个包含作为可嵌入模式的字段的模式,在该可嵌入模式中,我有一个从另一个模式派生的组件链接。如何检索该架构的字段?
【问题讨论】:
标签: tridion tridion-2011
这真的取决于这些字段的用途,也许您可以提供更多信息?
此处未提及的另一个选项是编写您自己的 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:1-23-32 是组件模板的 TCM URI,它只是将组件的名称呈现为超链接。在 tcm:1-23-32 中使用的 DWT 中,您可以简单地引用链接组件的所有字段和属性,例如 Component.Title、Component.Fields.Field1 等。
请注意,这些其他问题/答案中已经涵盖了相关主题:
如果这些对您的帮助不够,我建议您发布您的组件的 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,您可以快速浏览字段结构并获得结果。它将为您提供第三级的组件链接,当然您可以使用它来更深入地了解结构。
【讨论】: