如何在Tridion中的剃刀模板中获取对象?

时间:2012-08-09 15:24:34

标签: tridion razor-mediator

我正在编写一个常见的Razor TBB,它将根据我的要求在组件模板和页面模板中使用。

因此,根据在页面模板和组件模板上应用TBB,我需要剃刀TBB中的Page和Component对象

我要求在页面的特定区域显示/使用页面/组件中的元数据字段值。

这就是为什么,我想通过对象访问元数据值,但无法获取对象,

请跟弗兰克跟进我的评论。

任何人都可以建议我吗?

1 个答案:

答案 0 :(得分:8)

您是否看过Razor调解员可用的(非常有帮助的)文档?

这些都是访问当前组件和页面的示例。只是我的10秒搜索给出了这些片段:

<body class=”@Page.Metadata.BodyClass”>

<div class=”@Component.Fields.NewsStyle”>

<img src=”@Fields.HeaderImage.ID” alt=”@Fields.HeaderImage.AltText” />

编辑 :我看到您在后续评论中添加了更多详细信息。您可能想要像Bart建议的那样做,并将这些细节添加到问题中。与此同时,我会花几分钟时间为您搜索文档。

官方文档(我上面链接的Word文档)包含这个似乎处理元数据的示例:

@foreach (var keyword in Publication.MetaData.SomeKeywordFields) {
    <li>@keyword.Title (@keyword.Id)</li>
}

Razor模板的输出将 变为 包中的输出项。因此,使用Razor介体来 处理 输出项目没有任何意义。为此你可以使用常规的C#(片段或程序集)TBB。

另一个编辑 :似乎Razor介体的隐式Fields变量始终映射到Component字段,而Metadata变量始终映射到Component的meatadata字段。为方便起见,我已将上述名称与Google代码中的相关片段相关联。

所以你似乎有两个选择:

  1. 检测您是否在页面或组件中(例如,通过查看隐式Page变量是否为null)然后在任何地方都有条件表达式(isInPage ? Page.Metadata : Metadata
  2. 自行修复此Razor mediator code的限制或聘请someone为您解决此问题