mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-09-23 04:43:35 +08:00
Adding Url to the Navigation MenuItem and making use of it in the MainMenu
- giving it a Url property - adding/changing NavigationBuilder Add methods to account for also being able to set the url - updating the MainMenu to be able to add menu items w/ or w/out a Url (based on Is<MenuItem>) --HG-- branch : dev
This commit is contained in:
@@ -3,6 +3,7 @@ using Orchard.ContentManagement;
|
|||||||
using Orchard.Core.Navigation.Models;
|
using Orchard.Core.Navigation.Models;
|
||||||
using Orchard.Core.Navigation.Records;
|
using Orchard.Core.Navigation.Records;
|
||||||
using Orchard.UI.Navigation;
|
using Orchard.UI.Navigation;
|
||||||
|
using MenuItem=Orchard.Core.Navigation.Models.MenuItem;
|
||||||
|
|
||||||
namespace Orchard.Core.Navigation.Services {
|
namespace Orchard.Core.Navigation.Services {
|
||||||
public class MainMenu : INavigationProvider {
|
public class MainMenu : INavigationProvider {
|
||||||
@@ -15,13 +16,25 @@ namespace Orchard.Core.Navigation.Services {
|
|||||||
public string MenuName { get { return "mainmenu"; } }
|
public string MenuName { get { return "mainmenu"; } }
|
||||||
|
|
||||||
public void GetNavigation(NavigationBuilder builder) {
|
public void GetNavigation(NavigationBuilder builder) {
|
||||||
IEnumerable<MenuPart> menuParts = _contentManager.Query<MenuPart, MenuPartRecord>().Where(x => x.AddToMainMenu).List();
|
IEnumerable<MenuPart> menuParts = _contentManager.Query<MenuPart, MenuPartRecord>().Where(x => x.OnMainMenu).List();
|
||||||
foreach (var menuPart in menuParts) {
|
foreach (var menuPart in menuParts) {
|
||||||
if (menuPart != null ) {
|
if (menuPart != null ) {
|
||||||
MenuPart part = menuPart;
|
MenuPart part = menuPart;
|
||||||
// Add item url.
|
|
||||||
builder.Add(menu => menu
|
if (part.Is<MenuItem>())
|
||||||
.Add(part.MenuText, part.MenuPosition));
|
builder.Add(menu => menu.Add(part.MenuText, part.MenuPosition, part.As<MenuItem>().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)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -11,6 +11,7 @@ namespace Orchard.UI.Navigation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public string Text { get; set; }
|
public string Text { get; set; }
|
||||||
|
public string Url { get; set; }
|
||||||
public string Position { get; set; }
|
public string Position { get; set; }
|
||||||
public RouteValueDictionary RouteValues { get; set; }
|
public RouteValueDictionary RouteValues { get; set; }
|
||||||
public IEnumerable<MenuItem> Items { get; set; }
|
public IEnumerable<MenuItem> Items { get; set; }
|
||||||
|
@@ -8,7 +8,7 @@ namespace Orchard.UI.Navigation {
|
|||||||
public class NavigationBuilder {
|
public class NavigationBuilder {
|
||||||
IEnumerable<MenuItem> Contained { get; set; }
|
IEnumerable<MenuItem> Contained { get; set; }
|
||||||
|
|
||||||
public NavigationBuilder Add(string caption, string position, Action<NavigationItemBuilder> itemBuilder) {
|
public NavigationBuilder Add(string caption, string position, string url, Action<NavigationItemBuilder> itemBuilder) {
|
||||||
var childBuilder = new NavigationItemBuilder();
|
var childBuilder = new NavigationItemBuilder();
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(caption))
|
if (!string.IsNullOrEmpty(caption))
|
||||||
@@ -17,22 +17,31 @@ namespace Orchard.UI.Navigation {
|
|||||||
if (!string.IsNullOrEmpty(position))
|
if (!string.IsNullOrEmpty(position))
|
||||||
childBuilder.Position(position);
|
childBuilder.Position(position);
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(url))
|
||||||
|
childBuilder.Url(url);
|
||||||
|
|
||||||
itemBuilder(childBuilder);
|
itemBuilder(childBuilder);
|
||||||
Contained = (Contained ?? Enumerable.Empty<MenuItem>()).Concat(childBuilder.Build());
|
Contained = (Contained ?? Enumerable.Empty<MenuItem>()).Concat(childBuilder.Build());
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public NavigationBuilder Add(string caption, string position, Action<NavigationItemBuilder> itemBuilder) {
|
||||||
|
return Add(caption, position, null, itemBuilder);
|
||||||
|
}
|
||||||
public NavigationBuilder Add(string caption, Action<NavigationItemBuilder> itemBuilder) {
|
public NavigationBuilder Add(string caption, Action<NavigationItemBuilder> itemBuilder) {
|
||||||
return Add(caption, null, itemBuilder);
|
return Add(caption, null, null, itemBuilder);
|
||||||
}
|
}
|
||||||
public NavigationBuilder Add(Action<NavigationItemBuilder> itemBuilder) {
|
public NavigationBuilder Add(Action<NavigationItemBuilder> 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) {
|
public NavigationBuilder Add(string caption, string position) {
|
||||||
return Add(caption, position, x=> { });
|
return Add(caption, position, null, x=> { });
|
||||||
}
|
}
|
||||||
public NavigationBuilder Add(string caption) {
|
public NavigationBuilder Add(string caption) {
|
||||||
return Add(caption, null, x => { });
|
return Add(caption, null, null, x => { });
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<MenuItem> Build() {
|
public IEnumerable<MenuItem> Build() {
|
||||||
@@ -57,6 +66,11 @@ namespace Orchard.UI.Navigation {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public NavigationItemBuilder Url(string url) {
|
||||||
|
_item.Url = url;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public NavigationItemBuilder Permission(Permission permission) {
|
public NavigationItemBuilder Permission(Permission permission) {
|
||||||
_item.Permissions = _item.Permissions.Concat(new[]{permission});
|
_item.Permissions = _item.Permissions.Concat(new[]{permission});
|
||||||
return this;
|
return this;
|
||||||
|
@@ -45,6 +45,7 @@ namespace Orchard.UI.Navigation {
|
|||||||
Position = item.Position,
|
Position = item.Position,
|
||||||
RouteValues = item.RouteValues,
|
RouteValues = item.RouteValues,
|
||||||
Text = item.Text,
|
Text = item.Text,
|
||||||
|
Url = item.Url
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -75,6 +76,7 @@ namespace Orchard.UI.Navigation {
|
|||||||
|
|
||||||
var joined = new MenuItem {
|
var joined = new MenuItem {
|
||||||
Text = items.First().Text,
|
Text = items.First().Text,
|
||||||
|
Url = items.First().Url,
|
||||||
RouteValues = items.First().RouteValues,
|
RouteValues = items.First().RouteValues,
|
||||||
Items = Merge(items.Select(x => x.Items)).ToArray(),
|
Items = Merge(items.Select(x => x.Items)).ToArray(),
|
||||||
Position = SelectBestPositionValue(items.Select(x => x.Position)),
|
Position = SelectBestPositionValue(items.Select(x => x.Position)),
|
||||||
|
Reference in New Issue
Block a user