mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-14 10:54:50 +08:00
Content manager ordering templates by position property
--HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4042797
This commit is contained in:
@@ -172,7 +172,26 @@ namespace Orchard.Tests.Models {
|
||||
return modelRecord;
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void EditorsShouldBeOrderedByPositionAndDefaultPositionIsSix() {
|
||||
var alpha = _manager.New("alpha");
|
||||
var templates = _manager.GetDisplays(alpha);
|
||||
Assert.That(templates.Count(), Is.EqualTo(3));
|
||||
|
||||
var t0 = templates.First();
|
||||
var t1 = templates.Skip(1).First();
|
||||
var t2 = templates.Skip(2).First();
|
||||
|
||||
Assert.That(t0.Model, Is.TypeOf<Alpha>());
|
||||
Assert.That(t1.Model, Is.TypeOf<Flavored>());
|
||||
Assert.That(t2.Model, Is.TypeOf<Styled>());
|
||||
|
||||
Assert.That(t0.Position, Is.EqualTo("3"));
|
||||
Assert.That(t1.Position, Is.Null);
|
||||
Assert.That(t2.Position, Is.EqualTo("10"));
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -1,10 +1,15 @@
|
||||
using Orchard.Models;
|
||||
using System.Collections.Generic;
|
||||
using Orchard.Models;
|
||||
using Orchard.Models.Driver;
|
||||
using Orchard.UI.Models;
|
||||
|
||||
namespace Orchard.Tests.Models.Stubs {
|
||||
public class AlphaProvider : ContentProvider {
|
||||
public override System.Collections.Generic.IEnumerable<Orchard.Models.ContentType> GetContentTypes() {
|
||||
return new[] {new ContentType {Name = "alpha"}};
|
||||
public AlphaProvider() {
|
||||
OnGetDisplays<Alpha>((ctx, part) => ctx.Displays.Add(new ModelTemplate(part) { Position = "3" }));
|
||||
}
|
||||
public override IEnumerable<ContentType> GetContentTypes() {
|
||||
return new[] { new ContentType { Name = "alpha" } };
|
||||
}
|
||||
protected override void Activating(ActivatingContentContext context) {
|
||||
if (context.ContentType == "alpha") {
|
||||
|
@@ -1,7 +1,11 @@
|
||||
using Orchard.Models.Driver;
|
||||
using Orchard.UI.Models;
|
||||
|
||||
namespace Orchard.Tests.Models.Stubs {
|
||||
public class FlavoredProvider : ContentProvider {
|
||||
public FlavoredProvider() {
|
||||
OnGetDisplays<Flavored>((ctx, part) => ctx.Displays.Add(new ModelTemplate(part)));
|
||||
}
|
||||
protected override void Activating(ActivatingContentContext context) {
|
||||
if (context.ContentType == "beta" || context.ContentType == "alpha") {
|
||||
context.Builder.Weld<Flavored>();
|
||||
|
@@ -1,7 +1,12 @@
|
||||
using Orchard.Models.Driver;
|
||||
using Orchard.UI.Models;
|
||||
|
||||
namespace Orchard.Tests.Models.Stubs {
|
||||
public class StyledProvider : ContentProvider {
|
||||
public StyledProvider() {
|
||||
OnGetDisplays<Styled>((ctx, part) => ctx.Displays.Add(new ModelTemplate(part) { Position = "10" }));
|
||||
}
|
||||
|
||||
protected override void Activating(ActivatingContentContext context) {
|
||||
if (context.ContentType == "alpha") {
|
||||
context.Builder.Weld<Styled>();
|
||||
|
@@ -1,10 +1,12 @@
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Autofac;
|
||||
using Orchard.Data;
|
||||
using Orchard.Models.Driver;
|
||||
using Orchard.Models.Records;
|
||||
using Orchard.UI.Models;
|
||||
using Orchard.UI.Navigation;
|
||||
|
||||
namespace Orchard.Models {
|
||||
public class DefaultContentManager : IContentManager {
|
||||
@@ -125,7 +127,7 @@ namespace Orchard.Models {
|
||||
foreach (var driver in Drivers) {
|
||||
driver.GetDisplays(context);
|
||||
}
|
||||
return context.Displays;
|
||||
return OrderTemplates(context.Displays);
|
||||
}
|
||||
|
||||
public IEnumerable<ModelTemplate> GetEditors(IContent content) {
|
||||
@@ -133,7 +135,7 @@ namespace Orchard.Models {
|
||||
foreach (var driver in Drivers) {
|
||||
driver.GetEditors(context);
|
||||
}
|
||||
return context.Editors;
|
||||
return OrderTemplates(context.Editors);
|
||||
}
|
||||
|
||||
public IEnumerable<ModelTemplate> UpdateEditors(IContent content, IUpdateModel updater) {
|
||||
@@ -141,7 +143,13 @@ namespace Orchard.Models {
|
||||
foreach (var driver in Drivers) {
|
||||
driver.UpdateEditors(context);
|
||||
}
|
||||
return context.Editors;
|
||||
return OrderTemplates(context.Editors);
|
||||
}
|
||||
|
||||
private static IEnumerable<ModelTemplate> OrderTemplates(IEnumerable<ModelTemplate> templates) {
|
||||
var comparer = new PositionComparer();
|
||||
return templates.OrderBy(x => x.Position ?? "6", comparer);
|
||||
|
||||
}
|
||||
|
||||
public IContentQuery<ContentItem> Query() {
|
||||
|
@@ -13,5 +13,6 @@
|
||||
public string Prefix { get; set; }
|
||||
public string TemplateName { get; set; }
|
||||
|
||||
public string Position { get; set; }
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user