2

我正在尝试通过 Tridion 2011 中的 Razor TBB 访问 Tridion 出版物的类别和关键字信息中的值。Razor 文档列出了以下示例代码:

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

虽然我在类别中有一个关键字......事实上,这是我自己意识到你甚至可以在 Tridion 中拥有一个关键字的唯一方法,但如果我错了,请纠正我。从示例的语法推断,我尝试了以下内容,其中“myCategory”是出版物中的类别,“myKeyword”是 myCategory 类别中的关键字:

@foreach (var keyword in Publication.MetaData.myCategory) {
if(@keyword.Title == "myKeyword") {
@keyword.Title
}

运行此模板时,我收到一条错误消息,指出 DynamicItemsFields: Key 'testcategory' Not Found In ItemFields (Object reference not set to an instance of an object)

任何人都可以帮助确定是否可以做我在这里尝试的事情(因为它似乎是基于文档但仍然不确定)如果是这样,请提供正确语法的示例?

4

3 回答 3

2

除了使用实际的 CategoryName 之外,您的代码几乎就在那里了。正如 Puf 评论的那样,您必须使用发布元数据的“字段名”而不是实际的 CategoryName。您应该将“myCategory”更改为实际的字段名

@foreach (var keyword in Publication.MetaData.*<<FIELDNAME>>*) {
   if(@keyword.Title == "myKeyword") {
        @keyword.Title
   }
}

[FIELDNAME] --> 是发布元数据模式的 XMLName。

于 2012-06-11T20:40:51.233 回答
1

关键字确实总是在一个类别或另一个关键字中。但它们用于组件等项目和(如示例中)出版物、文件夹等的元数据。

文档中的示例是在出版物上输出多值元数据关键字字段的每个值(即“允许多个值”、“从列表中选择的值”和“类别”都在元数据模式中选中)。

如果您尝试做类似的事情,您确实可以修改字段的名称,它会起作用。但是,从您的问题来看,您似乎正在尝试遍历某个类别中的所有关键字 - 这需要不同的方法。

为此,您需要在 TBB 中调用相当于 GetList 的调用。我对 Razor 调解器不够熟悉,无法为此提供示例代码,抱歉。

于 2012-06-12T10:17:53.193 回答
1

感谢聊天中的 Ram G:

出版物本身,通常是您的 010、020...050 等级别,也可以附加一个元数据模式。上面 Razor 逻辑块所针对的字段的 XMLName 实际上是此元数据架构项的字段名称,而不是 Category 本身的名称。在发布的元数据架构中,如果选择“设计”选项卡,将项目的 XML 字段设为“文本”类型,选择“将从列表中选择选项”,默认情况下,将出现另一个名为“类别”的复选框如果选中,则会自动提取该出版物中存在的类别项目的完整列表。因此,当该字段现在被 Razor 逻辑定位时,它也分多个步骤定位到 Category 值。

再次感谢拉姆 G

于 2012-06-12T16:00:25.120 回答