0

我正在使用 SharePoint Foundation 2010,我想创建一个多级导航。(类似于发布网站在 SharePoint Standard 中允许的内容。我意识到这可能是使用自定义站点地图提供程序构建的,我已经研究过了。

这里的关键是,我希望它只显示登录用户有权访问的页面和站点。

目前,我已经开始开发 Web 部件。在此 Web 部件中,我编写了一些 c# 代码来循环并获取所有站点和子页面(并检查用户是否具有权限),然后将它们添加到标签中。最终我想将它们添加到 asp:menu 或创建一个然后使用一些 css 或 jquery 来操纵它来执行下拉功能。

这是我的一些代码:

using (SPWeb oWebsite = new SPSite(webUrl).OpenWeb())
        {
            SPWebCollection collWebsite = oWebsite.Webs;

            foreach (SPWeb subSite in collWebsite)
            {
                if (subSite.DoesUserHavePermissions(SPContext.Current.Web.CurrentUser.LoginName, SPBasePermissions.Open))
                {
                    Label1.Text += SPEncode.HtmlEncode(subSite.Title) + "<BR>";
                }

                SPList pagelist = subSite.Lists["Site Pages"];

                foreach (SPListItem item in pagelist.Items)
                {
                    if (item.DoesUserHavePermissions(SPContext.Current.Web.CurrentUser, SPBasePermissions.Open))
                                            {
                        Label1.Text += item.Name + "<BR>";
                    }
                }

                Label1.Text += "<BR><BR>";

                subSite.Close();
            }

            Label1.Text += "<BR><BR><BR><BR>";
        }

    }

我不想将站点或页面添加到标签,而是在这里创建列表。最终目标是将此 Web 部件放在母版页上,并允许它根据权限为用户提供一些导航。

我还发现了一些 css 可以通过简单地添加元素来允许多级导航工作

  • 这里唯一的问题是,一旦我将它放在母版页上,当我将鼠标悬停在第一个项目上时会显示第二级,但在将鼠标移到那里时会消失。(当 web 部件被放置到页面本身时,这很有效)

    我是在正确的轨道上还是有另一种可能同样有效甚至更好的方法?

    TIA。

  • 4

    1 回答 1

    0
     SPSecurity.RunWithElevatedPrivileges(delegate
              {
    
            SPSite oSiteCollection = SPContext.Current.Site;
    
            using (SPWeb oWebsite = new SPSite(webUrl).OpenWeb())
            {
                SPWebCollection collWebsite = oWebsite.Webs;
    
                foreach (SPWeb subSite in collWebsite)
                {
                    var newItem = new MenuItem();
                    if (subSite.DoesUserHavePermissions(SPContext.Current.Web.CurrentUser.LoginName, SPBasePermissions.Open))
                    {
                        newItem.NavigateUrl = subSite.Url;
                        newItem.Text = SPEncode.HtmlEncode(subSite.Title);
                        newItem.Value = SPEncode.HtmlEncode(subSite.Title);
                    }
    
                    SPList pagelist = subSite.Lists["Site Pages"];
    
                    foreach (SPListItem item in pagelist.Items)
                    {
    
                        if (item.DoesUserHavePermissions(SPContext.Current.Web.CurrentUser, SPBasePermissions.Open))
                        {
                            var subItem = new MenuItem();
                            subItem.Value = SPEncode.HtmlEncode(item.Name);
                            subItem.Text = SPEncode.HtmlEncode(item.Name);
                            subItem.NavigateUrl = item.Url;
                            newItem.ChildItems.Add(subItem);
                        }
    
                    }
    
                    mnNAv.Items.Add(newItem);
                    subSite.Close();
               }
    
            }
    });
    
    于 2012-11-26T18:25:04.007 回答