mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-07-31 20:18:40 +08:00
parent
64eebe9ef9
commit
f659406712
@ -44,7 +44,7 @@ namespace Orchard.Core.Navigation.Commands {
|
||||
var menuItem = _contentManager.Create("MenuItem");
|
||||
menuItem.As<MenuPart>().MenuPosition = MenuPosition;
|
||||
menuItem.As<MenuPart>().MenuText = T(MenuText).ToString();
|
||||
menuItem.As<MenuPart>().Menu = menu.ContentItem.Record;
|
||||
menuItem.As<MenuPart>().Menu = menu.ContentItem;
|
||||
menuItem.As<MenuItemPart>().Url = Url;
|
||||
|
||||
Context.Output.WriteLine(T("Menu item created successfully.").Text);
|
||||
|
@ -185,7 +185,7 @@ namespace Orchard.Core.Navigation.Controllers {
|
||||
var model = Services.ContentManager.UpdateEditor(menuPart, this);
|
||||
|
||||
menuPart.MenuPosition = Position.GetNext(_navigationManager.BuildMenu(menu));
|
||||
menuPart.Menu = menu.Record;
|
||||
menuPart.Menu = menu;
|
||||
|
||||
Services.ContentManager.Create(menuPart);
|
||||
|
||||
|
@ -59,7 +59,7 @@ namespace Orchard.Core.Navigation.Drivers {
|
||||
var menu = model.OnMenu ? _orchardServices.ContentManager.Get(model.CurrentMenuId) : null;
|
||||
|
||||
part.MenuText = model.MenuText;
|
||||
part.Menu = menu != null ? menu.Record : null;
|
||||
part.Menu = menu;
|
||||
|
||||
if (string.IsNullOrEmpty(part.MenuPosition) && menu != null) {
|
||||
part.MenuPosition = Position.GetNext(_navigationManager.BuildMenu(menu));
|
||||
@ -84,7 +84,13 @@ namespace Orchard.Core.Navigation.Drivers {
|
||||
part.MenuPosition = position;
|
||||
}
|
||||
|
||||
context.ImportAttribute(part.PartDefinition.Name, "Menu", x => part.Menu = context.GetItemFromSession(x).Record);
|
||||
var menuIdentity = context.Attribute(part.PartDefinition.Name, "Menu");
|
||||
if (menuIdentity != null) {
|
||||
var menu = context.GetItemFromSession(menuIdentity);
|
||||
if (menu != null) {
|
||||
part.Menu = menu;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Exporting(MenuPart part, ContentManagement.Handlers.ExportContentContext context) {
|
||||
|
@ -11,13 +11,5 @@ namespace Orchard.Core.Navigation.Handlers {
|
||||
Filters.Add(new ActivatingFilter<MenuItemPart>("MenuItem"));
|
||||
Filters.Add(StorageFilter.For(repository));
|
||||
}
|
||||
|
||||
protected override void GetItemMetadata(GetContentItemMetadataContext context) {
|
||||
var part = context.ContentItem.As<MenuItemPart>();
|
||||
|
||||
if (part != null) {
|
||||
context.Metadata.Identity.Add("MenuItem.Url", part.Url);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -8,12 +8,33 @@ using Orchard.Data;
|
||||
namespace Orchard.Core.Navigation.Handlers {
|
||||
[UsedImplicitly]
|
||||
public class MenuPartHandler : ContentHandler {
|
||||
public MenuPartHandler(IRepository<MenuPartRecord> menuPartRepository) {
|
||||
private readonly IContentManager _contentManager;
|
||||
|
||||
public MenuPartHandler(
|
||||
IRepository<MenuPartRecord> menuPartRepository,
|
||||
IContentManager contentManager
|
||||
) {
|
||||
|
||||
_contentManager = contentManager;
|
||||
Filters.Add(StorageFilter.For(menuPartRepository));
|
||||
|
||||
OnInitializing<MenuPart>((ctx, x) => {
|
||||
x.MenuText = String.Empty;
|
||||
});
|
||||
|
||||
OnActivated<MenuPart>(PropertySetHandlers);
|
||||
}
|
||||
|
||||
protected static void PropertySetHandlers(ActivatedContentContext context, MenuPart menuPart) {
|
||||
menuPart.MenuField.Setter(menu => {
|
||||
menuPart.Record.MenuId = menu.ContentItem.Id;
|
||||
return menu;
|
||||
});
|
||||
}
|
||||
|
||||
protected void LazyLoadHandlers(MenuPart menuPart) {
|
||||
menuPart.MenuField.Loader(ctx =>
|
||||
_contentManager.Get(menuPart.Record.MenuId, menuPart.IsPublished() ? VersionOptions.Published : VersionOptions.Latest));
|
||||
}
|
||||
|
||||
protected override void GetItemMetadata(GetContentItemMetadataContext context) {
|
||||
@ -26,5 +47,6 @@ namespace Orchard.Core.Navigation.Handlers {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -27,11 +27,12 @@ namespace Orchard.Core.Navigation {
|
||||
.ContentPartRecord()
|
||||
.Column<string>("MenuText")
|
||||
.Column<string>("MenuPosition")
|
||||
.Column<int>("MenuRecord_id")
|
||||
.Column<int>("MenuId")
|
||||
);
|
||||
|
||||
ContentDefinitionManager.AlterTypeDefinition("MenuItem", cfg => cfg
|
||||
.WithPart("MenuPart")
|
||||
.WithPart("IdentityPart")
|
||||
.WithPart("CommonPart")
|
||||
.DisplayedAs("Custom Link")
|
||||
.WithSetting("Description", "Represents a simple custom link with a text and an url.")
|
||||
@ -55,6 +56,7 @@ namespace Orchard.Core.Navigation {
|
||||
|
||||
ContentDefinitionManager.AlterTypeDefinition("MenuWidget", cfg => cfg
|
||||
.WithPart("CommonPart")
|
||||
.WithPart("IdentityPart")
|
||||
.WithPart("WidgetPart")
|
||||
.WithPart("MenuWidgetPart")
|
||||
.WithSetting("Stereotype", "Widget")
|
||||
@ -72,6 +74,7 @@ namespace Orchard.Core.Navigation {
|
||||
.WithPart("MenuPart")
|
||||
.WithPart("BodyPart")
|
||||
.WithPart("CommonPart")
|
||||
.WithPart("IdentityPart")
|
||||
.DisplayedAs("Html Menu Item")
|
||||
.WithSetting("Description", "Renders some custom HTML in the menu.")
|
||||
.WithSetting("BodyPartSettings.FlavorDefault", "html")
|
||||
@ -89,6 +92,7 @@ namespace Orchard.Core.Navigation {
|
||||
ContentDefinitionManager.AlterTypeDefinition("ContentMenuItem", cfg => cfg
|
||||
.WithPart("MenuPart")
|
||||
.WithPart("CommonPart")
|
||||
.WithPart("IdentityPart")
|
||||
.WithPart("ContentMenuItemPart")
|
||||
.DisplayedAs("Content Menu Item")
|
||||
.WithSetting("Description", "Adds a Content Item to the menu.")
|
||||
@ -114,6 +118,7 @@ namespace Orchard.Core.Navigation {
|
||||
ContentDefinitionManager.AlterTypeDefinition("MenuItem", cfg => cfg
|
||||
.WithPart("MenuPart")
|
||||
.WithPart("CommonPart")
|
||||
.WithPart("IdentityPart")
|
||||
.DisplayedAs("Custom Link")
|
||||
.WithSetting("Description", "Represents a simple custom link with a text and an url.")
|
||||
.WithSetting("Stereotype", "MenuItem") // because we declare a new stereotype, the Shape MenuItem_Edit is needed
|
||||
@ -136,6 +141,7 @@ namespace Orchard.Core.Navigation {
|
||||
|
||||
ContentDefinitionManager.AlterTypeDefinition("MenuWidget", cfg => cfg
|
||||
.WithPart("CommonPart")
|
||||
.WithPart("IdentityPart")
|
||||
.WithPart("WidgetPart")
|
||||
.WithPart("MenuWidgetPart")
|
||||
.WithSetting("Stereotype", "Widget")
|
||||
@ -143,13 +149,14 @@ namespace Orchard.Core.Navigation {
|
||||
|
||||
SchemaBuilder
|
||||
.AlterTable("MenuPartRecord", table => table.DropColumn("OnMainMenu"))
|
||||
.AlterTable("MenuPartRecord", table => table.AddColumn<int>("MenuRecord_id"))
|
||||
.AlterTable("MenuPartRecord", table => table.AddColumn<int>("MenuId"))
|
||||
;
|
||||
|
||||
ContentDefinitionManager.AlterTypeDefinition("HtmlMenuItem", cfg => cfg
|
||||
.WithPart("MenuPart")
|
||||
.WithPart("BodyPart")
|
||||
.WithPart("CommonPart")
|
||||
.WithPart("IdentityPart")
|
||||
.DisplayedAs("Html Menu Item")
|
||||
.WithSetting("Description", "Renders some custom HTML in the menu.")
|
||||
.WithSetting("BodyPartSettings.FlavorDefault", "html")
|
||||
@ -168,7 +175,7 @@ namespace Orchard.Core.Navigation {
|
||||
if(string.IsNullOrWhiteSpace(menuItem.MenuPosition)) {
|
||||
continue;
|
||||
}
|
||||
menuItem.Menu = mainMenu.ContentItem.Record;
|
||||
menuItem.Menu = mainMenu.ContentItem;
|
||||
}
|
||||
|
||||
// at this point a widget should still be created to display the navigation
|
||||
|
@ -1,13 +1,16 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using Orchard.ContentManagement;
|
||||
using Orchard.ContentManagement.Records;
|
||||
using Orchard.ContentManagement.Utilities;
|
||||
|
||||
namespace Orchard.Core.Navigation.Models {
|
||||
public class MenuPart : ContentPart<MenuPartRecord> {
|
||||
|
||||
public ContentItemRecord Menu {
|
||||
get { return Record.MenuRecord; }
|
||||
set { Record.MenuRecord = value; }
|
||||
private readonly LazyField<IContent> _menu = new LazyField<IContent>();
|
||||
public LazyField<IContent> MenuField { get { return _menu; } }
|
||||
|
||||
public IContent Menu {
|
||||
get { return _menu.Value; }
|
||||
set { _menu.Value = value; }
|
||||
}
|
||||
|
||||
[StringLength(MenuPartRecord.DefaultMenuTextLength)]
|
||||
|
@ -8,6 +8,6 @@ namespace Orchard.Core.Navigation.Models {
|
||||
[StringLength(DefaultMenuTextLength)]
|
||||
public virtual string MenuText { get; set; }
|
||||
public virtual string MenuPosition { get; set; }
|
||||
public virtual ContentItemRecord MenuRecord { get; set; }
|
||||
public virtual int MenuId { get; set; }
|
||||
}
|
||||
}
|
@ -16,7 +16,7 @@ namespace Orchard.Core.Navigation.Services {
|
||||
public void GetMenu(IContent menu, NavigationBuilder builder) {
|
||||
var menuParts = _contentManager
|
||||
.Query<MenuPart, MenuPartRecord>()
|
||||
.Where(x => x.MenuRecord.Id == menu.Id)
|
||||
.Where(x => x.MenuId == menu.Id)
|
||||
.WithQueryHints(new QueryHints().ExpandRecords<MenuItemPartRecord>())
|
||||
.List();
|
||||
|
||||
|
@ -22,7 +22,7 @@ namespace Orchard.Core.Navigation.Services {
|
||||
public IEnumerable<MenuPart> GetMenuParts(int menuId) {
|
||||
return _contentManager
|
||||
.Query<MenuPart, MenuPartRecord>()
|
||||
.Where( x => x.MenuRecord.Id == menuId)
|
||||
.Where( x => x.MenuId == menuId)
|
||||
.List();
|
||||
}
|
||||
|
||||
|
@ -93,7 +93,7 @@ namespace Orchard.Blogs.Commands {
|
||||
if (menu != null) {
|
||||
blog.As<MenuPart>().MenuPosition = Position.GetNext(_navigationManager.BuildMenu(menu));
|
||||
blog.As<MenuPart>().MenuText = MenuText;
|
||||
blog.As<MenuPart>().Menu = menu.ContentItem.Record;
|
||||
blog.As<MenuPart>().Menu = menu.ContentItem;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -82,7 +82,7 @@ namespace Orchard.Pages.Commands {
|
||||
if (menu != null) {
|
||||
page.As<MenuPart>().MenuPosition = Position.GetNext(_navigationManager.BuildMenu(menu));
|
||||
page.As<MenuPart>().MenuText = MenuText;
|
||||
page.As<MenuPart>().Menu = menu.ContentItem.Record;
|
||||
page.As<MenuPart>().Menu = menu.ContentItem;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -78,7 +78,11 @@ namespace Orchard.ContentManagement {
|
||||
|
||||
}
|
||||
|
||||
return _contentManager.New(_contentTypes[contentIdentity]);
|
||||
var contentItem = _contentManager.Create(_contentTypes[contentIdentity], VersionOptions.Draft);
|
||||
_identities.Add(contentIdentity, contentItem.Id);
|
||||
_contentItemIds.Add(contentItem.Id, contentIdentity);
|
||||
|
||||
return contentItem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user