Vytvoření Sharepoint / MOSS sitemap

hlasů
2

Snažím se vytvořit sitemap pro mou publikování webu MOSS, mám dva přístupy, ale zdá se, že uvízl s oběma.

Moje první přístup je použití PortalSiteMapProvider, které je již vytvořen a pěkně mezipaměti ...

PublishingWeb rootWeb = PublishingWeb.GetPublishingWeb(SPContext.Current.Site.RootWeb);

//Get the URL of the default page in the web
string defaultPageUrl = rootWeb.DefaultPage.ServerRelativeUrl;

PortalListItemSiteMapNode webNode = (PortalListItemSiteMapNode)PortalSiteMapProvider.CurrentNavSiteMapProviderNoEncode.FindSiteMapNode(defaultPageUrl);

HttpContext.Current.Response.Output.WriteLine(Top Level:  + webNode.Title.ToString() + <br />);

//iterate through each one of the pages and subsites
foreach (SiteMapNode smnTopLevelItem in webNode.ParentNode.ChildNodes)
{

    HttpContext.Current.Response.Output.WriteLine(smnTopLevelItem.Title.ToString() + <br />);

    //if the current sitemap has children, create a submenu for it
    if (smnTopLevelItem.HasChildNodes)
    {
        foreach (SiteMapNode smnChildItem in smnTopLevelItem.ChildNodes)
        {
         HttpContext.Current.Response.Output.WriteLine(smnChildItem.Title.ToString() + <br />);
        }
    }
}

HttpContext.Current.Response.End();

ale zdá se vrátit vše v kolekci webů (například seznamy, surverys). Chci jen ukázat Sharepoint pásů.

My ostatní se používalo tento kus kódu ..

SPSite siteCollection = new SPSite(http://example.org);
SPWebCollection sites = siteCollection.AllWebs;
foreach (SPWeb site in sites)
{
    Console.WriteLine(site.Title.ToString() +   + site.ServerRelativeUrl.ToString());
}

Což je ideální, na rozdíl od problému návratu všechny pavučiny v obytném seznamu.

V ideálním případě bych chtěl být schopni přidat odsazení zobrazit podřízené weby.

Položena 24/06/2009 v 17:27
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
6

Obecně platí, že je to dobrý nápad používat objektový model pro rekurze. Je to velmi pomalé a náročné na zdroje, jak toho dosáhnout. PortalSiteMapProviderje pre-cache pro vás a může trhat přes celou strukturu webu v milisekundách.

Pokud jde o vaši otázku SPSite.AllWebs, že majetek nemá vrátit plochý seznam všech pásů. To je to, co to je pro. Chcete-li seznam pouze bezprostřední podřízené pásů, použijte SPSite.RootWeb.Websvlastnost. Recurse nad sebou SPWebve .Websvlastnictví, a volat jejich .Websmajetek zase získat stromové zobrazení.

Také, pokud se jedná o objektový model, ujistěte se, že NAKLÁDAT každý web a webu . To způsobí epické špatné problémy, pokud ne. To zahrnuje likvidaci každý web v .Webskolekci, i když jste se ho dotkl.

Upravit:

Chcete-li získat PortalSiteMapProvider vrátit pouze weby, nastavte jeho IncludePagesvlastnost false.

Odpovězeno 24/06/2009 v 17:32
zdroj uživatelem

hlasů
2

Už jste vyzkoušeli kontrolou typu každého uzlu v foreach smyčce pomocí vlastnosti PortalSiteMapNode.Type a zobrazovat pouze uzly typu NodeTypes.Area?

Odpovězeno 24/06/2009 v 20:33
zdroj uživatelem

Odpovězeno 09/12/2010 v 15:23
zdroj uživatelem

hlasů
1

díky za replys každého, to je to, co jsem přišel s

        public ListSiteMap()
    {
        PortalSiteMapProvider portalProvider1 = PortalSiteMapProvider.WebSiteMapProvider;
        portalProvider1.DynamicChildLimit = 0;
        portalProvider1.EncodeOutput = true;

        SPWeb web = SPContext.Current.Site.RootWeb;

        PortalSiteMapNode webNode = (PortalSiteMapNode)portalProvider1.FindSiteMapNode(web.ServerRelativeUrl);

        if (webNode == null || webNode.Type != NodeTypes.Area) return;

        Console.WriteLine(webNode.Title.ToString() + " - " + webNode.Description.ToString());

        // get the child nodes (sub sites)
        ProcessSubWeb(webNode);
    }

    private void ProcessSubWeb(PortalSiteMapNode webNode)
    {
        foreach (PortalSiteMapNode childNode in webNode.ChildNodes)
        {
            Console.WriteLine(childNode.Title.ToString() + " - " + childNode.Description.ToString());

            //if the current web has children, call method again
            if (childNode.HasChildNodes)
            {
                ProcessSubWeb(childNode);
            }
        }
    }

Zjistil jsem tyto články pomohly

http://blogs.msdn.com/ecm/archive/2007/05/23/increased-performance-for-moss-apps-using-the-portalsitemapprovider.aspx

http://blogs.mosshosting.com/archive/tags/SharePoint%20Object%20Model/default.aspx

http://www.hezser.de/blog/archive/tags/SPQuery/default.aspx

Odpovězeno 26/06/2009 v 10:38
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more