Content manager ordering templates by position property

--HG--
extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4042797
This commit is contained in:
loudej
2009-12-01 05:48:36 +00:00
parent 15b6b7116a
commit 2816c53342
6 changed files with 49 additions and 7 deletions

View File

@@ -172,7 +172,26 @@ namespace Orchard.Tests.Models {
return modelRecord; 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"));
}
} }
} }

View File

@@ -1,10 +1,15 @@
using Orchard.Models; using System.Collections.Generic;
using Orchard.Models;
using Orchard.Models.Driver; using Orchard.Models.Driver;
using Orchard.UI.Models;
namespace Orchard.Tests.Models.Stubs { namespace Orchard.Tests.Models.Stubs {
public class AlphaProvider : ContentProvider { public class AlphaProvider : ContentProvider {
public override System.Collections.Generic.IEnumerable<Orchard.Models.ContentType> GetContentTypes() { public AlphaProvider() {
return new[] {new ContentType {Name = "alpha"}}; 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) { protected override void Activating(ActivatingContentContext context) {
if (context.ContentType == "alpha") { if (context.ContentType == "alpha") {

View File

@@ -1,7 +1,11 @@
using Orchard.Models.Driver; using Orchard.Models.Driver;
using Orchard.UI.Models;
namespace Orchard.Tests.Models.Stubs { namespace Orchard.Tests.Models.Stubs {
public class FlavoredProvider : ContentProvider { public class FlavoredProvider : ContentProvider {
public FlavoredProvider() {
OnGetDisplays<Flavored>((ctx, part) => ctx.Displays.Add(new ModelTemplate(part)));
}
protected override void Activating(ActivatingContentContext context) { protected override void Activating(ActivatingContentContext context) {
if (context.ContentType == "beta" || context.ContentType == "alpha") { if (context.ContentType == "beta" || context.ContentType == "alpha") {
context.Builder.Weld<Flavored>(); context.Builder.Weld<Flavored>();

View File

@@ -1,7 +1,12 @@
using Orchard.Models.Driver; using Orchard.Models.Driver;
using Orchard.UI.Models;
namespace Orchard.Tests.Models.Stubs { namespace Orchard.Tests.Models.Stubs {
public class StyledProvider : ContentProvider { public class StyledProvider : ContentProvider {
public StyledProvider() {
OnGetDisplays<Styled>((ctx, part) => ctx.Displays.Add(new ModelTemplate(part) { Position = "10" }));
}
protected override void Activating(ActivatingContentContext context) { protected override void Activating(ActivatingContentContext context) {
if (context.ContentType == "alpha") { if (context.ContentType == "alpha") {
context.Builder.Weld<Styled>(); context.Builder.Weld<Styled>();

View File

@@ -1,10 +1,12 @@
using System.Collections.Generic; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using Autofac; using Autofac;
using Orchard.Data; using Orchard.Data;
using Orchard.Models.Driver; using Orchard.Models.Driver;
using Orchard.Models.Records; using Orchard.Models.Records;
using Orchard.UI.Models; using Orchard.UI.Models;
using Orchard.UI.Navigation;
namespace Orchard.Models { namespace Orchard.Models {
public class DefaultContentManager : IContentManager { public class DefaultContentManager : IContentManager {
@@ -125,7 +127,7 @@ namespace Orchard.Models {
foreach (var driver in Drivers) { foreach (var driver in Drivers) {
driver.GetDisplays(context); driver.GetDisplays(context);
} }
return context.Displays; return OrderTemplates(context.Displays);
} }
public IEnumerable<ModelTemplate> GetEditors(IContent content) { public IEnumerable<ModelTemplate> GetEditors(IContent content) {
@@ -133,7 +135,7 @@ namespace Orchard.Models {
foreach (var driver in Drivers) { foreach (var driver in Drivers) {
driver.GetEditors(context); driver.GetEditors(context);
} }
return context.Editors; return OrderTemplates(context.Editors);
} }
public IEnumerable<ModelTemplate> UpdateEditors(IContent content, IUpdateModel updater) { public IEnumerable<ModelTemplate> UpdateEditors(IContent content, IUpdateModel updater) {
@@ -141,7 +143,13 @@ namespace Orchard.Models {
foreach (var driver in Drivers) { foreach (var driver in Drivers) {
driver.UpdateEditors(context); 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() { public IContentQuery<ContentItem> Query() {

View File

@@ -13,5 +13,6 @@
public string Prefix { get; set; } public string Prefix { get; set; }
public string TemplateName { get; set; } public string TemplateName { get; set; }
public string Position { get; set; }
} }
} }