2012-06-25 24 views
6

Ai đó có thể đưa ra một số ý tưởng về cách thực hiện điều này? Điều này có thể rất đơn giản và cơ bản, nhưng tôi không thể tìm ra điều này.Đường dẫn từ khóa trong SDL Tridion

Đây là yêu cầu của tôi.

tôi có một danh mục A với từ khóa con B và B có một trẻ em từ khóa C.

Tôi muốn nhận được đường dẫn chính xác của từ khóa được lựa chọn trong mẫu thành phần của tôi, Say cho ví dụ, nếu người dùng chọn từ khóa C, tôi cần giá trị với đường dẫn như A \ B \ C và không chỉ là C. Nhưng Tridion luôn mang lại cho tôi giá trị là C và không phải là A \ B \ C. Lược đồ thành phần đang sử dụng chế độ xem "Cây" để chọn từ khóa.

Tôi có nên viết các hàm tùy chỉnh dreamweaver để xử lý việc này không? Hoặc tridion đi kèm với một số xử lý cho điều này?

Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn bạn!

Cảm ơn, KK

Trả lời

5

Từ khóa trong một thể loại là duy nhất, vì vậy Tridion thể một cách an toàn đề cập đến chúng bằng tên của họ (và/hoặc họ TCM URI tất nhiên). Và vì từ khóa có thể có nhiều bậc cha mẹ, có thể không có một đường dẫn nào dẫn từ gốc đến Từ khóa của bạn.

Nếu trong trường hợp của bạn, danh mục có thể được thể hiện dưới dạng cây, bạn có thể xây dựng một đường dẫn duy nhất cho mỗi từ khóa. Trong trường hợp đó, bạn sẽ cần một số mã (C#) đi lên trục cha và nối các tên. Bạn có thể đặt mã này một trong hai:

  1. trong một TBB mà bạn đưa vào mẫu của bạn trước khi DWT HOẶC
  2. trong một chức năng tùy chỉnh Dreamweaver.

Dù bằng cách nào cũng sẽ hoạt động tốt.

+0

Cảm ơn bạn đã giúp đỡ tôi. Đây thực sự là một gợi ý có giá trị! Cảm ơn rất nhiều! – Krishnakumar

8

Như bạn vừa phát hiện, Phân cấp từ khóa Tridion là "giả" - Từ khóa được lưu trữ dưới dạng danh sách phẳng, không phải dưới dạng danh sách phân cấp (như bạn có với thư mục). Thông tin về từ khóa cha mẹ và con được lưu trữ trong chính từ khóa đó.

Có nhiều giải pháp cho điều này - tất nhiên, ví dụ bạn có thể sử dụng điều này trong một 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: Cập nhật đệ quy "đi lên" hệ thống phân cấp. BAO GIỜ một từ khóa có thể có nhiều phụ huynh, tôi sẽ để điều đó cho phép bạn sửa chữa ...

+0

Cảm ơn bạn Nuno đã chia sẻ đề xuất của bạn. Điều này thực sự hữu ích! – Krishnakumar

+0

Nếu câu trả lời của Nuno giúp bạn giải quyết vấn đề của mình, vui lòng chấp nhận câu trả lời bằng cách nhấp vào dấu kiểm lớn ở bên trái. –

Các vấn đề liên quan