The building blocks of the navigation are menu providers and menu items. A menu provider provides an enumeration of menu items which are organized in a tree according to their menu path. Episerver CMS contains a menu provider that looks at [MenuItem] attributes and provides them as menu items.
IMenuProvider
You can extend the standard menu by implementing a menu provider as an alternative to attributes. The menu provider returns menu items that are correctly localized. To use a menu provider, implement the IMenuProvider interface, decorate it with the [MenuProvider] attribute, and make it part of a registered shell module.
Adding menu items
You can add menu sections and sub-menu items such as menu sections, drop-downs, URLs and pop-up menu items. Each menu item defines a path which determines its location in the menu hierarchy. For example, a URL menu item with path /global/cms/myMenu is placed in the CMS section of the menu (which has the path /global/cms).
Types:
- URL Menu Item are links; a click navigates to specified URL.
- Popup Menu Item [Obsolete] are links that are opened in a new tab.
- Section Menu Item are global menu sections which change the visible menu items.
- Drop-Down Menu Item are drop-down style menu items designed for the action item area (right-hand side).
Example:
using System.Collections.Generic;
using EPiServer;
using EPiServer.Security;
using EPiServer.Shell.Navigation;
namespace Alloy.Business
{
[MenuProvider]
public class CmsMenuProvider : IMenuProvider
{
public IEnumerable<MenuItem> GetMenuItems()
{
var menuItems = new List<MenuItem>();
menuItems.Add(new UrlMenuItem("Another link to Admin",
MenuPaths.Global + "/cms" + "/cmsMenuItem",
UriSupport.ResolveUrlFromUIAsRelativeOrAbsolute("Admin/Default.aspx"))
{
SortIndex = SortIndex.First + 25,
IsAvailable = (request) => PrincipalInfo.HasAdminAccess
});
return menuItems;
}
}
}
Localizing menu items with a menu provider
A menu provider returns localized menu items.
Permissions with the menu provider
The menu provider can defer permission filtering to the menu item by setting the IsAvailable delegate to a method that checks access for the user provided with the RequestContext parameter.
Flow of menu items
Menu items flow from the providers into a hierarchical model, which is rendered into HTML.
Configuring web.config
The menu can also be extended by configuring web.config as follows:
<episerver.shell>
<navigation>
<add text="Intranet" menuPath="/global/intra"
url="http://intra" sortIndex="100" />
<add text="My section" menuPath="/global/my"
menuItemType="Section" sortIndex="300" />
<add text="Edit" menuPath="/global/my/edit"
url="/my/edit.aspx" sortIndex="100" />
<add text="Admin" menuPath="/global/my/admin"
url="/my/admin.aspx" sortIndex="200" />
</navigation>
</episerver.shell>
Last updated: Sep 11, 2019