Add a new menu item to the Admin Menu in Optimizely CMS
Create a new Controller called CustomMenuController and decorate with [Authorize(Roles ="CMSAdmins")] so that it will be accessed by admins only
namespace AdminMenu.Controllers
{
[Route("episerver/CustomMenu")]
[Authorize(Roles ="CMSAdmins")]
public class CustomMenuController : Controller
{
[HttpGet("")]
public IActionResult Index()
{
return View("~/Views/CustomMenu /Index.cshtml");
}
}
}
Create a view under Views/CustomMenu/Index.cshtml for the controller
@{
Layout = null;
}
<html lang="en">
<head>
<title>Custom Menu</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" href="/Util/images/favicon.ico" type="image/x-icon" />
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
@Html.AntiForgeryToken()
@Html.Raw(Html.CreatePlatformNavigationMenu())
<div class="margin-100">
<div class="container mt-5">
<h1>This is a custom menu example</h1>
<p>Custom menu implementation</p>
</div>
</div>
<required-client-resources area="Footer" />
</body>
</html>
Create a new class called MenuItem that inherits IMenuProvider
namespace FEO.CMS.Global.Business.MenuProviders
{
[MenuProvider]
public class CustomMenuProvider : IMenuProvider
{
public IEnumerable<MenuItem> GetMenuItems()
{
var menuItems = new List<MenuItem>();
menuItems.Add(new UrlMenuItem("Custom Admin Menu",
"/global/cms/CustomAdminMenu",
"/EPiServer/CustomMenu")
{
SortIndex = SortIndex.First + 25,
AuthorizationPolicy = CmsPolicyNames.CmsAdmin
});
return menuItems;
}
}
}
Thats all, run the application and you can find a new menu item under the admin menu
Good working example
Can you extend this example for any real world usecase like triggering sitemap generation or robots.txt implementation
Sure I will create a new article with real world implementation for robots.txt
There is a really good robots solution already out there called Stott Robots Handler. See: https://github.com/GeekInTheNorth/Stott.Optimizely.RobotsHandler
This features:
What's really good is that it's maintained by an Optimizely MVP.
FYI: I may be incredibly biased :)
Thanks Mark,
I really appreciate your effort in taking time and providing good articles.
Sunil