Another genius SharePoint limitation or issue , If you want to implement your own custom site map provider, To implement your own Sitemap provider on SharePoint you will have to inherit from the following class :
- - Microsoft.SharePoint.Publishing.Navigation. PortalSiteMapProvider
- - Then you will have to override the following method
- public override SiteMapNodeCollection GetChildNodes(SiteMapNode node)
- - After implementing your custom logic with a static or recursive algorithm (In my case was a recursive algorithm to get all navigation terms from Managed Metadata Service in a specific term set), You will find that only 2 levels are showing in the top navigation menu ….weiiiiird
- - Ok google it… you will find that this maybe an issue in the <SharePoint:Aspmenu> control in your masterpage which contains a property called MaximumDynamicDisplayLevels,,, OOOOH this maybe my life saver…. :@ but no SharePoint will not make your life that easy.
- - Playing around with this property and other properties like StaticDisplayLevels but in vain .
- - So what is happening in the background … Time to reflect some code
- - Reflecting the Microsoft.SharePoint.Publishing.Navigation. PortalSiteMapProvider class … Here you will have following surprise
- Yes you are seeing it right, Microsoft engineers for some UNKNOWN reason had decided to HARDCODE the MaximumSupportedNodeDepth as a PROTECTED property to be UNACCESSABLE .
- Now implement your logic but this time inherit for the classic System.Web.StaticSiteMapProvider implement the following methods:
o public override SiteMapNode BuildSiteMap()
o protected override SiteMapNode GetRootNodeCore()
- You now have your own customized top navigation site map provider supporting n-level hierarchy
- Happy SharePointing :)