6

誰かがこれをどのように行うことができるかについて考えを教えてください。これは非常に単純で基本的なことかもしれませんが、私はこれを理解できませんでした。

これが私の要件です。

子キーワード B を持つカテゴリ A があり、B には別の子キーワード C があります。

コンポーネントテンプレートで選択したキーワードの正確なパスを取得したいのですが、たとえば、ユーザーがキーワード C を選択した場合、C だけでなく A\B\C のようなパスの値が必要ですが、Tridion は常に値を提供しますA\B\C ではなく 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 OR の前にテンプレートに入れた TBB で
  2. カスタムの Dreamweaver 関数で。

どちらの方法でも問題なく動作します。

于 2012-06-25T14:45:30.803 に答える