Take the community feedback survey now.

Jacob Khan
Jan 3, 2013
  6573
(0 votes)

Menu Provider for EPiServer Top Navigation

There are lot of great blog posts regarding how to add something to the top level navigation in EPiServer.

http://www.dnasir.com/2012/05/15/episerver-cms-custom-top-menu-for-multiple-plugins/

http://world.episerver.com/Blogs/Dung-Le/Dates/2010/2/Create-Global-Navigation-in-EPiServer-CMS-6-RC1/

http://world.episerver.com/Documentation/Items/Tech-Notes/EPiServer-CMS-6/EPiServer-CMS-60/OnlineCenter-Developer-Documentation/

It is extremely flexible and powerful. One small thing that we often encounter is that we want to reuse the menu on the top and want to include the new script files and styles needed for CMS 7 when we create plugins.

Accomplishing this is extremely easy. First we need to add four import statements in our markup.

<%@ Import Namespace="EPiServer.Framework.Web.Resources" %>
<%@ Import Namespace="EPiServer.Framework.Web.Mvc.Html" %>
<%@ Import Namespace="EPiServer" %>

We also need to register our Menu User Control

<%@ Register TagPrefix="sc" Assembly="EPiServer.Shell" Namespace="EPiServer.Shell.Web.UI.WebControls" %>

In the head tag of our ASPX we need to add our styles

<asp:PlaceHolder ID="shellScripts" runat="server">
            <%=Page.ClientResources("Dojo", new[] 
{ ClientResourceType.Style })%> <%=Page.ClientResources("ShellCore")%> <%=Page.ClientResources("ShellWidgets")%> <%=Page.ClientResources("ShellCoreLightTheme")%> <%=Page.ClientResources("ShellWidgetsLightTheme")%> <%=Page.ClientResources("Navigation")%> </asp:PlaceHolder>

We also need to add our Menu to the page, after that we are done

 <div class="epi-globalNavigationContainer">
        <sc:ShellMenu ID="ShellMenu2" runat="server" SelectionPath="/global/fb/main" />
    </div>

I used a MenuProvider since I dont really like making web.config changes.

 [MenuProvider]
    public class MenuProvider : IMenuProvider
    {
        public IEnumerable<MenuItem> GetMenuItems()
        {
            SectionMenuItem sectionMenuItem = new SectionMenuItem("Facebook", "/global/fb");
            sectionMenuItem.IsAvailable = ((RequestContext request) => PrincipalInfo.Current.HasPathAccess(UriSupport.Combine("/Facebook", "")));
            SectionMenuItem sectionMenuItem2 = sectionMenuItem;
            UrlMenuItem urlMenuItem = new UrlMenuItem("Main", "/global/fb/main", "/modules/TopBarPlugin/MainMenuPlugin.aspx");
            urlMenuItem.IsAvailable = ((RequestContext request) => true);
            urlMenuItem.SortIndex = 100;
            UrlMenuItem urlMenuItem2 = urlMenuItem;
           
            return new MenuItem[]
            {
                sectionMenuItem2, 
                urlMenuItem2
            };
        }
    }

Screen Shot 2013-01-02 at 2.40.41 PM

I am attaching my files in case someone wants the entire code

Jan 03, 2013

Comments

Please login to comment.
Latest blogs
A day in the life of an Optimizely OMVP - Opticon London 2025

This installment of a day in the life of an Optimizely OMVP gives an in-depth coverage of my trip down to London to attend Opticon London 2025 held...

Graham Carr | Oct 2, 2025

Optimizely Web Experimentation Using Real-Time Segments: A Step-by-Step Guide

  Introduction Personalization has become de facto standard for any digital channel to improve the user's engagement KPI’s.  Personalization uses...

Ratish | Oct 1, 2025 |

Trigger DXP Warmup Locally to Catch Bugs & Performance Issues Early

Here’s our documentation on warmup in DXP : 🔗 https://docs.developers.optimizely.com/digital-experience-platform/docs/warming-up-sites What I didn...

dada | Sep 29, 2025

Creating Opal Tools for Stott Robots Handler

This summer, the Netcel Development team and I took part in Optimizely’s Opal Hackathon. The challenge from Optimizely was to extend Opal’s abiliti...

Mark Stott | Sep 28, 2025

Integrating Commerce Search v3 (Vertex AI) with Optimizely Configured Commerce

Introduction This blog provides a technical guide for integrating Commerce Search v3, which leverages Google Cloud's Vertex AI Search, into an...

Vaibhav | Sep 27, 2025

A day in the life of an Optimizely MVP - Opti Graph Extensions add-on v1.0.0 released

I am pleased to announce that the official v1.0.0 of the Opti Graph Extensions add-on has now been released and is generally available. Refer to my...

Graham Carr | Sep 25, 2025