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:
Nathan Heskew
2010-02-12 02:01:50 -08:00
parent 04aa71bc18
commit f63f3ee501
4 changed files with 39 additions and 9 deletions

View File

@@ -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)));
} }
} }
} }

View File

@@ -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; }

View File

@@ -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;

View File

@@ -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)),