diff --git a/src/Orchard.Web/Core/Navigation/Drivers/MenuWidgetPartDriver.cs b/src/Orchard.Web/Core/Navigation/Drivers/MenuWidgetPartDriver.cs index c5bd5e1c9..a845e9728 100644 --- a/src/Orchard.Web/Core/Navigation/Drivers/MenuWidgetPartDriver.cs +++ b/src/Orchard.Web/Core/Navigation/Drivers/MenuWidgetPartDriver.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; +using System.Web.Routing; using Orchard.ContentManagement; using Orchard.ContentManagement.Aspects; using Orchard.ContentManagement.Drivers; @@ -124,7 +125,29 @@ namespace Orchard.Core.Navigation.Drivers { menuItems = topLevelItems; } } - + + var result = new List(menuItems); + + // inject the home page + if(part.AddHomePage) { + result.Insert(0, new MenuItem { + Href = _navigationManager.GetUrl("~/", null), + Text = T("Home") + }); + } + + // inject the current page + if (!part.AddCurrentPage) { + result.RemoveAt(result.Count - 1); + } + + // prevent the home page to be added as the home page and the current page + if(result.Count == 2 && String.Equals(result[0].Href, result[1].Href, StringComparison.OrdinalIgnoreCase)) { + result.RemoveAt(1); + } + + menuItems = result; + menuShape.MenuName(menuName); NavigationHelper.PopulateMenu(shapeHelper, menuShape, menuShape, menuItems); @@ -139,6 +162,8 @@ namespace Orchard.Core.Navigation.Drivers { StartLevel = part.StartLevel, StopLevel = part.Levels, Breadcrumb = part.Breadcrumb, + AddCurrentPage = part.AddCurrentPage, + AddHomePage = part.AddHomePage, Menus = _menuService.GetMenus(), }; @@ -153,6 +178,8 @@ namespace Orchard.Core.Navigation.Drivers { part.StartLevel = model.StartLevel; part.Levels = model.StopLevel; part.Breadcrumb = model.Breadcrumb; + part.AddHomePage = model.AddHomePage; + part.AddCurrentPage = model.AddCurrentPage; part.Menu = _contentManager.Get(model.CurrentMenuId).Record; } diff --git a/src/Orchard.Web/Core/Navigation/Migrations.cs b/src/Orchard.Web/Core/Navigation/Migrations.cs index f4c360130..f0326f41b 100644 --- a/src/Orchard.Web/Core/Navigation/Migrations.cs +++ b/src/Orchard.Web/Core/Navigation/Migrations.cs @@ -43,6 +43,8 @@ namespace Orchard.Core.Navigation { .Column("StartLevel") .Column("Levels") .Column("Breadcrumb") + .Column("AddHomePage") + .Column("AddCurrentPage") .Column("Menu_id") ); @@ -123,6 +125,8 @@ namespace Orchard.Core.Navigation { .Column("StartLevel") .Column("Levels") .Column("Breadcrumb") + .Column("AddHomePage") + .Column("AddCurrentPage") .Column("Menu_id") ); diff --git a/src/Orchard.Web/Core/Navigation/Models/MenuWidgetPart.cs b/src/Orchard.Web/Core/Navigation/Models/MenuWidgetPart.cs index 91810e6dd..2f45579ec 100644 --- a/src/Orchard.Web/Core/Navigation/Models/MenuWidgetPart.cs +++ b/src/Orchard.Web/Core/Navigation/Models/MenuWidgetPart.cs @@ -18,6 +18,16 @@ namespace Orchard.Core.Navigation.Models { set { Record.Breadcrumb = value; } } + public bool AddHomePage { + get { return Record.AddHomePage; } + set { Record.AddHomePage = value; } + } + + public bool AddCurrentPage { + get { return Record.AddCurrentPage; } + set { Record.AddCurrentPage = value; } + } + public ContentItemRecord Menu { get { return Record.Menu; } set { Record.Menu = value; } diff --git a/src/Orchard.Web/Core/Navigation/Models/MenuWidgetPartRecord.cs b/src/Orchard.Web/Core/Navigation/Models/MenuWidgetPartRecord.cs index cfa7bb0a6..76c58a2f2 100644 --- a/src/Orchard.Web/Core/Navigation/Models/MenuWidgetPartRecord.cs +++ b/src/Orchard.Web/Core/Navigation/Models/MenuWidgetPartRecord.cs @@ -5,6 +5,8 @@ namespace Orchard.Core.Navigation.Models { public virtual int StartLevel { get; set; } public virtual int Levels { get; set; } public virtual bool Breadcrumb { get; set; } + public virtual bool AddHomePage { get; set; } + public virtual bool AddCurrentPage { get; set; } public virtual ContentItemRecord Menu { get; set; } } diff --git a/src/Orchard.Web/Core/Navigation/ViewModels/MenuWidgetViewModel.cs b/src/Orchard.Web/Core/Navigation/ViewModels/MenuWidgetViewModel.cs index 4049ad434..122c13fed 100644 --- a/src/Orchard.Web/Core/Navigation/ViewModels/MenuWidgetViewModel.cs +++ b/src/Orchard.Web/Core/Navigation/ViewModels/MenuWidgetViewModel.cs @@ -9,5 +9,7 @@ namespace Orchard.Core.Navigation.ViewModels { public int StartLevel { get; set; } public int StopLevel { get; set; } public bool Breadcrumb { get; set; } + public bool AddHomePage { get; set; } + public bool AddCurrentPage { get; set; } } } \ No newline at end of file diff --git a/src/Orchard.Web/Core/Navigation/Views/EditorTemplates/Parts.MenuWidget.Edit.cshtml b/src/Orchard.Web/Core/Navigation/Views/EditorTemplates/Parts.MenuWidget.Edit.cshtml index f4690665b..7fa5930b1 100644 --- a/src/Orchard.Web/Core/Navigation/Views/EditorTemplates/Parts.MenuWidget.Edit.cshtml +++ b/src/Orchard.Web/Core/Navigation/Views/EditorTemplates/Parts.MenuWidget.Edit.cshtml @@ -29,3 +29,17 @@ @T("Check to render the path to the current content item.") + +
+
+ @Html.EditorFor(m => m.AddHomePage) + + @T("Check to render the home page as the first element of the breadcrumb.") +
+ +
+ @Html.EditorFor(m => m.AddCurrentPage) + + @T("Check to render the current content item as the last element.") +
+
\ No newline at end of file