Tridion 如何在第三级访问componentlink字段名?

Tridion 如何在第三级访问componentlink字段名?,tridion,tridion-2011,Tridion,Tridion 2011,如何在第三级访问componentlink字段名? 我有一个模式,其中包含一个字段作为可嵌入模式,在该可嵌入模式中,我有一个从另一个模式派生的组件链接。如何检索该模式的字段?据我所知,您需要一个特殊的DWT TBB来控制嵌入式/组件链接。也许你可以用努诺的Get分机? 或者使用Razor Mediator,也许: 这取决于这些字段的用途,也许您可以提供更多信息 这里没有提到的另一个选项是编写自己的C#构建块,将这些第三级组件添加到包中。通过这样做,可以使在DWT布局中使用它们变得简单得多 例如,

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

据我所知,您需要一个特殊的DWT TBB来控制嵌入式/组件链接。也许你可以用努诺的Get分机? 或者使用Razor Mediator,也许:

这取决于这些字段的用途,也许您可以提供更多信息

这里没有提到的另一个选项是编写自己的C#构建块,将这些第三级组件添加到包中。通过这样做,可以使在DWT布局中使用它们变得简单得多

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


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

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


@@渲染组件表示(字段“tcm:1-23-32”)@@
其中
tcm:1-23-32
是组件模板的tcm URI,它只是将组件名称呈现为超链接。在
tcm:1-23-32
中使用的DWT内部,您可以简单地引用链接组件的所有字段和属性,如
Component.Title
Component.fields.Field1
,等等

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

  • 呈现链接组件的标题-
  • 获取链接组件的值-
  • 处理嵌套的嵌入式架构-

如果这些对您的帮助还不够,我建议您发布您的组件的XML和您正在尝试使用的DWT#

Session Session=engine.GetSession();
Item componentItem=package.GetByName(package.ComponentName);
组件组件=新组件(新的TcmUri(componentItem.GetValue(“ID”)),会话);
ItemFields ItemFields=新的ItemFields(component.Content,component.Schema);
IEnumerable ie=itemFields.OfType().OfType();
对于(IEnumerator e=ie.GetEnumerator();e.MoveNext();){
组件链接组件=e.Current.Value;
}

通过使用Linq,您可以快速浏览字段结构并获得结果。它将给你第三级的组件链接,当然,你可以使用相同的结构来加深它。

你能指定你想要使用的API吗?如果你使用DWT,请重新命名你的问题,那么我一定会考虑DW获取扩展。
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;
}