diff --git a/src/Orchard.Web/Core/Navigation/Models/MenuPart.cs b/src/Orchard.Web/Core/Navigation/Models/MenuPart.cs index b042a92ee..509599149 100644 --- a/src/Orchard.Web/Core/Navigation/Models/MenuPart.cs +++ b/src/Orchard.Web/Core/Navigation/Models/MenuPart.cs @@ -7,6 +7,11 @@ namespace Orchard.Core.Navigation.Models { [HiddenInput(DisplayValue = false)] public int Id { get { return ContentItem.Id; } } + public bool AddToMainMenu { + get { return Record.AddToMainMenu; } + set { Record.AddToMainMenu = value; } + } + public string MenuText { get { return Record.MenuText; } set { Record.MenuText = value; } diff --git a/src/Orchard.Web/Core/Navigation/Models/MenuPartDriver.cs b/src/Orchard.Web/Core/Navigation/Models/MenuPartDriver.cs new file mode 100644 index 000000000..fba6edd17 --- /dev/null +++ b/src/Orchard.Web/Core/Navigation/Models/MenuPartDriver.cs @@ -0,0 +1,17 @@ +using JetBrains.Annotations; +using Orchard.ContentManagement; +using Orchard.ContentManagement.Drivers; + +namespace Orchard.Core.Navigation.Models { + [UsedImplicitly] + public class MenuPartDriver : ContentPartDriver { + protected override DriverResult Editor(MenuPart part) { + return ContentPartTemplate(part, "Parts/Navigation.EditMenuPart").Location("primary", "9"); + } + + protected override DriverResult Editor(MenuPart part, IUpdateModel updater) { + updater.TryUpdateModel(part, Prefix, null, null); + return ContentPartTemplate(part, "Parts/Navigation.EditMenuPart").Location("primary", "9"); + } + } +} diff --git a/src/Orchard.Web/Core/Navigation/Models/MenuPartHandler.cs b/src/Orchard.Web/Core/Navigation/Models/MenuPartHandler.cs new file mode 100644 index 000000000..314ed15ca --- /dev/null +++ b/src/Orchard.Web/Core/Navigation/Models/MenuPartHandler.cs @@ -0,0 +1,21 @@ +using System; +using JetBrains.Annotations; +using Orchard.ContentManagement.Handlers; +using Orchard.Core.Navigation.Records; +using Orchard.Data; + +namespace Orchard.Core.Navigation.Models { + [UsedImplicitly] + public class MenuPartHandler : ContentHandler { + public MenuPartHandler(IRepository menuPartRepository) { + Filters.Add(new ActivatingFilter("blogpost")); + Filters.Add(new ActivatingFilter("page")); + Filters.Add(StorageFilter.For(menuPartRepository)); + + OnActivated((ctx, x) => { + x.AddToMainMenu = false; + x.MenuText = String.Empty; + }); + } + } +} diff --git a/src/Orchard.Web/Core/Navigation/Records/MenuPartRecord.cs b/src/Orchard.Web/Core/Navigation/Records/MenuPartRecord.cs index 3536dbcb8..56fe1dd45 100644 --- a/src/Orchard.Web/Core/Navigation/Records/MenuPartRecord.cs +++ b/src/Orchard.Web/Core/Navigation/Records/MenuPartRecord.cs @@ -4,5 +4,6 @@ namespace Orchard.Core.Navigation.Records { public class MenuPartRecord : ContentPartRecord { public virtual string MenuText { get; set; } public virtual string MenuPosition { get; set; } + public virtual bool AddToMainMenu { get; set; } } } \ No newline at end of file diff --git a/src/Orchard.Web/Core/Navigation/Services/MainMenu.cs b/src/Orchard.Web/Core/Navigation/Services/MainMenu.cs index 379778f7d..86c6c0151 100644 --- a/src/Orchard.Web/Core/Navigation/Services/MainMenu.cs +++ b/src/Orchard.Web/Core/Navigation/Services/MainMenu.cs @@ -1,12 +1,29 @@ -using System; +using System.Collections.Generic; +using Orchard.ContentManagement; +using Orchard.Core.Navigation.Models; +using Orchard.Core.Navigation.Records; using Orchard.UI.Navigation; namespace Orchard.Core.Navigation.Services { public class MainMenu : INavigationProvider { - public string MenuName { get { return "MainMenu"; } } + private readonly IContentManager _contentManager; + + public MainMenu(IContentManager contentManager) { + _contentManager = contentManager; + } + + public string MenuName { get { return "mainmenu"; } } public void GetNavigation(NavigationBuilder builder) { - throw new NotImplementedException(); + IEnumerable menuParts = _contentManager.Query().Where(x => x.AddToMainMenu).List(); + foreach (var menuPart in menuParts) { + if (menuPart != null ) { + MenuPart part = menuPart; + builder.Add("main menu", "1", + menu => menu + .Add(part.MenuText, part.MenuPosition)); + } + } } } } diff --git a/src/Orchard.Web/Core/Navigation/Services/MainMenuFilter.cs b/src/Orchard.Web/Core/Navigation/Services/MainMenuFilter.cs new file mode 100644 index 000000000..0db8155fb --- /dev/null +++ b/src/Orchard.Web/Core/Navigation/Services/MainMenuFilter.cs @@ -0,0 +1,30 @@ +using System.Web.Mvc; +using Orchard.Mvc.Filters; +using Orchard.Mvc.ViewModels; +using Orchard.UI.Navigation; + +namespace Orchard.Core.Navigation.Services { + public class MainMenuFilter : FilterProvider, IResultFilter { + private readonly INavigationManager _navigationManager; + + public MainMenuFilter(INavigationManager navigationManager) { + _navigationManager = navigationManager; + } + + public void OnResultExecuting(ResultExecutingContext filterContext) { + var viewResult = filterContext.Result as ViewResult; + if (viewResult == null) + return; + + var baseViewModel = viewResult.ViewData.Model as BaseViewModel; + if (baseViewModel == null) + return; + + baseViewModel.Menu = _navigationManager.BuildMenu("mainmenu"); + } + + public void OnResultExecuted(ResultExecutedContext filterContext) { + + } + } +} diff --git a/src/Orchard.Web/Core/Navigation/Views/EditorTemplates/Parts/Navigation.EditMenuPart.ascx b/src/Orchard.Web/Core/Navigation/Views/EditorTemplates/Parts/Navigation.EditMenuPart.ascx new file mode 100644 index 000000000..b11a17e01 --- /dev/null +++ b/src/Orchard.Web/Core/Navigation/Views/EditorTemplates/Parts/Navigation.EditMenuPart.ascx @@ -0,0 +1,9 @@ +<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> +<%@ Import Namespace="Orchard.Core.Navigation.Models"%> +<%@ Import Namespace="Orchard.Core.Navigation.ViewModels"%> +
+ <%=Html.LabelFor(m => m.AddToMainMenu) %> + <%=Html.EditorFor(m => m.AddToMainMenu) %> + <%=Html.LabelFor(m => m.MenuText) %> + <%=Html.TextBoxFor(m => m.MenuText, new { @class = "large text" })%> +
\ No newline at end of file diff --git a/src/Orchard.Web/Core/Orchard.Core.csproj b/src/Orchard.Web/Core/Orchard.Core.csproj index 43879c789..b080a311d 100644 --- a/src/Orchard.Web/Core/Orchard.Core.csproj +++ b/src/Orchard.Web/Core/Orchard.Core.csproj @@ -105,9 +105,12 @@ + + + @@ -210,6 +213,7 @@ + diff --git a/src/Orchard/Mvc/ViewModels/BaseViewModel.cs b/src/Orchard/Mvc/ViewModels/BaseViewModel.cs index ce089ec4f..3c44843a4 100644 --- a/src/Orchard/Mvc/ViewModels/BaseViewModel.cs +++ b/src/Orchard/Mvc/ViewModels/BaseViewModel.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using Orchard.Security; +using Orchard.UI.Navigation; using Orchard.UI.Notify; using Orchard.UI.Zones; @@ -13,5 +14,7 @@ namespace Orchard.Mvc.ViewModels { public IList Messages { get; set; } public IUser CurrentUser { get; set; } public ZoneCollection Zones { get; set; } + + public IEnumerable Menu { get; set; } } }