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 パーツをマスターページに配置し、アクセス許可に基づいてユーザーに何らかのナビゲーションを提供できるようにすることです。

また、単純に要素を

  • ここでの唯一の問題は、これをマスターページに配置すると、最初の項目にカーソルを合わせると 2 番目のレベルが表示されますが、そこにマウスを移動すると消えてしまうことです。(これは、Web パーツがページ自体に配置されたときにうまく機能しました)

    私はここで正しい軌道に乗っていますか、それとも同じように、またはそれ以上に機能する別の方法がありますか?

    ティア。

  • 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 に答える