mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-13 18:34:51 +08:00
Instead of an isBreadcrumb parameter we now use BreadcrumbMenuItemPart to distinguish breadcrumb-only menu items
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using Orchard.ContentManagement.Drivers;
|
||||
using Orchard.Core.Navigation.Models;
|
||||
|
||||
namespace Orchard.Core.Navigation.Drivers {
|
||||
public class BreadcrumbMenuItemPartDriver : ContentPartDriver<BreadcrumbMenuItemPart> {
|
||||
}
|
||||
}
|
@@ -11,6 +11,7 @@ using Orchard.Core.Title.Models;
|
||||
using Orchard.Localization;
|
||||
using Orchard.UI.Navigation;
|
||||
using Orchard.Utility.Extensions;
|
||||
using Orchard.ContentManagement.Utilities;
|
||||
|
||||
namespace Orchard.Core.Navigation.Drivers {
|
||||
public class MenuWidgetPartDriver : ContentPartDriver<MenuWidgetPart> {
|
||||
@@ -49,7 +50,12 @@ namespace Orchard.Core.Navigation.Drivers {
|
||||
|
||||
var menuName = menu.As<TitlePart>().Title.HtmlClassify();
|
||||
var currentCulture = _workContextAccessor.GetContext().CurrentCulture;
|
||||
var menuItems = _navigationManager.BuildMenu(menu, part.Breadcrumb);
|
||||
var menuItems = _navigationManager.BuildMenu(menu);
|
||||
|
||||
if (!part.Breadcrumb) {
|
||||
menuItems = menuItems.Where(x => !x.Content.Has<BreadcrumbMenuItemPart>());
|
||||
}
|
||||
|
||||
var localized = new List<MenuItem>();
|
||||
foreach(var menuItem in menuItems) {
|
||||
// if there is no associated content, it as culture neutral
|
||||
|
@@ -0,0 +1,6 @@
|
||||
using Orchard.ContentManagement;
|
||||
|
||||
namespace Orchard.Core.Navigation.Models {
|
||||
public class BreadcrumbMenuItemPart : ContentPart {
|
||||
}
|
||||
}
|
@@ -44,29 +44,21 @@ namespace Orchard.Core.Navigation.Services {
|
||||
public ILogger Logger { get; set; }
|
||||
|
||||
public IEnumerable<MenuItem> BuildMenu(string menuName) {
|
||||
return BuildMenu(menuName, false);
|
||||
}
|
||||
|
||||
public IEnumerable<MenuItem> BuildMenu(string menuName, bool isBreadcrumb) {
|
||||
var sources = GetSources(menuName);
|
||||
var hasDebugShowAllMenuItems = _authorizationService.TryCheckAccess(Permission.Named("DebugShowAllMenuItems"), _orchardServices.WorkContext.CurrentUser, null);
|
||||
return FinishMenu(Reduce(Filter(Merge(sources), isBreadcrumb), menuName == "admin", hasDebugShowAllMenuItems).ToArray());
|
||||
return FinishMenu(Reduce(Filter(Merge(sources)), menuName == "admin", hasDebugShowAllMenuItems).ToArray());
|
||||
}
|
||||
|
||||
public IEnumerable<MenuItem> BuildMenu(IContent menu) {
|
||||
return BuildMenu(menu,false);
|
||||
}
|
||||
|
||||
public IEnumerable<MenuItem> BuildMenu(IContent menu, bool isBreadcrumb) {
|
||||
var sources = GetSources(menu);
|
||||
var hasDebugShowAllMenuItems = _authorizationService.TryCheckAccess(Permission.Named("DebugShowAllMenuItems"), _orchardServices.WorkContext.CurrentUser, null);
|
||||
return FinishMenu(Reduce(Arrange(Filter(Merge(sources), isBreadcrumb)), false, hasDebugShowAllMenuItems).ToArray());
|
||||
return FinishMenu(Reduce(Arrange(Filter(Merge(sources))), false, hasDebugShowAllMenuItems).ToArray());
|
||||
}
|
||||
|
||||
public string GetNextPosition(IContent menu) {
|
||||
var sources = GetSources(menu);
|
||||
var hasDebugShowAllMenuItems = _authorizationService.TryCheckAccess(Permission.Named("DebugShowAllMenuItems"), _orchardServices.WorkContext.CurrentUser, null);
|
||||
return Position.GetNext(Reduce(Arrange(Filter(Merge(sources), false)), false, hasDebugShowAllMenuItems).ToArray());
|
||||
return Position.GetNext(Reduce(Arrange(Filter(Merge(sources))), false, hasDebugShowAllMenuItems).ToArray());
|
||||
}
|
||||
|
||||
public IEnumerable<string> BuildImageSets(string menuName) {
|
||||
@@ -82,10 +74,10 @@ namespace Orchard.Core.Navigation.Services {
|
||||
return menuItems;
|
||||
}
|
||||
|
||||
private IEnumerable<MenuItem> Filter(IEnumerable<MenuItem> menuItems, bool isBreadcrumb) {
|
||||
private IEnumerable<MenuItem> Filter(IEnumerable<MenuItem> menuItems) {
|
||||
IEnumerable<MenuItem> result = menuItems;
|
||||
foreach (var filter in _navigationFilters) {
|
||||
result = filter.Filter(result, isBreadcrumb);
|
||||
result = filter.Filter(result);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@@ -172,6 +172,7 @@
|
||||
<Compile Include="Dashboard\Services\CompilationErrorBanner.cs" />
|
||||
<Compile Include="Navigation\Commands\MenuCommands.cs" />
|
||||
<Compile Include="Navigation\Drivers\AdminMenuPartDriver.cs" />
|
||||
<Compile Include="Navigation\Drivers\BreadcrumbMenuItemPartDriver.cs" />
|
||||
<Compile Include="Navigation\Drivers\MenuItemPartDriver.cs" />
|
||||
<Compile Include="Navigation\Drivers\MenuWidgetPartDriver.cs" />
|
||||
<Compile Include="Navigation\Drivers\ShapeMenuItemPartDriver.cs" />
|
||||
@@ -182,6 +183,7 @@
|
||||
<Compile Include="Navigation\Handlers\MenuWidgetPartHandler.cs" />
|
||||
<Compile Include="Navigation\Models\AdminMenuPart.cs" />
|
||||
<Compile Include="Navigation\Models\AdminMenuPartRecord.cs" />
|
||||
<Compile Include="Navigation\Models\BreadcrumbMenuItemPart.cs" />
|
||||
<Compile Include="Navigation\Models\MenuWidgetPart.cs" />
|
||||
<Compile Include="Navigation\Models\ShapeMenuItemPart.cs" />
|
||||
<Compile Include="Navigation\Security\AuthorizationEventHandler.cs" />
|
||||
|
@@ -1,6 +1,7 @@
|
||||
using Orchard.Data.Migration;
|
||||
using Orchard.ContentManagement.MetaData;
|
||||
using Orchard.Environment.Extensions;
|
||||
using Orchard.Core.Navigation.Models;
|
||||
|
||||
namespace Orchard.Alias {
|
||||
[OrchardFeature("Orchard.Alias.BreadcrumbLink")]
|
||||
@@ -8,6 +9,7 @@ namespace Orchard.Alias {
|
||||
public int Create() {
|
||||
ContentDefinitionManager.AlterTypeDefinition("AliasBreadcrumbMenuItem",
|
||||
cfg => cfg
|
||||
.WithPart("BreadcrumbMenuItemPart")
|
||||
.WithPart("MenuPart")
|
||||
.WithPart("CommonPart")
|
||||
.WithIdentity()
|
||||
|
@@ -27,10 +27,9 @@ namespace Orchard.Alias.Navigation {
|
||||
_hca = hca;
|
||||
}
|
||||
|
||||
public IEnumerable<MenuItem> Filter(IEnumerable<MenuItem> items, bool isBreadcrumb = false) {
|
||||
public IEnumerable<MenuItem> Filter(IEnumerable<MenuItem> items) {
|
||||
foreach (var item in items) {
|
||||
if (item.Content != null && item.Content.ContentItem.ContentType == "AliasBreadcrumbMenuItem") {
|
||||
if (isBreadcrumb) {
|
||||
var request = _hca.Current().Request;
|
||||
var path = request.Path;
|
||||
var appPath = request.ApplicationPath ?? "/";
|
||||
@@ -46,7 +45,7 @@ namespace Orchard.Alias.Navigation {
|
||||
// or it's an unneccessary element according to the url.
|
||||
RouteValueDictionary contentRoute;
|
||||
if (menuLevel == urlLevel) {
|
||||
contentRoute = _aliasService.Get(requestUrl);
|
||||
contentRoute = request.RequestContext.RouteData.Values;
|
||||
}
|
||||
else {
|
||||
// If menuLevel doesn't equal with urlLevel it can mean that this menu item is
|
||||
@@ -70,6 +69,9 @@ namespace Orchard.Alias.Navigation {
|
||||
// because we don't know if the alias was created with a slash at the end or not.
|
||||
contentRoute = _aliasService.Get(requestUrl.Insert(requestUrl.Length, "/"));
|
||||
path = path.Insert(path.Length, "/");
|
||||
if (contentRoute == null) {
|
||||
contentRoute = new RouteValueDictionary();
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -109,14 +111,13 @@ namespace Orchard.Alias.Navigation {
|
||||
Items = Enumerable.Empty<MenuItem>(),
|
||||
Position = menuPosition,
|
||||
Permissions = item.Permissions,
|
||||
Content = currentContentItem
|
||||
Content = item.Content
|
||||
};
|
||||
|
||||
yield return inserted;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
yield return item;
|
||||
}
|
||||
|
@@ -21,7 +21,7 @@ namespace Orchard.Projections.Navigation {
|
||||
_projectionManager = projectionManager;
|
||||
}
|
||||
|
||||
public IEnumerable<MenuItem> Filter(IEnumerable<MenuItem> items, bool isBreadcrumb) {
|
||||
public IEnumerable<MenuItem> Filter(IEnumerable<MenuItem> items) {
|
||||
|
||||
foreach (var item in items) {
|
||||
if (item.Content != null && item.Content.ContentItem.ContentType == "NavigationQueryMenuItem") {
|
||||
|
@@ -24,7 +24,7 @@ namespace Orchard.Taxonomies.Navigation {
|
||||
_taxonomyService = taxonomyService;
|
||||
}
|
||||
|
||||
public IEnumerable<MenuItem> Filter(IEnumerable<MenuItem> items, bool isBreadcrumb) {
|
||||
public IEnumerable<MenuItem> Filter(IEnumerable<MenuItem> items) {
|
||||
|
||||
foreach (var item in items) {
|
||||
if (item.Content != null && item.Content.ContentItem.ContentType == "TaxonomyNavigationMenuItem") {
|
||||
|
@@ -5,6 +5,6 @@ namespace Orchard.UI.Navigation {
|
||||
/// Provides a way to alter the main navigation, for instance by dynamically injecting new items
|
||||
/// </summary>
|
||||
public interface INavigationFilter : IDependency {
|
||||
IEnumerable<MenuItem> Filter(IEnumerable<MenuItem> menuItems, bool isBreadcrumb = false);
|
||||
IEnumerable<MenuItem> Filter(IEnumerable<MenuItem> menuItems);
|
||||
}
|
||||
}
|
||||
|
@@ -5,9 +5,7 @@ using Orchard.ContentManagement;
|
||||
namespace Orchard.UI.Navigation {
|
||||
public interface INavigationManager : IDependency {
|
||||
IEnumerable<MenuItem> BuildMenu(string menuName);
|
||||
IEnumerable<MenuItem> BuildMenu(string menuName, bool isBreadcrumbMenu);
|
||||
IEnumerable<MenuItem> BuildMenu(IContent menu);
|
||||
IEnumerable<MenuItem> BuildMenu(IContent menu, bool isBreadcrumbMenu);
|
||||
IEnumerable<string> BuildImageSets(string menuName);
|
||||
string GetUrl(string menuItemUrl, RouteValueDictionary routeValueDictionary);
|
||||
string GetNextPosition(IContent menu);
|
||||
|
Reference in New Issue
Block a user