Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
OnlineCenter is equipped with extendable navigation that lets editor access Episerver CMS and other products from the top menu.
Attributes and menu providers must reside in an assembly configured as a shell module.
Use MenuItem on ASP.NET MVC controllers and WebForm pages. MenuItem adds links to the top menu (and requires the module to be registered; see Shell Modules). The required menuPath parameter is a logical path of the menu element in the menu. Use the Url parameter to add a linked URL to the interface.
The following example adds a menu item to the CMS menu section with the text Edit and the URL /[PublicOrProtected]/[ModuleName]/Path/To/Default.aspx. For example (WebForm page):
C#
[MenuItem("/global/cms/edit", Text = "Edit", Url = "Path/To/Default.aspx")] public partial class DefaultPage : SystemPageBase { }
The following example adds a menu item to the top menu bar with the text Start and the URL is inferred from the ASP.NET MVC route table. For example (MVC action):
C#
public class DashboardController : Controller { [MenuItem("/global/dashboard", Text = "Start")] public ActionResult Index() { } }
You can localize menu items defined with attributes with a static property of a resource class. ResourceType references a class with a static property. TextResourceKey is the name of the static property that returns the localized text.
Example:
[MenuItem("/global/dashboard", TextResourceKey = "Start", ResourceType = typeof(MenuResources))]
To organize menu items in a tree structure the menu path is used. All menu items in the top menu are in the /global bucket. The next segment is the name of menu section, for example, /global/cms. The last segment represents the actual user interface, for example, /global/cms/edit.
Some menu items have an URL. This creates a link in the menu. The page at the end of this URL should render a menu where the corresponding menu path is selected.
You can restrict who sees a certain menu item by using the [Authorize] attribute. For example:
C#
public class DashboardController : Controller { [MenuItem("/global/dashboard")] [Authorize(Roles = "NoOne")] public ActionResult Index() { } }
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.
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.
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:
Example:
C#
/// <summary>
/// Provides menu items for the CMS product.
/// </summary>
[MenuProvider]
public class CmsMenuProvider : IMenuProvider
{
/// <summary>
/// Provides the CMS menu section and the CMS settings section.
/// </summary>
/// <returns>
/// A list of <see cref="MenuItem"/>s that the provider exposes.
/// </returns>
public IEnumerable<MenuItem> GetMenuItems()
{
// Create the top menu section
var section = new SectionMenuItem("CMS", // Title
"/global/cms"); // Logical path
// Visible to CMS editors
section.IsAvailable = (request) =>
PrincipalInfo.HasEditAccess;
// Create the edit menu item below the top
section
var cmsEdit = new UrlMenuItem("Edit", // Title
"/global/cms/edit", // Logical path
"/path/to/edit/default.aspx"); // URL
// Visible to CMS editors
cmsEdit.IsAvailable = (request) =>
PrincipalInfo.HasEditAccess;
return new MenuItem[] { section, cmsEdit };
}
}
A menu provider returns localized menu items.
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.
Example:
var cmsEdit = new UrlMenuItem("Edit", "/global/cms/edit" "/path/to/edit/default.aspx"); // Make menu item visible to CMS editors cmsEdit.IsAvailable = (request) => PrincipalInfo.HasEditAccess;
Menu items flow from the providers to into a hierarchical model which is rendered into HTML.
To extend the menu you can, for example, configure web.config as follows:
XML
<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 21, 2015