2011-11-04 16 views
1

感謝您閱讀我的問題。SharePoint中的自定義導航提供程序 - 如何從列表中生成導航項目?

以下情況:
-A分享點列表,基於自定義內容類型。內容類型不過是一個具有一些額外屬性的文件夾(如url,targetpage)。 - 文件夾內容類型和項目表示菜單結構。例如:

首頁| www.home.com | home.aspx
---> Subhome | www.subhome.com | subhome.aspx
版本說明| www.impressum.com | impressum.aspx

這種結構沒有限制它將會有多深是或有多少項目/文件夾,它可以包含。唯一的限制是每個文件夾內的文件名必須是唯一的。

,因爲性能的,我需要在一次而不是每個文件夾取列表中的所有項目。我這樣管理它:

  SPQuery qry = new SPQuery(); 
      qry.ViewAttributes = "Scope='RecursiveAll'"; 

之後,我將SPListItems翻譯成一個名爲NavigationEntry的對象。此對象包含一個SiteMapNode和一些其他屬性,如路徑,項目名稱和級別計數(例如Home/Subhome = level2,Impressum = level1)。

現在我把所有這個項目在字典中的路徑+ ITEMNAME關鍵(因爲它是獨一無二的,給我一個提示,在項目所在)。之後,我用linq訪問這本詞典,並獲取每個關卡的物品等級,直到達到最後(關卡上沒有物品)。現在來了棘手的部分。我必須將這個奇怪的結構「轉換」爲sharpoint的導航結構。因爲我是新來的分享點,有時候有點混亂。

目前我通過水平和SiteMapNodeCollections創建SiteMapNodes,進入下一級,看是否已經有parentitem,把孩子放入它,等等。這有效,但它非常複雜,骯髒和脆弱。

有沒有「簡單」,或者更結構化的方式來解決這個問題?我不是在尋找一個已經編碼的解決方案,而是爲了向正確的方向提示如何解決這個問題。謝謝! :)

回答

0

如果單純的導航樹是你想要什麼,我可以電子書籍JSTree

我曾經用它爲多級Quichnav代表。雖然我創建了一個管理界面來添加項目,但您可以在列表的更改事件中對XML或Json進行縮減。或者更喜歡每次擴展節點時執行查詢。

希望這有助於

拉爾斯