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 :)
No comments:
Post a Comment