diff --git a/src/Orchard.Web/Core/Navigation/Services/MainMenu.cs b/src/Orchard.Web/Core/Navigation/Services/MainMenu.cs index 24db9baa5..bddb22b6f 100644 --- a/src/Orchard.Web/Core/Navigation/Services/MainMenu.cs +++ b/src/Orchard.Web/Core/Navigation/Services/MainMenu.cs @@ -3,6 +3,7 @@ using Orchard.ContentManagement; using Orchard.Core.Navigation.Models; using Orchard.Core.Navigation.Records; using Orchard.UI.Navigation; +using MenuItem=Orchard.Core.Navigation.Models.MenuItem; namespace Orchard.Core.Navigation.Services { public class MainMenu : INavigationProvider { @@ -15,13 +16,25 @@ namespace Orchard.Core.Navigation.Services { public string MenuName { get { return "mainmenu"; } } public void GetNavigation(NavigationBuilder builder) { - IEnumerable menuParts = _contentManager.Query().Where(x => x.AddToMainMenu).List(); + IEnumerable menuParts = _contentManager.Query().Where(x => x.OnMainMenu).List(); foreach (var menuPart in menuParts) { if (menuPart != null ) { MenuPart part = menuPart; - // Add item url. - builder.Add(menu => menu - .Add(part.MenuText, part.MenuPosition)); + + if (part.Is()) + builder.Add(menu => menu.Add(part.MenuText, part.MenuPosition, part.As().Url)); + else + builder.Add( + menu => + menu.Add(part.MenuText, part.MenuPosition, + nib => + nib.Action( + part.ContentItem.ContentManager.GetItemMetadata(part.ContentItem). + DisplayRouteValues["action"] as string, + part.ContentItem.ContentManager.GetItemMetadata(part.ContentItem). + DisplayRouteValues["controller"] as string, + part.ContentItem.ContentManager.GetItemMetadata(part.ContentItem). + DisplayRouteValues))); } } } diff --git a/src/Orchard/UI/Navigation/MenuItem.cs b/src/Orchard/UI/Navigation/MenuItem.cs index bcee289e1..d5a8f64b9 100644 --- a/src/Orchard/UI/Navigation/MenuItem.cs +++ b/src/Orchard/UI/Navigation/MenuItem.cs @@ -11,6 +11,7 @@ namespace Orchard.UI.Navigation { } public string Text { get; set; } + public string Url { get; set; } public string Position { get; set; } public RouteValueDictionary RouteValues { get; set; } public IEnumerable Items { get; set; } diff --git a/src/Orchard/UI/Navigation/NavigationBuilder.cs b/src/Orchard/UI/Navigation/NavigationBuilder.cs index 25050dc0c..bdda97c55 100644 --- a/src/Orchard/UI/Navigation/NavigationBuilder.cs +++ b/src/Orchard/UI/Navigation/NavigationBuilder.cs @@ -8,7 +8,7 @@ namespace Orchard.UI.Navigation { public class NavigationBuilder { IEnumerable Contained { get; set; } - public NavigationBuilder Add(string caption, string position, Action itemBuilder) { + public NavigationBuilder Add(string caption, string position, string url, Action itemBuilder) { var childBuilder = new NavigationItemBuilder(); if (!string.IsNullOrEmpty(caption)) @@ -17,22 +17,31 @@ namespace Orchard.UI.Navigation { if (!string.IsNullOrEmpty(position)) childBuilder.Position(position); + if (!string.IsNullOrEmpty(url)) + childBuilder.Url(url); + itemBuilder(childBuilder); Contained = (Contained ?? Enumerable.Empty()).Concat(childBuilder.Build()); return this; } + public NavigationBuilder Add(string caption, string position, Action itemBuilder) { + return Add(caption, position, null, itemBuilder); + } public NavigationBuilder Add(string caption, Action itemBuilder) { - return Add(caption, null, itemBuilder); + return Add(caption, null, null, itemBuilder); } public NavigationBuilder Add(Action itemBuilder) { - return Add(null, null, itemBuilder); + return Add(null, null, null, itemBuilder); + } + public NavigationBuilder Add(string caption, string position, string url) { + return Add(caption, position, url, x=> { }); } public NavigationBuilder Add(string caption, string position) { - return Add(caption, position, x=> { }); + return Add(caption, position, null, x=> { }); } public NavigationBuilder Add(string caption) { - return Add(caption, null, x => { }); + return Add(caption, null, null, x => { }); } public IEnumerable Build() { @@ -57,6 +66,11 @@ namespace Orchard.UI.Navigation { return this; } + public NavigationItemBuilder Url(string url) { + _item.Url = url; + return this; + } + public NavigationItemBuilder Permission(Permission permission) { _item.Permissions = _item.Permissions.Concat(new[]{permission}); return this; diff --git a/src/Orchard/UI/Navigation/NavigationManager.cs b/src/Orchard/UI/Navigation/NavigationManager.cs index e6fa418dc..e1f8f7c14 100644 --- a/src/Orchard/UI/Navigation/NavigationManager.cs +++ b/src/Orchard/UI/Navigation/NavigationManager.cs @@ -45,6 +45,7 @@ namespace Orchard.UI.Navigation { Position = item.Position, RouteValues = item.RouteValues, Text = item.Text, + Url = item.Url }; } } @@ -75,6 +76,7 @@ namespace Orchard.UI.Navigation { var joined = new MenuItem { Text = items.First().Text, + Url = items.First().Url, RouteValues = items.First().RouteValues, Items = Merge(items.Select(x => x.Items)).ToArray(), Position = SelectBestPositionValue(items.Select(x => x.Position)),