7

除了名称、键、值和与其他关键字的关系之外,关键字本身还可以具有元数据。这允许作者通过选择元数据模式来添加其他信息,然后添加任何内容:

  • 文本
  • 选择(带有选项或类别的文本)
  • 链接
  • ETC

SDL Tridion 关键字元数据

SDL Live Content 描述了如何检索关键字属性。给定一个关键字,myKeyword我们可以得到myKeyword.KeywordMeta.NameValues名称-值对(字典)。

我可以看到用例是在演示服务器端代码中,.NET 或 Java 开发人员可以获得给定关键字的附加信息。

我将关键字理解为对组件进行分类并为作者提供其他领域选择的选项。在我想要字段的大多数情况下,我会建议一个组件,但要确保我了解我们应该如何使用关键字元数据和任何编程限制。

  • 对于 SDL Translation Manager,关键字元数据是否可以翻译?看起来关键字本身可以作为类别的一部分进行翻译(以及单个关键字,具体取决于您的版本*)。我们当然可以在没有翻译管理器的情况下本地化关键字。
  • 关键字元数据是否适用于内容管理器?例如,您会在 C# TBB 中使用它吗?

其他想知道的更新:请务必检查您的 SDL Tridion 和 SDL Translation Manager 版本——Lars 指出 SDL Translation Manager 3.0 版确实具有单关键字翻译功能。Chris 注意到 GA 中的行为。如有疑问,请查看文档或在您的设置中确认。

4

5 回答 5

4

在构建分类驱动导航时,您可能会考虑使用关键字元数据。过去,我为 SEO 目的添加了要添加到站点的路径和其他数据的值,甚至尝试添加到 MM 组件的链接以用作渲染网页上的背景图像和按钮。但是在 Tridion 2011 中,GA 二进制数据没有发布到 Broker,所以我需要一个不同的解决方案。这可能已在以后的版本中修复,但我最近没有尝试过。

于 2013-01-25T03:05:06.573 回答
4

如果您使用 Tridion 2011 SP1(包括翻译管理器 3.0),您可以翻译单个关键字 - 而不仅仅是整个类别。

您还可以翻译关键字元数据 - 这在以前版本的翻译管理器中也可能是可能的(如果您使用的是 Tridion 2011 GA),但我无法确定。它没有被列为 3.0 的新功能,这表明它以前是可能的……但它当然也可能被错误地排除在新功能列表之外。:)

于 2013-01-25T10:01:38.927 回答
3

我正在做一个我们广泛使用关键字元数据的项目。对于内容管理器来说,这有点习惯,因为您正在将内容移动到小块中,这在 Tridion 的早期阶段对于对某些内容进行分类只是微不足道的。

但是,我们使用它来显示整个网站显示的不同部门和组的动态联系方式。对于其他一些在站点范围内使用文本、图像和指向这些关键字分类的内容的链接。

重新发布该类别和整个网站已更新、更正(编辑)和文本相同的内容。

我为此使用了关键字而不是动态组件,因为它似乎是用于动态内容的最佳方式,无论如何都必须对其进行分类。这样,即使在一年前发布时,有关此动态项目的其他分类的所有参考信息也将始终保持最新。

顺便说一句,这个解决方案是使用 Tridion 2009 SP1 和 Java。

我一直很喜欢经纪人和分类法;-)

于 2013-01-25T09:38:31.690 回答
3

关于元数据,我始终将其视为“关于数据的数据”,因此我不会将其直接用于内容目的,对我来说唯一的例外是多媒体组件上的元数据(因为您没有常规的内容字段那里)。但是再看看关键字,我认为这在某些时候可能是我规则的另一个例外。

如果您根据关键字构建导航,则可以使用附加数据,包括(可翻译的)内容。关键字的元数据可以通过翻译管理器翻译,但如果我没记错的话,它不会转发给经纪人。因此,要使用它,您必须将其存储为例如站点地图页面(通过页面中的模板/C# TBB 编写关键字元数据)。

于 2013-01-25T10:22:01.350 回答
2

是的,我使用 C# TBB 来访问关键字元数据字段中的值。

首先,您必须使用参数模式将类别名称传递给 C# TBB,然后

其次,您必须通过以下代码访问该类别

 Publication publication = GetPublication();

            TcmUri uri = new TcmUri(int.Parse(_itemId), ItemType.Category, publication.Id.ItemId);
            _session = engine.GetSession();
            Category cat = new Category(uri, _session);

            Log.Debug("the uri is " + uri);
            Log.Debug("the cat is " + cat);

            Filter filter = new Filter();
            //filter.Conditions["IsRoot"] = true; // This works with Tridion 2011 only!

            List<Keyword> keys = cat.GetKeywords(filter) as List<Keyword>; 

最后,在访问 Keys 后,您必须在 Keys 上循环并获取 Metadata 字段,如下所示

ItemFields fields = new ItemFields(key.Metadata, key.MetadataSchema);
于 2013-01-25T07:27:34.500 回答