-1

如何在第三级访问 componentlink 字段名称?我有一个包含作为可嵌入模式的字段的模式,在该可嵌入模式中,我有一个从另一个模式派生的组件链接。我如何检索该架构的字段?

4

4 回答 4

7

这真的取决于这些字段的目的,也许您可​​以提供更多信息?

此处未提及的另一个选项是编写您自己的 C# 构建块以将这些 3 级组件添加到您的包中。通过这样做,您可以更轻松地在 DWT 布局中使用它们。

例如,如果您的第三级项目用于生成办公室位置列表,您可以编写一个 C# 块来获取所有相关的办公室位置组件并将它们作为组件列表“位置”添加到您的包中,您只需要在您的 DWT 中要做的是循环这些项目并提供您需要的显示。

就我个人而言,我不喜欢在 DWT 中使用/添加功能,我尽量让它尽可能简单,如果你能提供更多关于你的场景的信息,这会从社区为你产生更好的答案。

于 2012-06-01T09:39:20.370 回答
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

于 2012-06-01T07:19:26.310 回答
5

为了避免不得不使用 DGX(如 MDa 所建议的那样)或编写 C# TBB(如 John Winter 所建议的那样),您还可以简单地调用RenderComponentPresentation以使用您要使用的模板来渲染链接的组件。

<!-- TemplateBeginRepeat name="Component.Fields.LinkFieldName" -->
    @@RenderComponentPresentation(Field, "tcm:1-23-32")@@
<!-- TemplateEndRepeat -->

它是组件模板的TCM tcm:1-23-32URI,它只是将组件的名称呈现为超链接。在您使用的 DWT 中,tcm:1-23-32您可以简单地引用链接组件的所有字段和属性,例如Component.TitleComponent.Fields.Field1等。

请注意,这些其他问题/答案中已经涵盖了相关主题:

如果不知何故这些对您没有足够的帮助,我建议您发布您的组件的 XML 和您正在尝试制作的 DWT。

于 2012-06-01T11:18:29.477 回答
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,您可以非常快速地浏览字段结构并获得结果。它将为您提供第三级的组件链接,当然您可以使用它来更深入地了解结构。

于 2012-06-01T22:46:49.150 回答