Skip Ribbon Commands
Skip to main content

SharePoint Cross Site Collection Common Top Navigation

 

James Strugnell

14/03/2012

A recent requirement was called for a SharePoint solution that would allow for cross site collection navigation in large farms.

The main issue was the administration of the navigation as there were 20+ site collections meaning that they all had to be changed one by one. This raised a few issues, time, effort required and consistency.

The farm used a common master page though-out, but they wanted a number of site collections to use the out of the box navigation and then others to use the common navigation.
The solution we came up with was to utilise the ASP.Net site map provider with the SharePoint navigation control within the master page. This solved the problem of having multiple places to edit, but raised a few new ones. As the navigation would not change often this was not a big problem, but it was the ability to change the navigation. Every time you would want to change the navigation then a solution upgrade would have to be performed.

The following is how to implement this as a Visual studio solution:

1. Create a copy of your existing masterpage and add it to the project.

2. Create Assets folder then a folder called Masterpages add the masterpage here.

3. On the Master Page find the following control.

<asp:ContentPlaceHolder id="PlaceHolderTopNavBar" runat="server">

         <asp:ContentPlaceHolder id="PlaceHolderHorizontalNav" runat="server">

                 <SharePoint:AspMenu

                          ID="TopNavigationMenuV4"

                          Runat="server"

                          EnableViewState="false"

                          DataSourceID="topSiteMap"

                          AccessKey="<%$Resources:wss,navigation_accesskey%>"

                          UseSimpleRendering="true"

                          UseSeparateCss="false"

                          Orientation="Horizontal"

                          StaticDisplayLevels="2"

                          MaximumDynamicDisplayLevels="2"

                          SkipLinkText=""

                          CssClass="s4-tn"/>

                  <SharePoint:DelegateControl runat="server" ControlId="TopNavigationDataSource" Id="topNavigationDelegate">

                          <Template_Controls>

                                   <asp:SiteMapDataSource

                                            ShowStartingNode="False"

                                            SiteMapProvider="SPNavigationProvider"

                                            id="topSiteMap"

                                            runat="server"

                                            StartingNodeUrl="sid:1002"/>

                          </Template_Controls>

                 </SharePoint:DelegateControl>

         </asp:ContentPlaceHolder>

</asp:ContentPlaceHolder> 

4. Replace the above code with this:

            <asp:ContentPlaceHolder id="PlaceHolderTopNavBar" runat="server">
            
                        
            <asp:ContentPlaceHolder id="PlaceHolderHorizontalNav" runat="server">
            
                                
            <SharePoint:AspMenu
            
                                         
            ID="TopNavigationMenuV4"
            
                                         
            Runat="server"
            
                                         
            EnableViewState="false"
            
                                         
            DataSourceID="topSiteMap"
            
                                         
            AccessKey="<%$Resources:wss,navigation_accesskey%>"
            
                                         
            UseSimpleRendering="true"
            
                                         
            UseSeparateCss="false"
            
                                         
            Orientation="Horizontal"
            
                                         
            StaticDisplayLevels="2"
            
                                         
            MaximumDynamicDisplayLevels="4"
            
                                         
            SkipLinkText=""
            
                                         
            CssClass="s4-tn"/>
            
                                
            <SharePoint:DelegateControl runat="server" ControlId="TopNavigationDataSource1">
            
                                         
            <Template_Controls>
            
                                                  
            <asp:SiteMapDataSource
            
                                                           
            ShowStartingNode="True"
            
                                                           
            SiteMapProvider="CustomTopNavProvider"
            
                                                           
            id="topSiteMap"
            
                                                           
            runat="server" 
            />
            
                                         
            </Template_Controls>
            
                                
            </SharePoint:DelegateControl>
            
                        
            </asp:ContentPlaceHolder>
            </asp:ContentPlaceHolder> 

5. Note that the provider has changed to the customTopNavProvider, configuring the ASPMenu control also allows you to have more control over the Navigation.

6. Save the file and add the following to the Elements.xml of the feature so that the master page is referenced:

            
               <Module Name="Masterpage and Page Layouts" List="116" Url="_catalogs/masterpage" >
    <File Type="GhostableInLibrary" 
Path="Assets\Masterpages\citricCommonNav.master" 
Url="citricCommonNav.master" />
</Module>

7. Add feature event receiver, on feature activated there is an addition to the Web Config that will reference the site map provider, when deactivated this is then removed.

            public override void FeatureActivated(SPFeatureReceiverProperties properties)
            {   
                SPWebApplication webApp = (SPWebApplication)properties.Feature.Parent;
                webConfigMod(true, webApp);
            }
            public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
            {
                SPWebApplication webApp = (SPWebApplication)properties.Feature.Parent;
                webConfigMod(false, webApp);
            }
            private void webConfigMod(bool addOrRemove, SPWebApplication webApp)
            {
                SPWebConfigModification modifyWebConfig = new SPWebConfigModification();
                modifyWebConfig.Path = "configuration/system.web/siteMap/providers";
                modifyWebConfig.Name = "add[@name=\"CustomTopNavProvider\"]";
                modifyWebConfig.Sequence = 0;
                modifyWebConfig.Owner = "add[@name=\"CustomTopNavProvider\"]";
                modifyWebConfig.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
                modifyWebConfig.Value = "<add name=\"CustomTopNavProvider\" 
             siteMapFile=\"/_layouts/1033/Citric/SiteMapProvider/CustomTopNavMenu.sitemap\" 
             type=\"System.Web.XmlSiteMapProvider,System.Web, 
             Version=2.0.0.0, Culture=neutral, 
             PublicKeyToken=b03f5f7f11d50a3a\"/>";

     if (addOrRemove)

                {
                    webApp.WebConfigModifications.Add(modifyWebConfig);
                }
                else
                {
                    for (int c = webApp.WebConfigModifications.Count - 1; c >= 0; c--)
                    {
                        if (webApp.WebConfigModifications[c].Owner == "add[@name=\"CustomTopNavProvider\"]")
                        {
                            webApp.WebConfigModifications.Remove(webApp.WebConfigModifications[c]);
                        }
                    }
                }
                webApp.Update();
                webApp.Farm.Services.GetValue<SPWebService>().ApplyWebConfigModifications();
            }

8. Add a SharePoint mapped Layouts folder and create the structure as followed.

TEMPLATE  -> LAYOUTS -> 1033 -> CITRIC -> SiteMapProvider

9. Add a new sitemap document to the SiteMapProvider folder.

10. The base document should look something like this:

            
               <?xml version="1.0" encoding="utf-8" ?>
            
               <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
            
                 <siteMapNode url="/" title="Citric" description="">
            
                   <siteMapNode url="/Home" title="Home" description="" />
            
                   <siteMapNode url="/Services" title="Services" description="" >
            
                     <siteMapNode url="/Consultancy" title="Consultancy" description="" />
            
                     <siteMapNode url="/Development" title="Development" description="" />
            
                     <siteMapNode url="/Hosting" title="Hosting" description="" />
            
                     <siteMapNode url="/Support" title="Support" description="" >
            
                       <siteMapNode url="/SubSupport" title="SubSupport" description="" />
            
                     </siteMapNode>
            
                   </siteMapNode>
            
                   <siteMapNode url="/Solutions" title="Solutions" description="" />
            
                   <siteMapNode url="/Case Studies" title="Case Studies" description="" />
            
                   <siteMapNode url="/Citric Blog" title="Citric Blog" description="" />
            
                   <siteMapNode url="/Clients" title="Clients" description="" />
            
                   <siteMapNode url="/About" title="My Business" description="">
            
                   </siteMapNode>
            
                   <siteMapNode url="/search" title="Search" description="" />
            
                 </siteMapNode>
            
               </siteMap>

11. Once all packaged up as a solution, all that is required is to select the common masterpage (edited and deployed above) and your common navigation feature activated.


 About us

Fuse Collaboration Services is a Cloud Solution Provider and Microsoft Gold Partner specialising in delivering SharePoint, Skype for Business, and Azure cloud-based solutions. Based in Northampton, UK.

Microsoft Gold Partner Logo showing 5 competencies

Read more

 Latest Tweets

 Latest Blog

 

 

‘We’d love you to stick around’. But stick around where?3728<p class="lead">Here at Fuse Collaboration Services both our personal and professional email inboxes are receiving a steady flow of emails from companies asking us to stay on their mailing lists. This is the most obvious and public aspect of the new GDPR that is currently being implemented.</p><p>There are a couple of positive side-effects from these new regulations, not least that by forcing you to opt in to mailing lists to make sure you are only receiving what you want to receive a company will really know how engaged you are, making your email address all the more valuable when it comes to marketing.</p><p>Companies have been responding to the GDPR changes by re-working their data management policies, but how much time is being put into how these policies can be enacted day-to-day, especially away from the aforementioned marketing email lists?</p><p>For example, if you have written a policy that says that emails are going to be stored for one year before deletion, how are you going to store them away from an active email server (thereby reducing the burden on a day-to-day server), or keep hold of them once a member of staff leaves? Or what happens if data is accidentally deleted by a member of staff?</p><p>Furthermore, data security is made all the more important as more and more companies opt for a flexible working approach where their staff can work from remote locations, such as home or (dare we say it) a high street coffee chain with its free Wi-Fi access.</p><p>Domestic or public internet access networks are unlikely to have the same levels of security as a company's, which makes it all the more important that any data transfer between a central hub and remote laptop is encrypted and has the latest security.</p><p>Chris Evans of Computer Weekly has highlighted <a href="https&#58;//www.computerweekly.com/feature/GDPR-brings-serious-implications-for-data-storage" target="_blank"> <span style="text-decoration&#58;underline;">five areas</span></a>&#160;which will impact the day-to-day work of the data storage manager under GDPR, including&#58;</p><ul><li>encryption; </li><li>detailed application-to-storage mapping;</li><li>security and audit; </li><li>validation of test and development requirements;</li><li>and collaborating closely with colleagues.</li></ul><p>Ultimately, you need to be able to give all your customers, clients, stakeholders and staff the confidence that their data and documents are stored securely, but also in a way that allows you to respond to data requests quickly and efficiently without having to wade through a mound of irrelevant information.</p><p>You also need to have the peace of mind that any deleted information can be recovered within your policy timetables, whether they be one year, five years, or longer than that.</p><p>There is also a danger that you could be sucked into a one-size-fits-all approach using policy and storage templates that have been designed for organisations that are in a different sector or are of a vastly different size to your own.</p><p>Fuse's data back-up and storage solutions tick all of the boxes you need to have that peace of mind to concentrate on your main business, namely growing as a company, while also being tailored to your specific needs.</p><p>Fuse uses a mixture of cloud-based packages to meet your requirements and allow your staff to access their relevant information <em>securely </em>regardless of where they are working. Our solutions are also easy to monitor by your in-house IT team, so that in the unlikely event of a data breach it can be identified, resolved and reported quickly.</p><div class="well well-lg"><p class="lead">Give us a call on 01604 797979 and we can have a chat about how you can make sure your data policy matches your day-to-day operations and requirements.</p></div> | Chris Wearmouth | 693A30232E777C6675736563735C632E776561726D6F757468 i:0#.w|fusecs\c.wearmouth16/05/2018 23:00:002018-05-16T23:00:00ZData security and rentention in a cloud based infrastructureData security in a cloud based infrastructure14/06/2018 09:56:102550htmlFalseaspx

 Contact us

Our address
12 Brookfield, Duncan Close
Moulton Park, Northampton
NN3 6WL
P: +44(0)1604 797979
Contact Us