【问题标题】:Categories and Keywords access via Razor Template in Tridion通过 Tridion 中的 Razor 模板访问类别和关键字
【发布时间】:2012-06-14 16:44:08
【问题描述】:

我正在尝试通过 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)

任何人都可以帮助确定是否可以执行我在此处尝试的操作(因为它似乎是基于文档但仍不确定),如果可以,请提供正确语法的示例?

【问题讨论】:

  • 引用类别的组件或元数据字段通常称为关键字字段,因为您在此类字段中选择的值是关键字。您的发布元数据似乎没有名为 testCategory/myCategory 的字段。
  • 你好像还没有加入Tridion - Area51 - StackExchange。目前提案处于提交状态,您可以通过点击链接参与其中。
  • 感谢邀请。我已经加入,现在将在那里发布 Tridion 线程。

标签: razor tridion


【解决方案1】:

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

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

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

【讨论】:

  • 我确实在类别项“myCategory”中有 XMLName 字段,因为 Name 和 XMLName 都是“myCategory”。我是否也需要选中“用于识别”的框?我也没有看到 myKeyword 项的 XMLName 字段,这里是否缺少一些逻辑来告诉模板处理类别的每个子节点?
  • 您看错地方了。您需要查看元数据架构定义(设计选项卡)并使用字段的 XMLName。
  • 在类别中,我有一个常规、安全和信息选项卡。类别上没有直接的元数据选项卡。很抱歉,但我以前从未以这种方式使用过类别/关键字……我一定错过了定义类别的步骤。我只是通过使用 GUI 右键单击​​并将新类别添加到类别和关键字对象来实现的。还有一步吗?
  • 你还是看错地方了。您需要检查您的 SCHEMA 而不是类别。转到 Schemas Publication 并检查您的元数据架构。
  • 我希望我可以从出版物中访问类别和关键字对象,而不必将其定义为页面元数据模式的一部分。我应该在 010 级别为出版物制作元数据模式吗?我将如何应用它?
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

    感谢聊天中的 Ram G:

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

    再次感谢拉姆 G

    【讨论】:

      猜你喜欢
      • 2012-04-30
      • 2011-07-05
      • 1970-01-01
      • 2012-04-29
      • 2011-01-02
      • 2020-09-29
      • 2011-08-08
      • 2012-05-28
      • 1970-01-01
      相关资源
      最近更新 更多