如何在第三级访问componentlink字段名称? 我有一个包含字段作为可嵌入模式的模式,在该可嵌入模式中,我有一个从另一个模式派生的组件链接。我如何检索该模式的字段?
答案 0 :(得分:7)
这实际上取决于这些领域的目的,或许你可以提供更多信息?
此处未提及的另一个选项是编写您自己的C#构建块以将这些第3级组件添加到您的包中。通过这样做,您可以更轻松地在DWT布局中使用它们。
例如,如果您的第三级项目用于生成办公地点列表,您可以编写一个C#块来获取所有相关的办公地点组件和将它们作为组件列表添加到您的包中“位置”只需要在DWT中完成,就可以循环这些项目并提供所需的显示。
就我个人而言,我不喜欢在DWT中使用/添加功能,我尝试尽可能简单,如果你能提供更多关于你的场景的信息,那么会从社区中为你提供更好的答案。 / p>
答案 1 :(得分:6)
据我所知,您需要一个特殊的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
答案 2 :(得分:5)
为了防止必须使用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。
答案 3 :(得分:4)
这是使用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,您可以非常快速地浏览字段结构并获得结果。它将为您提供第三级的组件链接,当然您也可以使用相同的链接来深入了解结构。