sharepoint-2010sitecollection

Iterate all the sharepoint site collection and sub sites and create drill down menu


I need to iterate all the site collection under the web application and sub sites under the site collection and create share point drill down menu.


Solution

  • public class _starter : MasterPage
    {
        protected Menu CustomMenu;
    
        protected void Page_Load(object sender, EventArgs e)
        {
            using (SPSite site = new SPSite(SPContext.Current.Site.Url))
            {
                SPWebApplication webapp = site.WebApplication;
                CustomMenu.Items.Clear();
                BeginProcess(webapp);
            }
        }
    
        public void BeginProcess(SPWebApplication webApp)
        {
            //Iterate through each site collection inside the web application
            //Iterate through each site collection inside the site collection 
            foreach (SPSite site in webApp.Sites)
            {
                using (SPWeb oSPWeb = site.OpenWeb())
                {
                    if (oSPWeb.DoesUserHavePermissions(SPBasePermissions.EnumeratePermissions))
                    {
                        MenuItem parentMenuItem = new MenuItem(oSPWeb.Title, oSPWeb.Title, "", oSPWeb.Url);
                        CustomMenu.Items.Add(parentMenuItem);
                        if (oSPWeb.Webs.Count > 0)
                        {
                            RecursiveWebCheck(oSPWeb, parentMenuItem);
                        }
                    }
                }
            }
        }
    
        private void RecursiveWebCheck(SPWeb parentoSPWeb, MenuItem parentMenuItem)
        {
            foreach (SPWeb web in parentoSPWeb.Webs)
            {
                MenuItem childMenuItem = new MenuItem(web.Title, web.Title, "", web.Url);
                parentMenuItem.ChildItems.Add(childMenuItem);
                RecursiveWebCheck(web, childMenuItem);
                web.Dispose();
            }
        }
    }