我试图通过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
}
当我运行此模板时,我收到一条错误,指出在ItemFields中未找到DynamicItemsFields:Key'testcategory'(对象引用未设置为对象的实例)
任何人都可以帮助确定是否有可能做我在这里尝试的事情(因为它似乎是基于文档,但仍然不确定)如果是这样,提供正确语法的示例?
答案 0 :(得分:2)
除了您正在使用实际的CategoryName之外,您的代码几乎就在那里。正如Puf评论的那样,您必须使用您发布元数据的“fieldname”而不是实际的CategoryName。您只需将“myCategory”更改为实际的字段名
即可@foreach (var keyword in Publication.MetaData.*<<FIELDNAME>>*) {
if(@keyword.Title == "myKeyword") {
@keyword.Title
}
}
[FIELDNAME] - &gt;是发布元数据模式的XMLName。
答案 1 :(得分:1)
关键字确实始终位于类别或其他关键字中。但是它们在诸如组件之类的项目中使用(如示例中)在出版物,文件夹等上的元数据
文档中的示例是输出发布上的多值元数据关键字字段的每个值(即“允许多个值”,“从列表中选择的值”和“类别”都在元数据架构中检查)。
如果您尝试做类似的事情,您确实可以修改字段的名称,它将起作用。但是,从您的问题来看,您似乎正在尝试遍历某个类别中的所有关键字 - 这需要采用不同的方法。
为此,您需要在TBB中等效GetList调用。我对Razor调解员不太熟悉,为此提供示例代码,抱歉。
答案 2 :(得分:1)
感谢Ram G的聊天:
出版物本身,通常是您的010,020 ... 050等级,也可以附加元数据模式。上面的Razor逻辑块所针对的字段的XMLName实际上是此元数据模式项的字段名,而不是类本身的名称。在发布的元数据模式中,如果选择“设计”选项卡,将“项目的XML”字段设置为“文本”类型,则选择“将从列表中选择选项”,默认情况下,另一个复选框将显示为“类别”如果选中,则会自动提取该出版物中存在的类别项目的完整列表。因此,当该字段现在被Razor逻辑作为目标时,它也会针对类别值进行多个步骤。
再次感谢Ram G