Tridion中通过Razor模板访问类别和关键字

Tridion中通过Razor模板访问类别和关键字,razor,tridion,Razor,Tridion,我试图通过Tridion 2011中的Razor TBB访问Tridion出版物的类别和关键字信息中的值。Razor文档列出了以下示例代码: <ul> @foreach (var keyword in Publication.MetaData.SomeKeywordFields) { <li>@keyword.Title (@keyword.Id)</li> } </ul> 运行此模板时,会出现一个错误,指出在ItemFields对象引用中找不到

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

<ul>
@foreach (var keyword in Publication.MetaData.SomeKeywordFields) {
<li>@keyword.Title (@keyword.Id)</li>
}
</ul>
运行此模板时,会出现一个错误,指出在ItemFields对象引用中找不到DynamicItemsFields:Key“testcategory”未设置为对象实例


有人能帮我确定我在这里试图做的事情是否有可能,因为它似乎是基于文档的,但仍然不确定,如果有,请提供一个正确语法的示例?

除了使用实际的CategoryName之外,您的代码就快完成了。正如Puf所评论的,您必须使用发布元数据的字段名,而不是实际的CategoryName。您只需将myCategory更改为实际的字段名

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

[FIELDNAME]->是发布元数据架构的XMLName。

除了使用实际的CategoryName之外,您的代码几乎就完成了。正如Puf所评论的,您必须使用发布元数据的字段名,而不是实际的CategoryName。您只需将myCategory更改为实际的字段名

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

[FIELDNAME]->是发布元数据架构的XMLName。

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

文档中的示例是输出出版物上多值元数据关键字字段的每个值,即允许多个值、从列表中选择的值以及元数据模式中选中的所有类别

如果您正在尝试做类似的事情,您确实可以修改字段的名称,它将起作用。然而,从你的问题来看,你似乎在尝试循环某个类别中的所有关键字——这需要一种不同的方法


为此,您需要在TBB中使用与GetList调用等效的方法。很抱歉,我对Razor mediator不太熟悉,无法为此提供示例代码。

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

文档中的示例是输出出版物上多值元数据关键字字段的每个值,即允许多个值、从列表中选择的值以及元数据模式中选中的所有类别

如果您正在尝试做类似的事情,您确实可以修改字段的名称,它将起作用。然而,从你的问题来看,你似乎在尝试循环某个类别中的所有关键字——这需要一种不同的方法


为此,您需要在TBB中使用与GetList调用等效的方法。很抱歉,我对Razor mediator不够熟悉,无法提供示例代码。

感谢聊天室中的Ram G:

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


再次感谢Ram G

感谢聊天室中的Ram G:

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


再次感谢Ram G

引用类别的组件或元数据字段通常称为关键字字段,因为您在此类字段中选择的值是关键字。您的发布元数据似乎没有名为testCategory/myCategory的字段。您似乎还没有加入。目前提案处于提交状态,您可以通过单击链接加入提案。感谢邀请。我已经加入并将加入
t Tridion现在在那里线程。引用类别的组件或元数据字段通常称为关键字字段,因为您在此类字段中选择的值是关键字。您的发布元数据似乎没有名为testCategory/myCategory的字段。您似乎还没有加入。目前提案处于提交状态,您可以通过单击链接加入提案。感谢邀请。我已经加入并将在那里发布Tridion线程。我在类别项myCategory中有XMLName字段,因为名称和XMLName都是myCategory。我是否也需要勾选“用于识别”的框?我也没有看到myKeyword项的XMLName字段,这里是否缺少一些告诉模板处理类别的每个子节点的逻辑?您找错地方了。。您需要查看元数据模式定义设计选项卡并使用字段的XMLName。类别上没有直接的元数据选项卡。很抱歉,我以前从未以这种方式使用过类别/关键字。。。我在定义类别时肯定错过了一步。我只是通过使用GUI右键单击并将新类别添加到Category和Keywords对象中。还有别的办法吗?你还是找错地方了。您需要检查您的模式,而不是类别。转到Schemas出版物并检查您的元数据架构。我希望可以从出版物中访问Categories和Keywords对象,而不必将其定义为页面元数据架构的一部分。我应该在010级别为发布创建元数据架构吗?我应该如何应用它?我在类别项myCategory中有XMLName字段,因为名称和XMLName都是myCategory。我是否也需要勾选“用于识别”的框?我也没有看到myKeyword项的XMLName字段,这里是否缺少一些告诉模板处理类别的每个子节点的逻辑?您找错地方了。。您需要查看元数据模式定义设计选项卡并使用字段的XMLName。类别上没有直接的元数据选项卡。很抱歉,我以前从未以这种方式使用过类别/关键字。。。我在定义类别时肯定错过了一步。我只是通过使用GUI右键单击并将新类别添加到Category和Keywords对象中。还有别的办法吗?你还是找错地方了。您需要检查您的模式,而不是类别。转到Schemas出版物并检查您的元数据架构。我希望可以从出版物中访问Categories和Keywords对象,而不必将其定义为页面元数据架构的一部分。我应该在010级别为发布创建元数据架构吗?我将如何应用它?