2012-06-25 1 views
6

Может кто-нибудь, пожалуйста, дайте некоторое представление о том, как это можно сделать? Это может быть очень просто и основательно, но я не мог понять это.Путь к ключу в SDL Tridion

Вот мое требование.

У меня есть категория А с ребенком ключевым словом B и B получил еще одно ключевого слово ребенка C.

Я хочу, чтобы получить точный путь выбранного ключевого слова в моем шаблоне компоненты, скажем, например, если пользователь выбирает ключевое слово C, Мне нужно значение с контуром, как A \ B \ C, а не только как C. Но Tridion всегда дает мне значение C, а не A \ B \ C. Компонентная схема использует представление «Дерево» для выбора ключевых слов.

Должен ли я писать пользовательские функции Dreamweaver, чтобы справиться с этим? Или тридион поставляется с некоторым обработчиком для этого?

Любая помощь будет высоко оценена. Спасибо!

Спасибо, KK

ответ

5

Ключевые слова внутри категории являются уникальными, поэтому Tridion можно смело обращаться к ним по имени (и/или их TCM URI, конечно). А поскольку ключевое слово может иметь несколько родителей, может быть не один путь, ведущий от корня к вашему ключевому слову.

Если в вашей ситуации категория может быть представлена ​​как дерево, вы можете, конечно, создать один путь к каждому ключевому слову. В этом случае вам понадобится код (C#), который приближается к оси родителей и объединяет имена. Вы можете поместить этот код либо:

  1. в TBB, что вы положили в шаблон перед DWT ИЛИ
  2. в пользовательской функции Dreamweaver.

В любом случае это будет нормально работать.

+0

Спасибо, что Фрэнк помог мне. Это действительно ценное предложение! Большое спасибо! – Krishnakumar

8

Как вы только что узнали, иерархия ключевых слов 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; 

EDIT: Обновление рекурсивно «идти вверх» по иерархии. ОДНАКО ключевое слово может иметь несколько родителей, я оставлю это до вас, чтобы исправить ...

+0

Спасибо Nuno за то, что поделились своим предложением. Это действительно помогает! – Krishnakumar

+0

Если ответ Nuno помог вам решить вашу проблему, пожалуйста, примите его, нажав большую галочку слева. –