Controlling navigation options from the onet.xml
During past weeks I have been creating few customer POCs to demostrate the excellent WCM features of the MOSS 2007. Since the MOSS publishing features are deployed over the WSS using standard feature framework, we can configure the provisioning of the sites directly from the onet.xml. In this blog entry, I'll declare the concepts behind this possibility and the possible properties, which can be set.
Introduction
If you have played around the onet.xml files included as out-of-the-box in the MOSS (Publishing template etc.), you have most likely noticed the publishing navigation feature dependencies in the WebFeatures element as in xml block below.
<WebFeatures>
...
<Feature ID="541F5F57-C847-4e16-B59A-B31E90E6F9EA">
<Properties xmlns="https://schemas.microsoft.com/sharepoint/">
<Property Key="InheritGlobalNavigation" Value="true"/>
<Property Key="ShowSiblings" Value="true"/>
<Property Key="IncludeSubSites" Value="true"/>
</Properties>
</Feature>
...
</WebFeatures>
So what does this really mean? Basically we are making a binding to publishing navigation feature and configuring it by using properties, which the handler is capable to handle. So the ID given in the onet.xml is a reference to NavigationProperties feature, which can be found from the following folder (by default):
C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\NavigationProperties
And the feature.xml file from here contains following information:
<Feature Id="541F5F57-C847-4e16-B59A-B31E90E6F9EA"
Title="Portal Navigation Properties"
Description="Set per-site navigation properties."
Version="12.0.0.0"
Scope="Web"
Hidden="TRUE"
ReceiverAssembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
ReceiverClass="Microsoft.SharePoint.Publishing.NavigationFeatureHandler"
xmlns="https://schemas.microsoft.com/sharepoint/">
<ElementManifests>
<ElementManifest Location="NavigationSiteSettings.xml"/>
</ElementManifests>
</Feature>
As you can see, ReceiveAssebly and ReceiverClass attributes are set and there for when the actions are performed for the feature, "custom code" is executed. As declared already above, the custom code is aware of some parameters which can be set for the feature and based on these parameters, the receiver handler modifies the SPPublishingWeb object's properties.
Supported parameters
So what are the parameters supported by the NavigationFeatureHandler class and how do they affect compared to settings done from the user interface. I'll declare the supported parameters one-by-one and compare the settings to modifications done from the user interface (Site Actions -> Site Settings -> Navigation) .
IncludeInGlobalNavigation, IncludeInCurrentNavigation
Controls the IncludeInGlobalNavigation and IncludeInCurrentNavigation properties of the SPPublishingWeb. In user interface this functionality is controlled by using following options.
InheritGlobalNavigation
This paremeters controls the global navigation options. If set the true, we will get the same outcome by selecting "Display the same navigation items as the parent site".
InheritCurrentNavigation
This controls the inheritance of the current navigation. If set the true, we would get the same results as by selecting the "Display the same navigation items as the parent site" from the user interface (the first option from the picture below)
ShowSiblings
If set the TRUE, the outcome is the same options as the “Display the current site, the navigation items below the current site, and the current site's siblings” option in the user interface (second option from the picture below). Note that the IncludeSubSites and IncludePages parameters also affects to outcome.
IncludeSubSites
This is same as the "Show subsites" option in the user interface . Note that if the current navigation has been set to show the same navigation items as the parent site, this option has no meaning.
IncludePages
This is same as the "Show subsites" option in the user interface . Note that if the current navigation has been set to show the same navigation items as the parent site, this option has no meaning.
OrderingMethod
This option affects to ordering of the navigation items. Note that the final outcome depends also from the AutomaticSortingMathod and the SortAscending properties.
Possible values
Automatic - Sort all node types automatically, and group pages after other types.
Manual - Sort all types manually.
ManualWithAutomaticPageSorting - Sort all types except pages manually. If pages are included, sort them automatically and group them after all other types.
AutomaticSortingMathod and SortAscending
These controls the sorting of the navigation items. Possible outcome depends on numerous other properties, since for example the AutomaticSortingMathod property has only meaning, if the OrderingMethod has been set to ManualWithAutomaticPageSorting.
Note. It's not a typo... it's really AutomaticSortingMathod...
Possible values for the AutomaticSortingMathod property
CreatedDate - Sort items by time of creation.
LastModifiedDate - Sort items by time of last modification.
Title - Sort items alphabetically by title.
Final words
As you can see, you can configure all the same options directly from the onet.xml, as you can do from the user interface. Other thing to notice is the possibilities provided by the Feature Receiver concept, which gives flexible way to execute custom code during the site provisioning (or anytime the feature is otherwise activated).
More information concerning the functionalities declared here can be found from the SDK.
- Feature.xml schema
- Onet.xml schema
- SPFeatureReceiver class - All the FeatureReceiver's are inherited from this class
PS. I'll try to find some time to write similar article concerning the other possibilities of the WCM features (how to limit the page layouts, how to limit the web templates shown in UI, how to configure master page etc.). Stay tuned...
[Update] - The following post with information concerning the other publishing feature configurations has been released. Check the details from here.
Comments
Anonymous
October 14, 2007
In the previous post, I promised to try to find time to share additional information concerning the onet.xmlAnonymous
January 20, 2008
When setting OrderingMethod to "Manual", is there a way to move the individual navigation items into required positions? Do I need to create a custom feature which sorts the items, after the main navigation feature has been installed?Anonymous
January 21, 2008
The comment has been removedAnonymous
March 28, 2008
Thanks for the post! I was wondering why i can't hide pages the same way, at least they won't hide the way i try to hide them ;-) i have a site definition for a publishing site where i defined a module 'Content' to deploy some default pages <Module Name="Content" Url="$Resources:cmscore,List_Pages_UrlName;" Path=""> <File Url="sitemap.aspx" Type="GhostableInLibrary" Path="default.aspx" Level="Draft" > <Property Name="Title" Value="Sitemap" /> <Property Name="PublishingPageLayout" Value="~SiteCollection/_catalogs/masterpage/PageLayoutDefault.aspx,~SiteCollection/_catalogs/masterpage/PageLayoutDefault.aspx" /> <Property Name="IncludeInGlobalNavigation" Value="false" /> </File> <Module> According to the SDK, the PublishingPage class exposes a public property called 'IncludeInGlobalNavigation'. Can somebody point me to the right direction.Anonymous
April 10, 2008
Good question... and actually quote logical due the misleading element names within the Module element structures. The properties (Property element) here are actually columns within the list (site columns of the content type of the page) where the page is uploaded... not actual properties of the .NET class... There's no direct way of setting the actual .NET class properties from the Module / File elements. If this is however required, you have to create a feature receiver, which manipulates the actual objects using APIs.Anonymous
September 24, 2008
can i include navigation groups(dropdownlists) to topnavi trough site definition(onet.xml). would like to create group "documentlibs" with the dropdownitems pointing to documentlibsAnonymous
November 22, 2008
Really good post - thanks. I wonder why MS cannot come up with a documentation like this...Anonymous
September 14, 2009
Some real interesting facts of navigation properties:
- It is a typo from MS for AutomaticSortingMethod it is typed as AutomaticSortingMathod
- While specifying navigation properties following properties take value in small case:-
InheritGlobalNavigation (true/false)
InheritCurrentNavigation (true/false)
IncludeSubSites (true/false) while some of the properties accept values in Camel Case
IncludePages (True/False)
Anonymous
June 18, 2012
When I use several of these properties not all seem to work.Anonymous
June 19, 2012
Hi Danny, there are different combinations of these properties whcih work and what doesn't work. Notice also that this was written for SharePoitn 2007. 2010 has different set of options and combinations. .veskuAnonymous
June 03, 2013
hi, what about 2013 new settings for navigation (setting structural and managed navigation)? is there any attribute for setting the type of navigation by this feature?Anonymous
January 27, 2017
How can i set the Navigation Settings in ONET.XML with set Global Navigation with structural navigation check show pages and Current navigation structural navigation with uncheck show subsites and show pages options. My Code is :