mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-09-18 17:47:54 +08:00
Generalize content location settings
We have multiple types of "display" ("Detail", "Summary", "Editor", etc.). The Location settings now exposes 4 pre-defined display types for location settings for Field and for Parts: * Detail * Editor * Summary * SummaryAdmin --HG-- branch : dev
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
using Orchard.ContentManagement;
|
using Orchard.ContentManagement;
|
||||||
using Orchard.ContentManagement.Drivers;
|
using Orchard.ContentManagement.Drivers;
|
||||||
using Orchard.Core.Common.Fields;
|
using Orchard.Core.Common.Fields;
|
||||||
|
using Orchard.Core.Common.Models;
|
||||||
using Orchard.Core.Common.Settings;
|
using Orchard.Core.Common.Settings;
|
||||||
|
|
||||||
namespace Orchard.Core.Common.Drivers {
|
namespace Orchard.Core.Common.Drivers {
|
||||||
@@ -19,18 +20,14 @@ namespace Orchard.Core.Common.Drivers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected override DriverResult Display(ContentPart part, TextField field, string displayType) {
|
protected override DriverResult Display(ContentPart part, TextField field, string displayType) {
|
||||||
var locationSettings =
|
var locationSettings = field.PartFieldDefinition.Settings.GetModel<LocationSettings>().Get(displayType, "primary", "5");
|
||||||
field.PartFieldDefinition.Settings.GetModel<LocationSettings>("DisplayLocation") ??
|
|
||||||
new LocationSettings { Zone = "primary", Position = "5" };
|
|
||||||
|
|
||||||
return ContentFieldTemplate(field, TemplateName, GetPrefix(field, part))
|
return ContentFieldTemplate(field, TemplateName, GetPrefix(field, part))
|
||||||
.Location(locationSettings.Zone, locationSettings.Position);
|
.Location(locationSettings.Zone, locationSettings.Position);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override DriverResult Editor(ContentPart part, TextField field) {
|
protected override DriverResult Editor(ContentPart part, TextField field) {
|
||||||
var locationSettings =
|
var locationSettings = field.PartFieldDefinition.Settings.GetModel<LocationSettings>().Get("Editor", "primary", "5");
|
||||||
field.PartFieldDefinition.Settings.GetModel<LocationSettings>("EditorLocation") ??
|
|
||||||
new LocationSettings { Zone = "primary", Position = "5" };
|
|
||||||
|
|
||||||
return ContentFieldTemplate(field, TemplateName, GetPrefix(field, part))
|
return ContentFieldTemplate(field, TemplateName, GetPrefix(field, part))
|
||||||
.Location(locationSettings.Zone, locationSettings.Position);
|
.Location(locationSettings.Zone, locationSettings.Position);
|
||||||
@@ -40,6 +37,5 @@ namespace Orchard.Core.Common.Drivers {
|
|||||||
updater.TryUpdateModel(field, GetPrefix(field, part), null, null);
|
updater.TryUpdateModel(field, GetPrefix(field, part), null, null);
|
||||||
return Editor(part, field);
|
return Editor(part, field);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
8
src/Orchard.Web/Core/Common/Models/LocationDefinition.cs
Normal file
8
src/Orchard.Web/Core/Common/Models/LocationDefinition.cs
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
using Orchard.Localization;
|
||||||
|
|
||||||
|
namespace Orchard.Core.Common.Models {
|
||||||
|
public class LocationDefinition {
|
||||||
|
public string Name { get; set; }
|
||||||
|
public LocalizedString DisplayName { get; set; }
|
||||||
|
}
|
||||||
|
}
|
23
src/Orchard.Web/Core/Common/Models/LocationSettings.cs
Normal file
23
src/Orchard.Web/Core/Common/Models/LocationSettings.cs
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using Orchard.ContentManagement.Drivers;
|
||||||
|
|
||||||
|
namespace Orchard.Core.Common.Models {
|
||||||
|
public class LocationSettings : Dictionary<string, ContentLocation> {
|
||||||
|
public LocationSettings() { }
|
||||||
|
public LocationSettings(LocationSettings value)
|
||||||
|
: base(value) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public ContentLocation Get(string location) {
|
||||||
|
return Get(location, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ContentLocation Get(string location, string defaultZone, string defaultPosition) {
|
||||||
|
ContentLocation result;
|
||||||
|
if (this.TryGetValue(location, out result)) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
return new ContentLocation { Zone = defaultZone, Position = defaultPosition };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -4,58 +4,110 @@ using Orchard.ContentManagement.MetaData;
|
|||||||
using Orchard.ContentManagement.MetaData.Builders;
|
using Orchard.ContentManagement.MetaData.Builders;
|
||||||
using Orchard.ContentManagement.MetaData.Models;
|
using Orchard.ContentManagement.MetaData.Models;
|
||||||
using Orchard.ContentManagement.ViewModels;
|
using Orchard.ContentManagement.ViewModels;
|
||||||
|
using Orchard.Core.Common.Models;
|
||||||
|
using Orchard.Localization;
|
||||||
|
|
||||||
namespace Orchard.Core.Common.Settings {
|
namespace Orchard.Core.Common.Settings {
|
||||||
public class LocationSettingsEditorEvents : ContentDefinitionEditorEventsBase {
|
public class LocationSettingsEditorEvents : ContentDefinitionEditorEventsBase {
|
||||||
|
|
||||||
public override IEnumerable<TemplateViewModel> TypePartEditor(ContentTypeDefinition.Part definition) {
|
public LocationSettingsEditorEvents() {
|
||||||
yield return TypePartEditorForLocation(definition, "DisplayLocation");
|
T = NullLocalizer.Instance;
|
||||||
yield return TypePartEditorForLocation(definition, "EditorLocation");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private TemplateViewModel TypePartEditorForLocation(ContentTypeDefinition.Part definition, string locationSettings) {
|
public Localizer T { get; set; }
|
||||||
|
|
||||||
|
private IEnumerable<LocationDefinition> GetPredefinedLocations() {
|
||||||
|
yield return new LocationDefinition { Name = "Detail", DisplayName = T("Location in a \"Detail\" screen") };
|
||||||
|
yield return new LocationDefinition { Name = "Editor", DisplayName = T("Location in a \"Editor\" screen") };
|
||||||
|
yield return new LocationDefinition { Name = "Summary", DisplayName = T("Location in a \"Summary\" screen (Front-end)") };
|
||||||
|
yield return new LocationDefinition { Name = "SummaryAdmin", DisplayName = T("Location in a \"Summary\" screen (Admin)") };
|
||||||
|
}
|
||||||
|
|
||||||
|
private LocationSettings MergeSettings(LocationSettings partSettings, LocationSettings partDefinitionSettings) {
|
||||||
|
var result = new LocationSettings(partSettings);
|
||||||
|
foreach (var entry in partDefinitionSettings) {
|
||||||
|
if (!partSettings.ContainsKey(entry.Key))
|
||||||
|
partSettings[entry.Key] = entry.Value;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Standalone part definition
|
||||||
|
public override IEnumerable<TemplateViewModel> PartEditor(ContentPartDefinition definition) {
|
||||||
|
var settings = definition.Settings.GetModel<LocationSettings>();
|
||||||
|
|
||||||
|
foreach (var location in GetPredefinedLocations()) {
|
||||||
|
var viewModel = new LocationSettingsViewModel {
|
||||||
|
Definition = location,
|
||||||
|
Location = settings.Get(location.Name)
|
||||||
|
};
|
||||||
|
yield return DefinitionTemplate(viewModel, templateName: "LocationSettings", prefix: location.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override IEnumerable<TemplateViewModel> PartEditorUpdate(ContentPartDefinitionBuilder builder, IUpdateModel updateModel) {
|
||||||
|
var settings = new LocationSettings();
|
||||||
|
foreach (var location in GetPredefinedLocations()) {
|
||||||
|
var viewModel = new LocationSettingsViewModel();
|
||||||
|
updateModel.TryUpdateModel(viewModel, location.Name, null, null);
|
||||||
|
settings[location.Name] = viewModel.Location;
|
||||||
|
yield return DefinitionTemplate(viewModel, templateName: "LocationSettings", prefix: location.Name);
|
||||||
|
}
|
||||||
|
builder.WithLocation(settings);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Part in the context of a content type
|
||||||
|
public override IEnumerable<TemplateViewModel> TypePartEditor(ContentTypeDefinition.Part definition) {
|
||||||
// Look for the setting in the most specific settings first (part definition in type)
|
// Look for the setting in the most specific settings first (part definition in type)
|
||||||
// then in the global part definition.
|
// then in the global part definition.
|
||||||
var settings =
|
var partSettings = definition.Settings.GetModel<LocationSettings>();
|
||||||
definition.Settings.TryGetModel<LocationSettings>(locationSettings) ??
|
var partDefinitionSettings = definition.PartDefinition.Settings.GetModel<LocationSettings>();
|
||||||
definition.PartDefinition.Settings.GetModel<LocationSettings>(locationSettings);
|
var settings = MergeSettings(partSettings, partDefinitionSettings);
|
||||||
|
|
||||||
return DefinitionTemplate(settings, locationSettings, locationSettings);
|
foreach (var location in GetPredefinedLocations()) {
|
||||||
|
var viewModel = new LocationSettingsViewModel {
|
||||||
|
Definition = location,
|
||||||
|
Location = settings.Get(location.Name)
|
||||||
|
};
|
||||||
|
yield return DefinitionTemplate(viewModel, templateName: "LocationSettings", prefix: location.Name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override IEnumerable<TemplateViewModel> TypePartEditorUpdate(ContentTypeDefinitionBuilder.PartConfigurer builder, IUpdateModel updateModel) {
|
public override IEnumerable<TemplateViewModel> TypePartEditorUpdate(ContentTypeDefinitionBuilder.PartConfigurer builder, IUpdateModel updateModel) {
|
||||||
yield return TypePartEditorUpdateForLocation(builder, updateModel, "DisplayLocation");
|
var settings = new LocationSettings();
|
||||||
yield return TypePartEditorUpdateForLocation(builder, updateModel, "EditorLocation");
|
foreach (var location in GetPredefinedLocations()) {
|
||||||
|
var viewModel = new LocationSettingsViewModel();
|
||||||
|
updateModel.TryUpdateModel(viewModel, location.Name, null, null);
|
||||||
|
settings[location.Name] = viewModel.Location;
|
||||||
|
yield return DefinitionTemplate(viewModel, templateName: "LocationSettings", prefix: location.Name);
|
||||||
}
|
}
|
||||||
|
builder.WithLocation(settings);
|
||||||
private TemplateViewModel TypePartEditorUpdateForLocation(ContentTypeDefinitionBuilder.PartConfigurer builder, IUpdateModel updateModel, string locationSettings) {
|
|
||||||
var locationsettings = new LocationSettings();
|
|
||||||
updateModel.TryUpdateModel(locationsettings, locationSettings, null, null);
|
|
||||||
builder.WithLocation("EditorLocation", locationsettings.Zone, locationsettings.Position);
|
|
||||||
return DefinitionTemplate(locationsettings, locationSettings, locationSettings);
|
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Field within a content part
|
||||||
public override IEnumerable<TemplateViewModel> PartFieldEditor(ContentPartDefinition.Field definition) {
|
public override IEnumerable<TemplateViewModel> PartFieldEditor(ContentPartDefinition.Field definition) {
|
||||||
yield return PartFieldEditorForLocation(definition, "DisplayLocation");
|
var settings = definition.Settings.GetModel<LocationSettings>();
|
||||||
yield return PartFieldEditorForLocation(definition, "EditorLocation");
|
foreach (var location in GetPredefinedLocations()) {
|
||||||
|
var viewModel = new LocationSettingsViewModel {
|
||||||
|
Definition = location,
|
||||||
|
Location = settings.Get(location.Name)
|
||||||
|
};
|
||||||
|
yield return DefinitionTemplate(viewModel, templateName: "LocationSettings", prefix: location.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
private TemplateViewModel PartFieldEditorForLocation(ContentPartDefinition.Field definition, string locationSettings) {
|
|
||||||
var settings = definition.Settings.GetModel<LocationSettings>(locationSettings);
|
|
||||||
return DefinitionTemplate(settings, locationSettings, locationSettings);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public override IEnumerable<TemplateViewModel> PartFieldEditorUpdate(ContentPartDefinitionBuilder.FieldConfigurer builder, IUpdateModel updateModel) {
|
public override IEnumerable<TemplateViewModel> PartFieldEditorUpdate(ContentPartDefinitionBuilder.FieldConfigurer builder, IUpdateModel updateModel) {
|
||||||
yield return PartFieldEditorUpdateForLocation(builder, updateModel, "DisplayLocation");
|
var settings = new LocationSettings();
|
||||||
yield return PartFieldEditorUpdateForLocation(builder, updateModel, "EditorLocation");
|
foreach (var location in GetPredefinedLocations()) {
|
||||||
}
|
var viewModel = new LocationSettingsViewModel();
|
||||||
|
updateModel.TryUpdateModel(viewModel, location.Name, null, null);
|
||||||
private TemplateViewModel PartFieldEditorUpdateForLocation(ContentPartDefinitionBuilder.FieldConfigurer builder, IUpdateModel updateModel, string locationSettings) {
|
settings[location.Name] = viewModel.Location;
|
||||||
var model = new LocationSettings();
|
yield return DefinitionTemplate(viewModel, templateName: "LocationSettings", prefix: location.Name);
|
||||||
updateModel.TryUpdateModel(model, locationSettings, null, null);
|
|
||||||
builder.WithLocation(locationSettings, model.Zone, model.Position);
|
|
||||||
return DefinitionTemplate(model);
|
|
||||||
}
|
}
|
||||||
|
builder.WithLocation(settings);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -0,0 +1,9 @@
|
|||||||
|
using Orchard.ContentManagement.Drivers;
|
||||||
|
using Orchard.Core.Common.Models;
|
||||||
|
|
||||||
|
namespace Orchard.Core.Common.Settings {
|
||||||
|
public class LocationSettingsViewModel {
|
||||||
|
public LocationDefinition Definition { get; set; }
|
||||||
|
public ContentLocation Location { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@@ -1,12 +0,0 @@
|
|||||||
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<Orchard.Core.Common.Settings.LocationSettings>" %>
|
|
||||||
<fieldset >
|
|
||||||
<legend><%:T("Display location") %></legend>
|
|
||||||
|
|
||||||
<label for="<%:Html.FieldIdFor(m => m.Zone) %>"><%:T("Zone name (e.g. body, primary)") %></label>
|
|
||||||
<%:Html.EditorFor(m=>m.Zone) %>
|
|
||||||
<%:Html.ValidationMessageFor(m => m.Zone)%>
|
|
||||||
|
|
||||||
<label for="<%:Html.FieldIdFor(m => m.Position) %>"><%:T("Position in zone (e.g. 1, 1.0, 2.5.1)") %></label>
|
|
||||||
<%:Html.EditorFor(m=>m.Position) %>
|
|
||||||
<%:Html.ValidationMessageFor(m => m.Position)%>
|
|
||||||
</fieldset>
|
|
@@ -1,12 +0,0 @@
|
|||||||
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<Orchard.Core.Common.Settings.LocationSettings>" %>
|
|
||||||
<fieldset >
|
|
||||||
<legend><%:T("Editor Location") %></legend>
|
|
||||||
|
|
||||||
<label for="<%:Html.FieldIdFor(m => m.Zone) %>"><%:T("Zone name (e.g. body, primary)")%></label>
|
|
||||||
<%:Html.EditorFor(m=>m.Zone) %>
|
|
||||||
<%:Html.ValidationMessageFor(m => m.Zone)%>
|
|
||||||
|
|
||||||
<label for="<%:Html.FieldIdFor(m => m.Position) %>"><%:T("Position in zone (e.g. 1, 1.0, 2.5.1)") %></label>
|
|
||||||
<%:Html.EditorFor(m=>m.Position) %>
|
|
||||||
<%:Html.ValidationMessageFor(m => m.Position)%>
|
|
||||||
</fieldset>
|
|
@@ -0,0 +1,12 @@
|
|||||||
|
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<Orchard.Core.Common.Settings.LocationSettingsViewModel>" %>
|
||||||
|
<fieldset >
|
||||||
|
<legend><%:T("{0}", Model.Definition.DisplayName) %></legend>
|
||||||
|
|
||||||
|
<label for="<%:Html.FieldIdFor(m => m.Location.Zone) %>"><%:T("Zone name (e.g. body, primary)") %></label>
|
||||||
|
<%:Html.EditorFor(m => m.Location.Zone)%>
|
||||||
|
<%:Html.ValidationMessageFor(m => m.Location.Zone)%>
|
||||||
|
|
||||||
|
<label for="<%:Html.FieldIdFor(m => m.Location.Position) %>"><%:T("Position in zone (e.g. 1, 1.0, 2.5.1)") %></label>
|
||||||
|
<%:Html.EditorFor(m => m.Location.Position)%>
|
||||||
|
<%:Html.ValidationMessageFor(m => m.Location.Position)%>
|
||||||
|
</fieldset>
|
@@ -67,11 +67,13 @@
|
|||||||
<Compile Include="Common\Drivers\TextFieldDriver.cs" />
|
<Compile Include="Common\Drivers\TextFieldDriver.cs" />
|
||||||
<Compile Include="Common\Extensions\HtmlHelperExtensions.cs" />
|
<Compile Include="Common\Extensions\HtmlHelperExtensions.cs" />
|
||||||
<Compile Include="Common\Fields\TextField.cs" />
|
<Compile Include="Common\Fields\TextField.cs" />
|
||||||
|
<Compile Include="Common\Models\LocationDefinition.cs" />
|
||||||
<Compile Include="Common\Services\ICommonService.cs" />
|
<Compile Include="Common\Services\ICommonService.cs" />
|
||||||
<Compile Include="Common\Services\CommonService.cs" />
|
<Compile Include="Common\Services\CommonService.cs" />
|
||||||
<Compile Include="Common\Settings\BodySettings.cs" />
|
<Compile Include="Common\Settings\BodySettings.cs" />
|
||||||
|
<Compile Include="Common\Models\LocationSettings.cs" />
|
||||||
<Compile Include="Common\Settings\LocationSettingsEditorEvents.cs" />
|
<Compile Include="Common\Settings\LocationSettingsEditorEvents.cs" />
|
||||||
<Compile Include="Common\Settings\LocationSettings.cs" />
|
<Compile Include="Common\ViewModels\LocationSettingsViewModel.cs" />
|
||||||
<Compile Include="Common\ViewModels\CommonMetadataViewModel.cs" />
|
<Compile Include="Common\ViewModels\CommonMetadataViewModel.cs" />
|
||||||
<Compile Include="Common\ViewModels\ContainerEditorViewModel.cs" />
|
<Compile Include="Common\ViewModels\ContainerEditorViewModel.cs" />
|
||||||
<Compile Include="Common\ViewModels\TextContentFieldDisplayViewModel.cs" />
|
<Compile Include="Common\ViewModels\TextContentFieldDisplayViewModel.cs" />
|
||||||
@@ -226,8 +228,7 @@
|
|||||||
<Content Include="Common\Module.txt" />
|
<Content Include="Common\Module.txt" />
|
||||||
<Content Include="Common\Views\DefinitionTemplates\BodyTypePartSettings.ascx" />
|
<Content Include="Common\Views\DefinitionTemplates\BodyTypePartSettings.ascx" />
|
||||||
<Content Include="Common\Views\DefinitionTemplates\BodyPartSettings.ascx" />
|
<Content Include="Common\Views\DefinitionTemplates\BodyPartSettings.ascx" />
|
||||||
<Content Include="Common\Views\DefinitionTemplates\DisplayLocation.ascx" />
|
<Content Include="Common\Views\DefinitionTemplates\LocationSettings.ascx" />
|
||||||
<Content Include="Common\Views\DefinitionTemplates\EditorLocation.ascx" />
|
|
||||||
<Content Include="Common\Views\DisplayTemplates\Fields\Common.TextField.ascx" />
|
<Content Include="Common\Views\DisplayTemplates\Fields\Common.TextField.ascx" />
|
||||||
<Content Include="Common\Views\DisplayTemplates\Parts\Common.Body.SummaryAdmin.ascx" />
|
<Content Include="Common\Views\DisplayTemplates\Parts\Common.Body.SummaryAdmin.ascx" />
|
||||||
<Content Include="Common\Views\DisplayTemplates\Parts\Common.Body.Manage.SummaryAdmin.ascx" />
|
<Content Include="Common\Views\DisplayTemplates\Parts\Common.Body.Manage.SummaryAdmin.ascx" />
|
||||||
|
@@ -1,4 +1,6 @@
|
|||||||
using Orchard.ContentManagement.MetaData;
|
using System.Collections.Generic;
|
||||||
|
using Orchard.ContentManagement.Drivers;
|
||||||
|
using Orchard.ContentManagement.MetaData;
|
||||||
using Orchard.ContentManagement.MetaData.Builders;
|
using Orchard.ContentManagement.MetaData.Builders;
|
||||||
using Orchard.Core.Routable.Models;
|
using Orchard.Core.Routable.Models;
|
||||||
using Orchard.Data.Migration;
|
using Orchard.Data.Migration;
|
||||||
@@ -20,7 +22,9 @@ namespace Orchard.Core.Routable.DataMigrations {
|
|||||||
|
|
||||||
public int UpdateFrom1() {
|
public int UpdateFrom1() {
|
||||||
ContentDefinitionManager.AlterPartDefinition(typeof(IsRoutable).Name, cfg => cfg
|
ContentDefinitionManager.AlterPartDefinition(typeof(IsRoutable).Name, cfg => cfg
|
||||||
.WithLocation("EditorLocation", "primary", "before.5"));
|
.WithLocation(new Dictionary<string, ContentLocation> {
|
||||||
|
{"Editor", new ContentLocation { Zone = "primary", Position = "before.5" }}
|
||||||
|
} ));
|
||||||
|
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
using Orchard.ContentManagement;
|
using Orchard.ContentManagement;
|
||||||
using Orchard.ContentManagement.Aspects;
|
using Orchard.ContentManagement.Aspects;
|
||||||
using Orchard.ContentManagement.Drivers;
|
using Orchard.ContentManagement.Drivers;
|
||||||
|
using Orchard.Core.Common.Models;
|
||||||
using Orchard.Core.Common.Settings;
|
using Orchard.Core.Common.Settings;
|
||||||
using Orchard.Core.Routable.Models;
|
using Orchard.Core.Routable.Models;
|
||||||
using Orchard.Core.Routable.Services;
|
using Orchard.Core.Routable.Services;
|
||||||
@@ -67,8 +68,8 @@ namespace Orchard.Core.Routable.Drivers {
|
|||||||
: "";
|
: "";
|
||||||
}
|
}
|
||||||
|
|
||||||
var locationSettings = part.PartDefinition.Settings.GetModel<LocationSettings>("EditorLocation");
|
var location = part.PartDefinition.Settings.GetModel<LocationSettings>().Get("Editor");
|
||||||
return ContentPartTemplate(model, TemplateName, Prefix).Location(locationSettings.Zone, locationSettings.Position);
|
return ContentPartTemplate(model, TemplateName, Prefix).Location(location.Zone, location.Position);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override DriverResult Editor(IsRoutable part, IUpdateModel updater) {
|
protected override DriverResult Editor(IsRoutable part, IUpdateModel updater) {
|
||||||
|
6
src/Orchard/ContentManagement/Drivers/ContentLocation.cs
Normal file
6
src/Orchard/ContentManagement/Drivers/ContentLocation.cs
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
namespace Orchard.ContentManagement.Drivers {
|
||||||
|
public class ContentLocation {
|
||||||
|
public string Zone { get; set; }
|
||||||
|
public string Position { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Orchard.ContentManagement.Drivers;
|
||||||
using Orchard.ContentManagement.MetaData.Models;
|
using Orchard.ContentManagement.MetaData.Models;
|
||||||
|
|
||||||
namespace Orchard.ContentManagement.MetaData.Builders {
|
namespace Orchard.ContentManagement.MetaData.Builders {
|
||||||
@@ -114,35 +115,38 @@ namespace Orchard.ContentManagement.MetaData.Builders {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static class ContentPartDefinitionBuilderExtensions {
|
public static class ContentPartDefinitionBuilderExtensions {
|
||||||
|
public static IEnumerable<KeyValuePair<string, string>> GetSettingEntries(IDictionary<string, ContentLocation> locationSettings) {
|
||||||
|
int index = 0;
|
||||||
|
foreach (var entry in locationSettings) {
|
||||||
|
var zone = string.IsNullOrEmpty(entry.Value.Zone) ? null : entry.Value.Zone;
|
||||||
|
var position = string.IsNullOrEmpty(entry.Value.Position) ? null : entry.Value.Position;
|
||||||
|
var locationName = (zone == null && position == null) ? null : entry.Key;
|
||||||
|
|
||||||
public static ContentPartDefinitionBuilder WithLocation(this ContentPartDefinitionBuilder obj, string location, string zone, string position) {
|
var prefix = string.Format("LocationSettings[{0}]", index);
|
||||||
if (string.IsNullOrEmpty(zone))
|
yield return new KeyValuePair<string, string>(string.Format("{0}.Key", prefix), locationName);
|
||||||
zone = null;
|
yield return new KeyValuePair<string, string>(string.Format("{0}.Value.Zone", prefix), zone);
|
||||||
if (string.IsNullOrEmpty(position))
|
yield return new KeyValuePair<string, string>(string.Format("{0}.Value.Position", prefix), position);
|
||||||
position = null;
|
|
||||||
return obj
|
index++;
|
||||||
.WithSetting(string.Format("{0}.Zone", location), zone)
|
}
|
||||||
.WithSetting(string.Format("{0}.Position", location), position);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ContentTypeDefinitionBuilder.PartConfigurer WithLocation(this ContentTypeDefinitionBuilder.PartConfigurer obj, string location, string zone, string position) {
|
public static ContentPartDefinitionBuilder WithLocation(this ContentPartDefinitionBuilder obj, IDictionary<string, ContentLocation> settings) {
|
||||||
if (string.IsNullOrEmpty(zone))
|
foreach (var entry in GetSettingEntries(settings))
|
||||||
zone = null;
|
obj = obj.WithSetting(entry.Key, entry.Value);
|
||||||
if (string.IsNullOrEmpty(position))
|
return obj;
|
||||||
position = null;
|
|
||||||
return obj
|
|
||||||
.WithSetting(string.Format("{0}.Zone", location), zone)
|
|
||||||
.WithSetting(string.Format("{0}.Position", location), position);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ContentPartDefinitionBuilder.FieldConfigurer WithLocation(this ContentPartDefinitionBuilder.FieldConfigurer obj, string location, string zone, string position) {
|
public static ContentTypeDefinitionBuilder.PartConfigurer WithLocation(this ContentTypeDefinitionBuilder.PartConfigurer obj, IDictionary<string, ContentLocation> settings) {
|
||||||
if (string.IsNullOrEmpty(zone))
|
foreach (var entry in GetSettingEntries(settings))
|
||||||
zone = null;
|
obj = obj.WithSetting(entry.Key, entry.Value);
|
||||||
if (string.IsNullOrEmpty(position))
|
return obj;
|
||||||
position = null;
|
}
|
||||||
return obj
|
|
||||||
.WithSetting(string.Format("{0}.Zone", location), zone)
|
public static ContentPartDefinitionBuilder.FieldConfigurer WithLocation(this ContentPartDefinitionBuilder.FieldConfigurer obj, IDictionary<string, ContentLocation> settings) {
|
||||||
.WithSetting(string.Format("{0}.Position", location), position);
|
foreach (var entry in GetSettingEntries(settings))
|
||||||
|
obj = obj.WithSetting(entry.Key, entry.Value);
|
||||||
|
return obj;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -197,6 +197,7 @@
|
|||||||
<Compile Include="ContentManagement\Drivers\DriverResult.cs">
|
<Compile Include="ContentManagement\Drivers\DriverResult.cs">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="ContentManagement\Drivers\ContentLocation.cs" />
|
||||||
<Compile Include="ContentManagement\FieldStorage\FieldStorageProviderSelector.cs" />
|
<Compile Include="ContentManagement\FieldStorage\FieldStorageProviderSelector.cs" />
|
||||||
<Compile Include="ContentManagement\Drivers\IContentFieldDriver.cs" />
|
<Compile Include="ContentManagement\Drivers\IContentFieldDriver.cs" />
|
||||||
<Compile Include="ContentManagement\Drivers\IContentItemDriver.cs">
|
<Compile Include="ContentManagement\Drivers\IContentItemDriver.cs">
|
||||||
|
Reference in New Issue
Block a user