sharepoint 中的自定义导航提供程序 - 如何从列表生成导航项?

发布于 2024-12-13 19:13:43 字数 986 浏览 0 评论 0原文

感谢您阅读我的问题。

以下情况:
-基于自定义内容类型的共享点列表。内容类型只不过是一个具有一些额外属性(如 url、targetpage)的文件夹。 - 文件夹内容类型和项目代表菜单结构。例如:


www.home.com | home.aspx
--->子主页 | www.subhome.com |子主页.aspx
印象 | www.impressum.com | impressum.aspx

此结构没有限制它的深度或它可以包含的项目/文件夹的数量。唯一的限制是文件夹内的每个名称都必须是唯一的。

由于性能原因,我需要一次获取列表中的所有项目,而不是每个文件夹。我是这样管理的:

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

之后,我将 SPListItems 转换为名为 NavigationEntry 的对象。该对象包含 SiteMapNode 和一些其他属性,如路径、项目名称和级别计数(例如 Home/Subhome = level2,Impressum = level1)。

现在,我将所有这些项目放入字典中,并以路径+项目名称作为键(因为它是唯一的,并提示我该项目所在的位置)。之后,我使用 linq 访问该字典并获取每个级别的项目级别,直到到达末尾(某个级别上没有可用的项目)。现在是棘手的部分。我必须将这个奇怪的结构“转换”为 Sharpoint 的导航结构。因为我是共享点新手,有时这有点令人困惑。

目前,我遍历各个级别并使用 SiteMapNodeCollections 创建 SiteMapNodes,进入下一个级别,查看父项是否已经存在,将子项放入其中,依此类推。这可行,但非常复杂、肮脏且脆弱。

有没有任何“简单”或更结构化的方法来解决这个问题?我不是在寻找已经编码的解决方案,而是寻找有关如何解决此问题的正确方向的任何提示。谢谢你! :)

thank you for reading my question.

Following situation:

-A sharepoint list, based on a custom content type. The content type is nothing more than a folder with some extra properties (like url, targetpage).
-The folder content types and items represent a menu structure. For example:

Home | www.home.com | home.aspx
---> Subhome | www.subhome.com | subhome.aspx
Impressum | www.impressum.com | impressum.aspx

This structure has no limits how deep it's going to be or how many items/folders it can contain. The only restriction is that inside a folder every name must be unique.

Because of the performance I need to fetch all items in the list at once and not for every folder. I managed it this way:

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

After that I translate the SPListItems into an object called NavigationEntry. This object contains an SiteMapNode and some other properties like the path, itemname and levelcount (e.g. Home/Subhome = level2, Impressum = level1).

Now I place all this items in a dictionary with the path+itemname as key (because it's unique and gives me a hint where the item lies). After that I access this dictionary with linq and grab the items level per level until I reach the end (no items available on a level). Now comes the tricky part. I have to "convert" this weird structure into navigation structure for sharpoint. Because i'm new to sharepoint this is a bit confusing sometimes.

At the moment I go trough the levels and create SiteMapNodes with SiteMapNodeCollections, go to the next level, look if the parentitem is already there, put the child into it and so on. That works, but its very complicated, dirty and fragil.

Is there any "easy" or more structured way to solve this issue? I'm not looking for an already coded solution but for any hint into the right direction on how to solve this. Thank you! :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深海夜未眠 2024-12-20 19:13:43

如果您想要的只是一个导航树,我可以推荐 JSTree

我曾经将它用于多级 Quichnav 委托。当我创建了一个管理界面来添加项目时,您只需在列表的更改事件中构造一个 XML 或 Json 即可。或者更奇特的是,每次扩展节点时都会进行查询。

希望这对

拉尔斯有帮助

IF just an Navigation tree is what you want , I can recomment JSTree

I once used it for a multilevel Quichnav Delegate. While I made a Manage Interface to add items, You could just cunstruct a XML or Json in the Change Events of the List. Or to be more fancy do a query every time a node is expanded.

Hope this helps

Lars

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文