6

有人可以就如何做到这一点给出一些想法吗?这可能非常简单和基础,但我无法弄清楚。

这是我的要求。

我有一个带有子关键字 B 的类别 A,而 B 有另一个子关键字 C。

我想在我的组件模板中获取所选关键字的确切路径,例如,如果用户选择关键字 C,我需要路径为 A\B\C 的值,而不仅仅是 C。但 Tridion 总是给我这个值作为 C 而不是 A\B\C 。组件架构使用“树”视图来选择关键字。

我应该编写 Dreamweaver 自定义函数来处理这个问题吗?或者 tridion 是否为此提供了一些处理程序?

任何帮助将不胜感激。谢谢!

谢谢,KK

4

2 回答 2

9

正如您刚刚发现的那样,Tridion 关键字层次结构是“假的” - 关键字存储为平面列表,而不是分层列表(就像您使用文件夹一样)。有关父关键字和子关键字的信息存储在关键字本身中。

有解决方案 - 当然,例如,您可以在 C# TBB 中使用它:

Keyword keyword = new Keyword(new TcmUri("tcm:28-3368-1024"), session);
string hierarchy = keyword.Title;
bool done = false;
while(!done)
{
    if (keyword.ParentKeywords.Count > 0)
    {
        foreach (Keyword k in keyword.ParentKeywords)
        {
            hierarchy = k.Title + " > " + hierarchy;
        }
        keyword = keyword.ParentKeywords[0];
    }
    else
        done = true;
}
// Include Category
hierarchy = keyword.OrganizationalItem.Title + " > " + hierarchy;

编辑:更新为递归地“上升”层次结构。但是一个关键字可以有多个父级,我将由您来解决...

于 2012-06-25T14:51:20.670 回答
5

一个类别中的关键字是唯一的,因此 Tridion 可以通过它们的名称(当然还有/或它们的 TCM URI)安全地引用它们。而且由于一个关键字可以有多个父项,因此从根到您的关键字可能没有一条路径。

如果在您的情况下可以将类别表示为树,您当然可以为每个关键字构建一个路径。在这种情况下,您将需要一些 (C#) 代码来沿着父轴并连接名称。您可以将此代码:

  1. 在 DWT 之前放入模板的 TBB 或
  2. 在自定义 Dreamweaver 函数中。

无论哪种方式都可以正常工作。

于 2012-06-25T14:45:30.803 回答