mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Adding NavigationPart to display the menus a content item is on
--HG-- branch : 1.x
This commit is contained in:
@@ -9,4 +9,4 @@ cfc264d41c1d299c104d76c5032d8ffee3047dcd src/Orchard.Web/Modules/Orchard.Rules
|
||||
f6fecd1702066225a84a482ac029e3e6daff38f3 src/Orchard.Web/Modules/Orchard.ViewPermissions
|
||||
4ed51e0e76c2aacc2de90ce9984fd00cfdfae2ce src/orchard.web/Modules/Orchard.Alias
|
||||
29857523c5275b8566ee3a6f4ba2a3d641e7fa0c src/orchard.web/Modules/Orchard.Projections
|
||||
e8d6ad7df228083093e57d5b5d489a949bd68cfb src/orchard.web/modules/Orchard.Fields
|
||||
279e1454557e7c36b3c0d87d6dc9b3b553511dd7 src/orchard.web/modules/Orchard.Fields
|
||||
|
@@ -16,6 +16,10 @@ namespace Orchard.Core.Navigation.Drivers {
|
||||
}
|
||||
|
||||
protected override DriverResult Editor(MenuItemPart part, dynamic shapeHelper) {
|
||||
var currentUser = _workContextAccessor.GetContext().CurrentUser;
|
||||
if (!_authorizationService.TryCheckAccess(Permissions.ManageMainMenu, currentUser, part))
|
||||
return null;
|
||||
|
||||
return ContentShape("Parts_MenuItem_Edit",
|
||||
() => shapeHelper.EditorTemplate(TemplateName: "Parts.MenuItem.Edit", Model: part, Prefix: Prefix));
|
||||
}
|
||||
|
@@ -0,0 +1,41 @@
|
||||
using Orchard.ContentManagement;
|
||||
using Orchard.ContentManagement.Drivers;
|
||||
using Orchard.Core.Navigation.Models;
|
||||
using Orchard.Core.Navigation.ViewModels;
|
||||
using Orchard.Security;
|
||||
|
||||
namespace Orchard.Core.Navigation.Drivers {
|
||||
|
||||
public class NavigationPartDriver : ContentPartDriver<NavigationPart> {
|
||||
private readonly IAuthorizationService _authorizationService;
|
||||
private readonly IWorkContextAccessor _workContextAccessor;
|
||||
private readonly IContentManager _contentManager;
|
||||
|
||||
public NavigationPartDriver(
|
||||
IAuthorizationService authorizationService,
|
||||
IWorkContextAccessor workContextAccessor,
|
||||
IContentManager contentManager) {
|
||||
_authorizationService = authorizationService;
|
||||
_workContextAccessor = workContextAccessor;
|
||||
_contentManager = contentManager;
|
||||
}
|
||||
|
||||
protected override DriverResult Editor(NavigationPart part, dynamic shapeHelper) {
|
||||
var currentUser = _workContextAccessor.GetContext().CurrentUser;
|
||||
if (!_authorizationService.TryCheckAccess(Permissions.ManageMainMenu, currentUser, part))
|
||||
return null;
|
||||
|
||||
return ContentShape("Parts_Navigation_Edit",
|
||||
() => {
|
||||
// loads all menu part of type ContentMenuItem linking to the current content item
|
||||
var model = new NavigationPartViewModel() {
|
||||
Part = part,
|
||||
ContentMenuItems = _contentManager.Query<MenuPart>()
|
||||
.Join<ContentMenuItemPartRecord>().Where(x => x.ContentMenuItemRecord == part.ContentItem.Record).List()
|
||||
};
|
||||
|
||||
return shapeHelper.EditorTemplate(TemplateName: "Parts.Navigation.Edit", Model: model, Prefix: Prefix);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
@@ -7,6 +7,7 @@ namespace Orchard.Core.Navigation {
|
||||
|
||||
public int Create() {
|
||||
ContentDefinitionManager.AlterPartDefinition("MenuPart", builder => builder.Attachable());
|
||||
ContentDefinitionManager.AlterPartDefinition("NavigationPart", builder => builder.Attachable());
|
||||
ContentDefinitionManager.AlterTypeDefinition("Page", cfg => cfg.WithPart("MenuPart"));
|
||||
|
||||
SchemaBuilder.CreateTable("MenuItemPartRecord",
|
||||
@@ -138,7 +139,7 @@ namespace Orchard.Core.Navigation {
|
||||
;
|
||||
|
||||
ContentDefinitionManager.AlterTypeDefinition("HtmlMenuItem", cfg => cfg
|
||||
.WithPart("MenuPart")
|
||||
.WithPart("MenuPart")
|
||||
.WithPart("BodyPart")
|
||||
.WithPart("CommonPart")
|
||||
.DisplayedAs("Html Menu Item")
|
||||
@@ -147,6 +148,8 @@ namespace Orchard.Core.Navigation {
|
||||
.WithSetting("Stereotype", "MenuItem")
|
||||
);
|
||||
|
||||
ContentDefinitionManager.AlterPartDefinition("NavigationPart", builder => builder.Attachable());
|
||||
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
|
9
src/Orchard.Web/Core/Navigation/Models/NavigationPart.cs
Normal file
9
src/Orchard.Web/Core/Navigation/Models/NavigationPart.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
using Orchard.ContentManagement;
|
||||
|
||||
namespace Orchard.Core.Navigation.Models {
|
||||
/// <summary>
|
||||
/// Allows the management of Content Menu Items associated with a Content Item
|
||||
/// </summary>
|
||||
public class NavigationPart : ContentPart {
|
||||
}
|
||||
}
|
@@ -1,6 +1,7 @@
|
||||
<Placement>
|
||||
<Place Parts_Navigation_Menu_Edit="Content:9"/>
|
||||
<Place Parts_Navigation_AdminMenu_Edit="Content:9.1"/>
|
||||
<Place Parts_Navigation_Edit="Content:10"/>
|
||||
<Place Parts_MenuItem_Edit="Content:10"/>
|
||||
<Place Parts_ContentMenuItem_Edit="Content:10"/>
|
||||
<Place Parts_MenuWidget_Edit="Content:10"/>
|
||||
|
@@ -0,0 +1,9 @@
|
||||
using System.Collections.Generic;
|
||||
using Orchard.Core.Navigation.Models;
|
||||
|
||||
namespace Orchard.Core.Navigation.ViewModels {
|
||||
public class NavigationPartViewModel {
|
||||
public IEnumerable<MenuPart> ContentMenuItems { get; set; }
|
||||
public NavigationPart Part { get; set; }
|
||||
}
|
||||
}
|
@@ -0,0 +1,26 @@
|
||||
@model Orchard.Core.Navigation.ViewModels.NavigationPartViewModel
|
||||
@using Orchard.ContentManagement
|
||||
|
||||
@{
|
||||
var contentManager = WorkContext.Resolve<IContentManager>();
|
||||
}
|
||||
<fieldset>
|
||||
<label>@T("Menu Items")</label>
|
||||
<span class="hint">@T("The menu items linking to this content item.")</span>
|
||||
@if(Model.ContentMenuItems.Any()) {
|
||||
<ul>
|
||||
@foreach(var menuPart in Model.ContentMenuItems) {
|
||||
var menuContentItem = contentManager.Get(menuPart.Menu.Id);
|
||||
var menuName = Html.ItemDisplayText(menuContentItem).ToString();
|
||||
<li>
|
||||
<div><span>@menuPart.MenuText</span> @T("on") <span>@Html.ActionLink(menuName, "Index", "Admin", new { area = "Navigation", menuId = menuContentItem.Id }, new {}) </span></div>
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
else {
|
||||
@T("Not displayed in any menu.")
|
||||
}
|
||||
|
||||
|
||||
</fieldset>
|
@@ -131,6 +131,7 @@
|
||||
<Compile Include="Dashboard\Services\CompilationErrorBanner.cs" />
|
||||
<Compile Include="Navigation\Commands\MenuCommands.cs" />
|
||||
<Compile Include="Navigation\Drivers\AdminMenuPartDriver.cs" />
|
||||
<Compile Include="Navigation\Drivers\NavigationPartDriver.cs" />
|
||||
<Compile Include="Navigation\Drivers\MenuItemPartDriver.cs" />
|
||||
<Compile Include="Navigation\Drivers\MenuWidgetPartDriver.cs" />
|
||||
<Compile Include="Navigation\Handlers\AdminMenuPartHandler.cs" />
|
||||
@@ -140,6 +141,7 @@
|
||||
<Compile Include="Navigation\Models\AdminMenuPartRecord.cs" />
|
||||
<Compile Include="Navigation\Models\ContentMenuItemPartRecord.cs" />
|
||||
<Compile Include="Navigation\Models\ContentMenuItemPart.cs" />
|
||||
<Compile Include="Navigation\Models\NavigationPart.cs" />
|
||||
<Compile Include="Navigation\Models\MenuWidgetPartRecord.cs" />
|
||||
<Compile Include="Navigation\Models\MenuWidgetPart.cs" />
|
||||
<Compile Include="Navigation\Services\AdminMenuNavigationProvider.cs" />
|
||||
@@ -150,6 +152,7 @@
|
||||
<Compile Include="Contents\ViewModels\ListContentsViewModel.cs" />
|
||||
<Compile Include="Contents\ViewModels\ListContentTypesViewModel.cs" />
|
||||
<Compile Include="Navigation\ViewModels\ContentMenuItemEditViewModel.cs" />
|
||||
<Compile Include="Navigation\ViewModels\NavigationPartViewModel.cs" />
|
||||
<Compile Include="Navigation\ViewModels\MenuPartViewModel.cs" />
|
||||
<Compile Include="Navigation\ViewModels\MenuWidgetViewModel.cs" />
|
||||
<Compile Include="Reports\AdminMenu.cs" />
|
||||
@@ -538,6 +541,9 @@
|
||||
<ItemGroup>
|
||||
<Content Include="Navigation\Views\MenuItemLink-ContentMenuItem.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Navigation\Views\EditorTemplates\Parts.Navigation.Edit.cshtml" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
|
Reference in New Issue
Block a user