mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 03:25:23 +08:00
Moving item template support into item driver. Further control moved out of various handlers.
--HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4044433
This commit is contained in:
@@ -75,21 +75,21 @@ namespace Orchard.Tests.Models {
|
|||||||
protected override DriverResult Display(StubPart part, string displayType) {
|
protected override DriverResult Display(StubPart part, string displayType) {
|
||||||
var viewModel = new StubViewModel { Foo = string.Join(",", part.Foo) };
|
var viewModel = new StubViewModel { Foo = string.Join(",", part.Foo) };
|
||||||
if (displayType.StartsWith("Summary"))
|
if (displayType.StartsWith("Summary"))
|
||||||
return PartialView(viewModel, "StubViewModelTerse").Location("topmeta");
|
return PartTemplate(viewModel, "StubViewModelTerse").Location("topmeta");
|
||||||
|
|
||||||
return PartialView(viewModel).Location("topmeta");
|
return PartTemplate(viewModel).Location("topmeta");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override DriverResult Editor(StubPart part) {
|
protected override DriverResult Editor(StubPart part) {
|
||||||
var viewModel = new StubViewModel { Foo = string.Join(",", part.Foo) };
|
var viewModel = new StubViewModel { Foo = string.Join(",", part.Foo) };
|
||||||
return PartialView(viewModel).Location("last", "10");
|
return PartTemplate(viewModel).Location("last", "10");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override DriverResult Editor(StubPart part, IUpdateModel updater) {
|
protected override DriverResult Editor(StubPart part, IUpdateModel updater) {
|
||||||
var viewModel = new StubViewModel { Foo = string.Join(",", part.Foo) };
|
var viewModel = new StubViewModel { Foo = string.Join(",", part.Foo) };
|
||||||
updater.TryUpdateModel(viewModel, Prefix, null, null);
|
updater.TryUpdateModel(viewModel, Prefix, null, null);
|
||||||
part.Foo = viewModel.Foo.Split(new[] { ',' }).Select(x => x.Trim()).ToArray();
|
part.Foo = viewModel.Foo.Split(new[] { ',' }).Select(x => x.Trim()).ToArray();
|
||||||
return PartialView(viewModel).Location("last", "10");
|
return PartTemplate(viewModel).Location("last", "10");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -14,7 +14,8 @@ namespace Orchard.Blogs.Controllers {
|
|||||||
private readonly IContentManager _contentManager;
|
private readonly IContentManager _contentManager;
|
||||||
private readonly IBlogPostService _blogPostService;
|
private readonly IBlogPostService _blogPostService;
|
||||||
|
|
||||||
public BlogDriver(IContentManager contentManager, IBlogPostService blogPostService) {
|
public BlogDriver(IContentManager contentManager, IBlogPostService blogPostService)
|
||||||
|
: base(Blog.ContentType) {
|
||||||
_contentManager = contentManager;
|
_contentManager = contentManager;
|
||||||
_blogPostService = blogPostService;
|
_blogPostService = blogPostService;
|
||||||
}
|
}
|
||||||
@@ -44,29 +45,33 @@ namespace Orchard.Blogs.Controllers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected override DriverResult Display(Blog blog, string displayType) {
|
protected override DriverResult Display(Blog blog, string displayType) {
|
||||||
if (!displayType.StartsWith("Detail"))
|
|
||||||
return null;
|
|
||||||
|
|
||||||
var posts = _blogPostService.Get(blog);
|
IEnumerable<ItemDisplayModel<BlogPost>> blogPosts = null;
|
||||||
|
|
||||||
IEnumerable<ItemDisplayModel<BlogPost>> model;
|
|
||||||
if (displayType.StartsWith("DetailAdmin")) {
|
if (displayType.StartsWith("DetailAdmin")) {
|
||||||
model = posts.Select(bp => _contentManager.BuildDisplayModel(bp, "SummaryAdmin"));
|
blogPosts = _blogPostService.Get(blog)
|
||||||
|
.Select(bp => _contentManager.BuildDisplayModel(bp, "SummaryAdmin"));
|
||||||
}
|
}
|
||||||
else {
|
else if (displayType.StartsWith("Detail")) {
|
||||||
model = posts.Select(bp => _contentManager.BuildDisplayModel(bp, "Summary"));
|
blogPosts = _blogPostService.Get(blog)
|
||||||
|
.Select(bp => _contentManager.BuildDisplayModel(bp, "Summary"));
|
||||||
}
|
}
|
||||||
|
|
||||||
return PartialView(model, "Parts/Blogs.BlogPost.List", "").Location("body");
|
return Combined(
|
||||||
|
ItemTemplate("Items/Blogs.Blog").LongestMatch(displayType, "Summary", "DetailAdmin", "SummaryAdmin"),
|
||||||
|
blogPosts == null ? null : PartTemplate(blogPosts, "Parts/Blogs.BlogPost.List", "").Location("body"));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override DriverResult Editor(Blog blog) {
|
protected override DriverResult Editor(Blog blog) {
|
||||||
return PartialView(blog, "Parts/Blogs.Blog.Fields").Location("primary", "1");
|
return Combined(
|
||||||
|
ItemTemplate("Items/Blogs.Blog"),
|
||||||
|
PartTemplate(blog, "Parts/Blogs.Blog.Fields").Location("primary", "1"));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override DriverResult Editor(Blog blog, IUpdateModel updater) {
|
protected override DriverResult Editor(Blog blog, IUpdateModel updater) {
|
||||||
updater.TryUpdateModel(blog, Prefix, null, null);
|
updater.TryUpdateModel(blog, Prefix, null, null);
|
||||||
return PartialView(blog, "Parts/Blogs.Blog.Fields").Location("primary", "1");
|
return Combined(
|
||||||
|
ItemTemplate("Items/Blogs.Blog"),
|
||||||
|
PartTemplate(blog, "Parts/Blogs.Blog.Fields").Location("primary", "1"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -11,6 +11,10 @@ using Orchard.ContentManagement.Drivers;
|
|||||||
namespace Orchard.Blogs.Controllers {
|
namespace Orchard.Blogs.Controllers {
|
||||||
[UsedImplicitly]
|
[UsedImplicitly]
|
||||||
public class BlogPostDriver : ItemDriver<BlogPost> {
|
public class BlogPostDriver : ItemDriver<BlogPost> {
|
||||||
|
public BlogPostDriver()
|
||||||
|
: base(BlogPost.ContentType) {
|
||||||
|
}
|
||||||
|
|
||||||
protected override string Prefix { get { return ""; } }
|
protected override string Prefix { get { return ""; } }
|
||||||
|
|
||||||
protected override string GetDisplayText(BlogPost post) {
|
protected override string GetDisplayText(BlogPost post) {
|
||||||
@@ -39,8 +43,8 @@ namespace Orchard.Blogs.Controllers {
|
|||||||
|
|
||||||
protected override DriverResult Editor(BlogPost post) {
|
protected override DriverResult Editor(BlogPost post) {
|
||||||
return Combined(
|
return Combined(
|
||||||
PartialView(post, "Parts/Blogs.BlogPost.Fields").Location("primary", "1"),
|
PartTemplate(post, "Parts/Blogs.BlogPost.Fields").Location("primary", "1"),
|
||||||
PartialView(post, "Parts/Blogs.BlogPost.Publish").Location("secondary", "1")
|
PartTemplate(post, "Parts/Blogs.BlogPost.Publish").Location("secondary", "1")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -15,7 +15,6 @@ namespace Orchard.Blogs.Models {
|
|||||||
Filters.Add(new ActivatingFilter<CommonAspect>("blog"));
|
Filters.Add(new ActivatingFilter<CommonAspect>("blog"));
|
||||||
Filters.Add(new ActivatingFilter<RoutableAspect>("blog"));
|
Filters.Add(new ActivatingFilter<RoutableAspect>("blog"));
|
||||||
Filters.Add(new StorageFilter<BlogRecord>(repository));
|
Filters.Add(new StorageFilter<BlogRecord>(repository));
|
||||||
Filters.Add(new ContentItemTemplates<Blog>("Items/Blogs.Blog", "Summary DetailAdmin SummaryAdmin"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,7 +24,7 @@ namespace Orchard.Blogs.Models {
|
|||||||
Filters.Add(new ActivatingFilter<RoutableAspect>("blogpost"));
|
Filters.Add(new ActivatingFilter<RoutableAspect>("blogpost"));
|
||||||
Filters.Add(new ActivatingFilter<BodyAspect>("blogpost"));
|
Filters.Add(new ActivatingFilter<BodyAspect>("blogpost"));
|
||||||
Filters.Add(new StorageFilter<BlogPostRecord>(repository));
|
Filters.Add(new StorageFilter<BlogPostRecord>(repository));
|
||||||
Filters.Add(new ContentItemTemplates<BlogPost>("Items/Blogs.BlogPost", "Summary SummaryAdmin"));
|
|
||||||
|
|
||||||
OnCreated<BlogPost>((context, bp) => bp.Blog.PostCount++);
|
OnCreated<BlogPost>((context, bp) => bp.Blog.PostCount++);
|
||||||
}
|
}
|
||||||
|
@@ -49,7 +49,7 @@ namespace Orchard.Roles.Controllers {
|
|||||||
UserRoles = userRoles,
|
UserRoles = userRoles,
|
||||||
Roles = roles.ToList(),
|
Roles = roles.ToList(),
|
||||||
};
|
};
|
||||||
return PartialView(model, "Parts/Roles.UserRoles");
|
return PartTemplate(model, "Parts/Roles.UserRoles");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override DriverResult Editor(UserRoles userRoles, IUpdateModel updater) {
|
protected override DriverResult Editor(UserRoles userRoles, IUpdateModel updater) {
|
||||||
@@ -75,7 +75,7 @@ namespace Orchard.Roles.Controllers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return PartialView(model, "Parts/Roles.UserRoles");
|
return PartTemplate(model, "Parts/Roles.UserRoles");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,11 +1,4 @@
|
|||||||
using System;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
using Orchard.Data;
|
|
||||||
using Orchard.ContentManagement;
|
|
||||||
using Orchard.ContentManagement.Handlers;
|
|
||||||
using Orchard.Sandbox.Models;
|
|
||||||
using Orchard.Sandbox.ViewModels;
|
|
||||||
|
|
||||||
namespace Orchard.Sandbox.Controllers
|
namespace Orchard.Sandbox.Controllers
|
||||||
{
|
{
|
||||||
|
@@ -1,12 +1,7 @@
|
|||||||
using System;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
using JetBrains.Annotations;
|
|
||||||
using Orchard.Core.Common.Models;
|
|
||||||
using Orchard.Data;
|
|
||||||
using Orchard.Localization;
|
using Orchard.Localization;
|
||||||
using Orchard.ContentManagement;
|
using Orchard.ContentManagement;
|
||||||
using Orchard.ContentManagement.Handlers;
|
|
||||||
using Orchard.Sandbox.Models;
|
using Orchard.Sandbox.Models;
|
||||||
using Orchard.Sandbox.ViewModels;
|
using Orchard.Sandbox.ViewModels;
|
||||||
using Orchard.Security;
|
using Orchard.Security;
|
||||||
|
@@ -0,0 +1,55 @@
|
|||||||
|
using System;
|
||||||
|
using System.Web.Routing;
|
||||||
|
using JetBrains.Annotations;
|
||||||
|
using Orchard.ContentManagement;
|
||||||
|
using Orchard.ContentManagement.Drivers;
|
||||||
|
using Orchard.ContentManagement.ViewModels;
|
||||||
|
using Orchard.Sandbox.Models;
|
||||||
|
|
||||||
|
namespace Orchard.Sandbox.Controllers {
|
||||||
|
[UsedImplicitly]
|
||||||
|
public class SandboxPageDriver : ItemDriver<SandboxPage> {
|
||||||
|
public SandboxPageDriver()
|
||||||
|
: base(SandboxPage.ContentType) {
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override string GetDisplayText(SandboxPage item) {
|
||||||
|
return item.Record.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override RouteValueDictionary GetDisplayRouteValues(SandboxPage item) {
|
||||||
|
return new RouteValueDictionary(
|
||||||
|
new {
|
||||||
|
area = "Orchard.Sandbox",
|
||||||
|
controller = "Page",
|
||||||
|
action = "Show",
|
||||||
|
id = item.ContentItem.Id,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override RouteValueDictionary GetEditorRouteValues(SandboxPage item) {
|
||||||
|
return new RouteValueDictionary(
|
||||||
|
new {
|
||||||
|
area = "Orchard.Sandbox",
|
||||||
|
controller = "Page",
|
||||||
|
action = "Edit",
|
||||||
|
id = item.ContentItem.Id,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override DriverResult Display(SandboxPage part, string displayType) {
|
||||||
|
return Combined(
|
||||||
|
ItemTemplate("Items/Sandbox.Page").LongestMatch(displayType, "Summary"),
|
||||||
|
PartTemplate(part, "Parts/Sandbox.Page.Title").Location("title"));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override DriverResult Editor(ItemEditorModel<SandboxPage> model) {
|
||||||
|
return ItemTemplate("Items/Sandbox.Page");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override DriverResult Editor(ItemEditorModel<SandboxPage> model, IUpdateModel updater) {
|
||||||
|
updater.TryUpdateModel(model, Prefix, null, null);
|
||||||
|
return ItemTemplate("Items/Sandbox.Page");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -1,12 +1,12 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Web.Routing;
|
using JetBrains.Annotations;
|
||||||
using Orchard.Core.Common.Models;
|
using Orchard.Core.Common.Models;
|
||||||
using Orchard.Data;
|
using Orchard.Data;
|
||||||
using Orchard.ContentManagement;
|
using Orchard.ContentManagement;
|
||||||
using Orchard.ContentManagement.Handlers;
|
using Orchard.ContentManagement.Handlers;
|
||||||
using Orchard.ContentManagement.ViewModels;
|
|
||||||
|
|
||||||
namespace Orchard.Sandbox.Models {
|
namespace Orchard.Sandbox.Models {
|
||||||
|
[UsedImplicitly]
|
||||||
public class SandboxContentHandler : ContentHandler {
|
public class SandboxContentHandler : ContentHandler {
|
||||||
public override IEnumerable<ContentType> GetContentTypes() {
|
public override IEnumerable<ContentType> GetContentTypes() {
|
||||||
return new[] { SandboxPage.ContentType };
|
return new[] { SandboxPage.ContentType };
|
||||||
@@ -22,30 +22,6 @@ namespace Orchard.Sandbox.Models {
|
|||||||
Filters.Add(new ActivatingFilter<RoutableAspect>(SandboxPage.ContentType.Name));
|
Filters.Add(new ActivatingFilter<RoutableAspect>(SandboxPage.ContentType.Name));
|
||||||
Filters.Add(new ActivatingFilter<BodyAspect>(SandboxPage.ContentType.Name));
|
Filters.Add(new ActivatingFilter<BodyAspect>(SandboxPage.ContentType.Name));
|
||||||
Filters.Add(new StorageFilter<SandboxPageRecord>(pageRepository) { AutomaticallyCreateMissingRecord = true });
|
Filters.Add(new StorageFilter<SandboxPageRecord>(pageRepository) { AutomaticallyCreateMissingRecord = true });
|
||||||
Filters.Add(new ContentItemTemplates<SandboxPage>("Items/Sandbox.Page", "Summary"));
|
|
||||||
|
|
||||||
OnGetItemMetadata<SandboxPage>((context, page) => {
|
|
||||||
context.Metadata.DisplayText = page.Record.Name;
|
|
||||||
context.Metadata.DisplayRouteValues =
|
|
||||||
new RouteValueDictionary(
|
|
||||||
new {
|
|
||||||
area = "Orchard.Sandbox",
|
|
||||||
controller = "Page",
|
|
||||||
action = "Show",
|
|
||||||
id = context.ContentItem.Id,
|
|
||||||
});
|
|
||||||
context.Metadata.EditorRouteValues =
|
|
||||||
new RouteValueDictionary(
|
|
||||||
new {
|
|
||||||
area = "Orchard.Sandbox",
|
|
||||||
controller = "Page",
|
|
||||||
action = "Edit",
|
|
||||||
id = context.ContentItem.Id,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
OnGetDisplayViewModel<SandboxPage>((context, page) =>
|
|
||||||
context.AddDisplay(new TemplateViewModel(page) { TemplateName = "Parts/Sandbox.Page.Title", ZoneName = "title" }));
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -63,6 +63,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Controllers\HomeController.cs" />
|
<Compile Include="Controllers\HomeController.cs" />
|
||||||
<Compile Include="Controllers\PageController.cs" />
|
<Compile Include="Controllers\PageController.cs" />
|
||||||
|
<Compile Include="Controllers\SandboxPageDriver.cs" />
|
||||||
<Compile Include="Models\SandboxPage.cs" />
|
<Compile Include="Models\SandboxPage.cs" />
|
||||||
<Compile Include="Models\SandboxContentHandler.cs" />
|
<Compile Include="Models\SandboxContentHandler.cs" />
|
||||||
<Compile Include="Models\SandboxPageRecord.cs" />
|
<Compile Include="Models\SandboxPageRecord.cs" />
|
||||||
|
@@ -0,0 +1,42 @@
|
|||||||
|
using System.Linq;
|
||||||
|
using JetBrains.Annotations;
|
||||||
|
using Orchard.ContentManagement;
|
||||||
|
using Orchard.ContentManagement.Drivers;
|
||||||
|
using Orchard.Tags.Helpers;
|
||||||
|
using Orchard.Tags.Models;
|
||||||
|
using Orchard.Tags.Services;
|
||||||
|
using Orchard.Tags.ViewModels;
|
||||||
|
|
||||||
|
namespace Orchard.Tags.Controllers {
|
||||||
|
|
||||||
|
[UsedImplicitly]
|
||||||
|
public class HasTagsDriver : PartDriver<HasTags> {
|
||||||
|
private readonly ITagService _tagService;
|
||||||
|
|
||||||
|
public HasTagsDriver(ITagService tagService) {
|
||||||
|
_tagService = tagService;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override DriverResult Display(HasTags part, string displayType) {
|
||||||
|
return PartTemplate(part, "Parts/Tags.ShowTags").Location("body:above");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override DriverResult Editor(HasTags part) {
|
||||||
|
var model = new EditTagsViewModel {
|
||||||
|
Tags = string.Join(", ", part.CurrentTags.Select((t, i) => t.TagName).ToArray())
|
||||||
|
};
|
||||||
|
return PartTemplate(model, "Parts/Tags.EditTags");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override DriverResult Editor(HasTags part, IUpdateModel updater) {
|
||||||
|
|
||||||
|
var model = new EditTagsViewModel();
|
||||||
|
updater.TryUpdateModel(model, Prefix, null, null);
|
||||||
|
|
||||||
|
var tagNames = TagHelpers.ParseCommaSeparatedTagNames(model.Tags);
|
||||||
|
_tagService.UpdateTagsForContentItem(part.ContentItem.Id, tagNames);
|
||||||
|
|
||||||
|
return PartTemplate(model, "Parts/Tags.EditTags");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
14
src/Orchard.Web/Packages/Orchard.Tags/Models/HasTags.cs
Normal file
14
src/Orchard.Web/Packages/Orchard.Tags/Models/HasTags.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using Orchard.ContentManagement;
|
||||||
|
|
||||||
|
namespace Orchard.Tags.Models {
|
||||||
|
public class HasTags : ContentPart {
|
||||||
|
public HasTags() {
|
||||||
|
AllTags = new List<Tag>();
|
||||||
|
CurrentTags = new List<Tag>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IList<Tag> AllTags { get; set; }
|
||||||
|
public IList<Tag> CurrentTags { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,36 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using JetBrains.Annotations;
|
||||||
|
using Orchard.Data;
|
||||||
|
using Orchard.ContentManagement;
|
||||||
|
using Orchard.ContentManagement.Handlers;
|
||||||
|
|
||||||
|
namespace Orchard.Tags.Models {
|
||||||
|
[UsedImplicitly]
|
||||||
|
public class HasTagsHandler : ContentHandler {
|
||||||
|
private readonly IRepository<Tag> _tagsRepository;
|
||||||
|
private readonly IRepository<TagsContentItems> _tagsContentItemsRepository;
|
||||||
|
|
||||||
|
public HasTagsHandler(IRepository<Tag> tagsRepository, IRepository<TagsContentItems> tagsContentItemsRepository) {
|
||||||
|
_tagsRepository = tagsRepository;
|
||||||
|
_tagsContentItemsRepository = tagsContentItemsRepository;
|
||||||
|
Filters.Add(new ActivatingFilter<HasTags>("sandboxpage"));
|
||||||
|
Filters.Add(new ActivatingFilter<HasTags>("blogpost"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected override void Loading(LoadContentContext context) {
|
||||||
|
if (context.ContentItem.Has<HasTags>() == false) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
HasTags tags = context.ContentItem.Get<HasTags>();
|
||||||
|
tags.AllTags = _tagsRepository.Table.ToList();
|
||||||
|
IEnumerable<TagsContentItems> tagsContentItems = _tagsContentItemsRepository.Fetch(x => x.ContentItemId == context.ContentItem.Id);
|
||||||
|
foreach (var tagContentItem in tagsContentItems) {
|
||||||
|
Tag tag = _tagsRepository.Get(tagContentItem.TagId);
|
||||||
|
tags.CurrentTags.Add(tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -1,77 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using Orchard.Data;
|
|
||||||
using Orchard.ContentManagement;
|
|
||||||
using Orchard.ContentManagement.Handlers;
|
|
||||||
using Orchard.ContentManagement.ViewModels;
|
|
||||||
using Orchard.Tags.Helpers;
|
|
||||||
using Orchard.Tags.Services;
|
|
||||||
|
|
||||||
namespace Orchard.Tags.Models {
|
|
||||||
public class HasTags : ContentPart {
|
|
||||||
public HasTags() {
|
|
||||||
AllTags = new List<Tag>();
|
|
||||||
CurrentTags = new List<Tag>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public IList<Tag> AllTags { get; set; }
|
|
||||||
public IList<Tag> CurrentTags { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class HasTagsHandler : ContentHandler {
|
|
||||||
private readonly IRepository<Tag> _tagsRepository;
|
|
||||||
private readonly IRepository<TagsContentItems> _tagsContentItemsRepository;
|
|
||||||
private readonly ITagService _tagService;
|
|
||||||
|
|
||||||
public HasTagsHandler(IRepository<Tag> tagsRepository, IRepository<TagsContentItems> tagsContentItemsRepository, ITagService tagService) {
|
|
||||||
_tagsRepository = tagsRepository;
|
|
||||||
_tagsContentItemsRepository = tagsContentItemsRepository;
|
|
||||||
_tagService = tagService;
|
|
||||||
Filters.Add(new ActivatingFilter<HasTags>("sandboxpage"));
|
|
||||||
Filters.Add(new ActivatingFilter<HasTags>("blogpost"));
|
|
||||||
|
|
||||||
OnGetDisplayViewModel<HasTags>((context, hasTags) => {
|
|
||||||
context.AddDisplay(new TemplateViewModel(hasTags) { TemplateName = "Parts/Tags.HasTags", Position = "6" });
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void BuildEditorModel(BuildEditorModelContext context) {
|
|
||||||
if (context.ContentItem.Has<HasTags>() == false) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
context.AddEditor(new TemplateViewModel(context.ContentItem.Get<HasTags>()) { TemplateName = "Parts/Tags.HasTags", Position = "0" });
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void UpdateEditorModel(UpdateEditorModelContext context) {
|
|
||||||
if (context.ContentItem.Has<HasTags>() == false) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
TagsViewModel viewModel = new TagsViewModel();
|
|
||||||
context.Updater.TryUpdateModel(viewModel, String.Empty, null, null);
|
|
||||||
List<string> tagNames = TagHelpers.ParseCommaSeparatedTagNames(viewModel.Tags);
|
|
||||||
_tagService.UpdateTagsForContentItem(context.ContentItem.Id, tagNames);
|
|
||||||
|
|
||||||
context.AddEditor(new TemplateViewModel(context.ContentItem.Get<HasTags>()) { TemplateName = "Parts/Tags.HasTags" });
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void Loading(LoadContentContext context) {
|
|
||||||
if (context.ContentItem.Has<HasTags>() == false) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
HasTags tags = context.ContentItem.Get<HasTags>();
|
|
||||||
tags.AllTags = _tagsRepository.Table.ToList();
|
|
||||||
IEnumerable<TagsContentItems> tagsContentItems = _tagsContentItemsRepository.Fetch(x => x.ContentItemId == context.ContentItem.Id);
|
|
||||||
foreach (var tagContentItem in tagsContentItems) {
|
|
||||||
Tag tag = _tagsRepository.Get(tagContentItem.TagId);
|
|
||||||
tags.CurrentTags.Add(tag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class TagsViewModel {
|
|
||||||
public string Tags { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -63,11 +63,14 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="AdminMenu.cs" />
|
<Compile Include="AdminMenu.cs" />
|
||||||
<Compile Include="Controllers\AdminController.cs" />
|
<Compile Include="Controllers\AdminController.cs" />
|
||||||
|
<Compile Include="ViewModels\EditTagsViewModel.cs" />
|
||||||
<Compile Include="Controllers\HomeController.cs" />
|
<Compile Include="Controllers\HomeController.cs" />
|
||||||
|
<Compile Include="Controllers\HasTagsDriver.cs" />
|
||||||
<Compile Include="Helpers\TagHelpers.cs" />
|
<Compile Include="Helpers\TagHelpers.cs" />
|
||||||
|
<Compile Include="Models\HasTags.cs" />
|
||||||
<Compile Include="Models\Tag.cs" />
|
<Compile Include="Models\Tag.cs" />
|
||||||
<Compile Include="Models\TagSettings.cs" />
|
<Compile Include="Models\TagSettings.cs" />
|
||||||
<Compile Include="Models\TagsHandler.cs" />
|
<Compile Include="Models\HasTagsHandler.cs" />
|
||||||
<Compile Include="Permissions.cs" />
|
<Compile Include="Permissions.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="Routes.cs" />
|
<Compile Include="Routes.cs" />
|
||||||
@@ -87,8 +90,8 @@
|
|||||||
<Content Include="Views\Admin\Search.aspx" />
|
<Content Include="Views\Admin\Search.aspx" />
|
||||||
<Content Include="Views\Home\Index.aspx" />
|
<Content Include="Views\Home\Index.aspx" />
|
||||||
<Content Include="Views\Home\Search.aspx" />
|
<Content Include="Views\Home\Search.aspx" />
|
||||||
<Content Include="Views\DisplayTemplates\Parts\Tags.HasTags.ascx" />
|
<Content Include="Views\DisplayTemplates\Parts\Tags.ShowTags.ascx" />
|
||||||
<Content Include="Views\EditorTemplates\Parts\Tags.HasTags.ascx" />
|
<Content Include="Views\EditorTemplates\Parts\Tags.EditTags.ascx" />
|
||||||
<Content Include="Views\EditorTemplates\Parts\Tags.SiteSettings.ascx" />
|
<Content Include="Views\EditorTemplates\Parts\Tags.SiteSettings.ascx" />
|
||||||
<Content Include="Web.config" />
|
<Content Include="Web.config" />
|
||||||
<Content Include="Views\Web.config" />
|
<Content Include="Views\Web.config" />
|
||||||
|
@@ -0,0 +1,5 @@
|
|||||||
|
namespace Orchard.Tags.ViewModels {
|
||||||
|
public class EditTagsViewModel {
|
||||||
|
public string Tags { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,9 @@
|
|||||||
|
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<EditTagsViewModel>" %>
|
||||||
|
<%@ Import Namespace="Orchard.Tags.ViewModels" %>
|
||||||
|
<%@ Import Namespace="Orchard.Mvc.Html" %>
|
||||||
|
<%@ Import Namespace="Orchard.Tags.Models" %>
|
||||||
|
<fieldset>
|
||||||
|
<%=Html.LabelFor(m=>m.Tags) %>
|
||||||
|
<%=Html.EditorFor(m=>m.Tags) %>
|
||||||
|
</fieldset>
|
||||||
|
<%--<input class="large text" id="Tags" name="Tags" type="text" value="<%=Model.Tags %>" />--%>
|
@@ -1,8 +0,0 @@
|
|||||||
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<HasTags>" %>
|
|
||||||
<%@ Import Namespace="Orchard.Mvc.Html"%>
|
|
||||||
<%@ Import Namespace="Orchard.Tags.Models"%>
|
|
||||||
<formset>
|
|
||||||
<label for="Tags">Tags</label>
|
|
||||||
<input class="large text" id="Tags" name="Tags" type="text" value="<%=string.Join(", ", Model.CurrentTags.Select((t, i) => t.TagName).ToArray()) %>" />
|
|
||||||
</formset>
|
|
||||||
<%--<% Html.BeginForm("Update", "Home", new { area = "Orchard.Tags" }); %>--%>
|
|
@@ -8,14 +8,14 @@ namespace Orchard.ContentManagement.Drivers {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
protected override DriverResult Display(TPart part, string displayType) {
|
protected override DriverResult Display(TPart part, string displayType) {
|
||||||
return PartialView(part);
|
return PartTemplate(part);
|
||||||
}
|
}
|
||||||
protected override DriverResult Editor(TPart part) {
|
protected override DriverResult Editor(TPart part) {
|
||||||
return PartialView(part);
|
return PartTemplate(part);
|
||||||
}
|
}
|
||||||
protected override DriverResult Editor(TPart part, IUpdateModel updater) {
|
protected override DriverResult Editor(TPart part, IUpdateModel updater) {
|
||||||
updater.TryUpdateModel(part, Prefix, null, null);
|
updater.TryUpdateModel(part, Prefix, null, null);
|
||||||
return PartialView(part);
|
return PartTemplate(part);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -5,4 +5,4 @@ namespace Orchard.ContentManagement.Drivers {
|
|||||||
public virtual void Apply(BuildDisplayModelContext context) { }
|
public virtual void Apply(BuildDisplayModelContext context) { }
|
||||||
public virtual void Apply(BuildEditorModelContext context) { }
|
public virtual void Apply(BuildEditorModelContext context) { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,18 +1,37 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Web.Routing;
|
using System.Web.Routing;
|
||||||
using Orchard.ContentManagement.Handlers;
|
using Orchard.ContentManagement.Handlers;
|
||||||
|
using Orchard.ContentManagement.ViewModels;
|
||||||
|
|
||||||
namespace Orchard.ContentManagement.Drivers {
|
namespace Orchard.ContentManagement.Drivers {
|
||||||
public interface IItemDriver : IEvents {
|
public interface IItemDriver : IEvents {
|
||||||
|
IEnumerable<ContentType> GetContentTypes();
|
||||||
void GetItemMetadata(GetItemMetadataContext context);
|
void GetItemMetadata(GetItemMetadataContext context);
|
||||||
|
|
||||||
|
DriverResult BuildDisplayModel(BuildDisplayModelContext context);
|
||||||
|
DriverResult BuildEditorModel(BuildEditorModelContext context);
|
||||||
|
DriverResult UpdateEditorModel(UpdateEditorModelContext context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract class ItemDriver<TItemPart> : PartDriver<TItemPart>, IItemDriver where TItemPart : class, IContent {
|
public abstract class ItemDriver<TContent> : PartDriver<TContent>, IItemDriver where TContent : class, IContent {
|
||||||
public void GetItemMetadata(GetItemMetadataContext context) {
|
private ContentType _contentType;
|
||||||
var item = context.ContentItem.As<TItemPart>();
|
|
||||||
|
public ItemDriver() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemDriver(ContentType contentType) {
|
||||||
|
_contentType = contentType;
|
||||||
|
}
|
||||||
|
|
||||||
|
IEnumerable<ContentType> IItemDriver.GetContentTypes() {
|
||||||
|
var contentType = GetContentType();
|
||||||
|
return contentType != null ? new[] { contentType } : Enumerable.Empty<ContentType>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void IItemDriver.GetItemMetadata(GetItemMetadataContext context) {
|
||||||
|
var item = context.ContentItem.As<TContent>();
|
||||||
if (item != null) {
|
if (item != null) {
|
||||||
context.Metadata.DisplayText = GetDisplayText(item) ?? context.Metadata.DisplayText;
|
context.Metadata.DisplayText = GetDisplayText(item) ?? context.Metadata.DisplayText;
|
||||||
context.Metadata.DisplayRouteValues = GetDisplayRouteValues(item) ?? context.Metadata.DisplayRouteValues;
|
context.Metadata.DisplayRouteValues = GetDisplayRouteValues(item) ?? context.Metadata.DisplayRouteValues;
|
||||||
@@ -20,8 +39,51 @@ namespace Orchard.ContentManagement.Drivers {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual string GetDisplayText(TItemPart item) { return null; }
|
DriverResult IItemDriver.BuildDisplayModel(BuildDisplayModelContext context) {
|
||||||
protected virtual RouteValueDictionary GetDisplayRouteValues(TItemPart item) { return null; }
|
var part = context.ContentItem.As<TContent>();
|
||||||
protected virtual RouteValueDictionary GetEditorRouteValues(TItemPart item) { return null; }
|
if (part == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (context.DisplayModel.GetType() != typeof(ItemDisplayModel<TContent>)) {
|
||||||
|
return Display(new ItemDisplayModel<TContent>(context.DisplayModel), context.DisplayType);
|
||||||
|
}
|
||||||
|
return Display((ItemDisplayModel<TContent>)context.DisplayModel, context.DisplayType);
|
||||||
|
}
|
||||||
|
|
||||||
|
DriverResult IItemDriver.BuildEditorModel(BuildEditorModelContext context) {
|
||||||
|
var part = context.ContentItem.As<TContent>();
|
||||||
|
if (part == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (context.EditorModel.GetType() != typeof(ItemEditorModel<TContent>)) {
|
||||||
|
return Editor(new ItemEditorModel<TContent>(context.EditorModel));
|
||||||
|
}
|
||||||
|
return Editor((ItemEditorModel<TContent>)context.EditorModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
DriverResult IItemDriver.UpdateEditorModel(UpdateEditorModelContext context) {
|
||||||
|
var part = context.ContentItem.As<TContent>();
|
||||||
|
if (part == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (context.EditorModel.GetType() != typeof(ItemEditorModel<TContent>)) {
|
||||||
|
return Editor(new ItemEditorModel<TContent>(context.EditorModel), context.Updater);
|
||||||
|
}
|
||||||
|
return Editor((ItemEditorModel<TContent>)context.EditorModel, context.Updater);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual ContentType GetContentType() { return _contentType; }
|
||||||
|
protected virtual string GetDisplayText(TContent item) { return null; }
|
||||||
|
protected virtual RouteValueDictionary GetDisplayRouteValues(TContent item) { return null; }
|
||||||
|
protected virtual RouteValueDictionary GetEditorRouteValues(TContent item) { return null; }
|
||||||
|
|
||||||
|
protected virtual DriverResult Display(ItemDisplayModel<TContent> displayModel, string displayType) { return null; }
|
||||||
|
protected virtual DriverResult Editor(ItemEditorModel<TContent> editorModel) { return null; }
|
||||||
|
protected virtual DriverResult Editor(ItemEditorModel<TContent> editorModel, IUpdateModel updater) { return null; }
|
||||||
|
|
||||||
|
public ItemTemplateResult<TContent> ItemTemplate(string templateName) {
|
||||||
|
return new ItemTemplateResult<TContent>(templateName);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -18,8 +18,10 @@ namespace Orchard.ContentManagement.Drivers {
|
|||||||
|
|
||||||
public ILogger Logger { get; set; }
|
public ILogger Logger { get; set; }
|
||||||
|
|
||||||
System.Collections.Generic.IEnumerable<ContentType> IContentHandler.GetContentTypes() {
|
IEnumerable<ContentType> IContentHandler.GetContentTypes() {
|
||||||
return Enumerable.Empty<ContentType>();
|
var contentTypes = new List<ContentType>();
|
||||||
|
_drivers.Invoke(driver=>contentTypes.AddRange(driver.GetContentTypes()), Logger);
|
||||||
|
return contentTypes;
|
||||||
}
|
}
|
||||||
|
|
||||||
void IContentHandler.Activating(ActivatingContentContext context) { }
|
void IContentHandler.Activating(ActivatingContentContext context) { }
|
||||||
@@ -35,17 +37,32 @@ namespace Orchard.ContentManagement.Drivers {
|
|||||||
void IContentHandler.Loaded(LoadContentContext context) { }
|
void IContentHandler.Loaded(LoadContentContext context) { }
|
||||||
|
|
||||||
void IContentHandler.GetItemMetadata(GetItemMetadataContext context) {
|
void IContentHandler.GetItemMetadata(GetItemMetadataContext context) {
|
||||||
|
_drivers.Invoke(driver => driver.GetItemMetadata(context), Logger);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IContentHandler.BuildDisplayModel(BuildDisplayModelContext context) {
|
||||||
_drivers.Invoke(driver => {
|
_drivers.Invoke(driver => {
|
||||||
driver.GetItemMetadata(context);
|
var result = driver.BuildDisplayModel(context);
|
||||||
|
if (result != null)
|
||||||
|
result.Apply(context);
|
||||||
}, Logger);
|
}, Logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IContentHandler.BuildDisplayModel(BuildDisplayModelContext context) { }
|
void IContentHandler.BuildEditorModel(BuildEditorModelContext context) {
|
||||||
|
_drivers.Invoke(driver => {
|
||||||
void IContentHandler.BuildEditorModel(BuildEditorModelContext context) { }
|
var result = driver.BuildEditorModel(context);
|
||||||
|
if (result != null)
|
||||||
void IContentHandler.UpdateEditorModel(UpdateEditorModelContext context) { }
|
result.Apply(context);
|
||||||
|
}, Logger);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IContentHandler.UpdateEditorModel(UpdateEditorModelContext context) {
|
||||||
|
_drivers.Invoke(driver => {
|
||||||
|
var result = driver.UpdateEditorModel(context);
|
||||||
|
if (result != null)
|
||||||
|
result.Apply(context);
|
||||||
|
}, Logger);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
61
src/Orchard/ContentManagement/Drivers/ItemTemplateResult.cs
Normal file
61
src/Orchard/ContentManagement/Drivers/ItemTemplateResult.cs
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Web.Mvc;
|
||||||
|
using Orchard.ContentManagement.Handlers;
|
||||||
|
using Orchard.ContentManagement.ViewModels;
|
||||||
|
|
||||||
|
namespace Orchard.ContentManagement.Drivers {
|
||||||
|
public class ItemTemplateResult<TContent> : DriverResult where TContent : class, IContent {
|
||||||
|
public ItemTemplateResult(string templateName) {
|
||||||
|
TemplateName = templateName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string TemplateName { get; set; }
|
||||||
|
|
||||||
|
public override void Apply(BuildDisplayModelContext context) {
|
||||||
|
context.DisplayModel.TemplateName = TemplateName;
|
||||||
|
if (context.DisplayModel.GetType() != typeof(ItemDisplayModel<TContent>)) {
|
||||||
|
context.DisplayModel.Adaptor = (html, viewModel) => {
|
||||||
|
return new HtmlHelper<ItemDisplayModel<TContent>>(
|
||||||
|
html.ViewContext,
|
||||||
|
new ViewDataContainer { ViewData = new ViewDataDictionary(new ItemDisplayModel<TContent>(viewModel)) },
|
||||||
|
html.RouteCollection);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Apply(BuildEditorModelContext context) {
|
||||||
|
context.EditorModel.TemplateName = TemplateName;
|
||||||
|
if (context.EditorModel.GetType() != typeof(ItemEditorModel<TContent>)) {
|
||||||
|
context.EditorModel.Adaptor = (html, viewModel) => {
|
||||||
|
return new HtmlHelper<ItemEditorModel<TContent>>(
|
||||||
|
html.ViewContext,
|
||||||
|
new ViewDataContainer { ViewData = new ViewDataDictionary(new ItemEditorModel<TContent>(viewModel)) },
|
||||||
|
html.RouteCollection);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class ViewDataContainer : IViewDataContainer {
|
||||||
|
public ViewDataDictionary ViewData { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemTemplateResult<TContent> LongestMatch(string displayType, params string[] knownDisplayTypes) {
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(displayType))
|
||||||
|
return this;
|
||||||
|
|
||||||
|
var longest = knownDisplayTypes.Aggregate("", (best, x) => {
|
||||||
|
if (displayType.StartsWith(x) && x.Length > best.Length) return x;
|
||||||
|
return best;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(longest))
|
||||||
|
return this;
|
||||||
|
|
||||||
|
TemplateName += "." + longest;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -8,39 +8,39 @@ namespace Orchard.ContentManagement.Drivers {
|
|||||||
DriverResult UpdateEditorModel(UpdateEditorModelContext context);
|
DriverResult UpdateEditorModel(UpdateEditorModelContext context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract class PartDriver<TPart> : IPartDriver where TPart : class, IContent {
|
public abstract class PartDriver<TContent> : IPartDriver where TContent : class, IContent {
|
||||||
|
|
||||||
protected virtual string Prefix { get { return ""; } }
|
protected virtual string Prefix { get { return ""; } }
|
||||||
protected virtual string Zone { get { return "body"; } }
|
protected virtual string Zone { get { return "body"; } }
|
||||||
|
|
||||||
DriverResult IPartDriver.BuildDisplayModel(BuildDisplayModelContext context) {
|
DriverResult IPartDriver.BuildDisplayModel(BuildDisplayModelContext context) {
|
||||||
var part = context.ContentItem.As<TPart>();
|
var part = context.ContentItem.As<TContent>();
|
||||||
return part == null ? null : Display(part, context.DisplayType);
|
return part == null ? null : Display(part, context.DisplayType);
|
||||||
}
|
}
|
||||||
|
|
||||||
DriverResult IPartDriver.BuildEditorModel(BuildEditorModelContext context) {
|
DriverResult IPartDriver.BuildEditorModel(BuildEditorModelContext context) {
|
||||||
var part = context.ContentItem.As<TPart>();
|
var part = context.ContentItem.As<TContent>();
|
||||||
return part == null ? null : Editor(part);
|
return part == null ? null : Editor(part);
|
||||||
}
|
}
|
||||||
|
|
||||||
DriverResult IPartDriver.UpdateEditorModel(UpdateEditorModelContext context) {
|
DriverResult IPartDriver.UpdateEditorModel(UpdateEditorModelContext context) {
|
||||||
var part = context.ContentItem.As<TPart>();
|
var part = context.ContentItem.As<TContent>();
|
||||||
return part == null ? null : Editor(part, context.Updater);
|
return part == null ? null : Editor(part, context.Updater);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual DriverResult Display(TPart part, string displayType) {return null;}
|
protected virtual DriverResult Display(TContent part, string displayType) {return null;}
|
||||||
protected virtual DriverResult Editor(TPart part) {return null;}
|
protected virtual DriverResult Editor(TContent part) {return null;}
|
||||||
protected virtual DriverResult Editor(TPart part, IUpdateModel updater) {return null;}
|
protected virtual DriverResult Editor(TContent part, IUpdateModel updater) {return null;}
|
||||||
|
|
||||||
|
|
||||||
public TemplateResult PartialView(object model) {
|
public PartTemplateResult PartTemplate(object model) {
|
||||||
return new TemplateResult(model, null, Prefix).Location(Zone);
|
return new PartTemplateResult(model, null, Prefix).Location(Zone);
|
||||||
}
|
}
|
||||||
public TemplateResult PartialView(object model, string template) {
|
public PartTemplateResult PartTemplate(object model, string template) {
|
||||||
return new TemplateResult(model, template, Prefix).Location(Zone);
|
return new PartTemplateResult(model, template, Prefix).Location(Zone);
|
||||||
}
|
}
|
||||||
public TemplateResult PartialView(object model, string template, string prefix) {
|
public PartTemplateResult PartTemplate(object model, string template, string prefix) {
|
||||||
return new TemplateResult(model, template, prefix).Location(Zone);
|
return new PartTemplateResult(model, template, prefix).Location(Zone);
|
||||||
}
|
}
|
||||||
public CombinedResult Combined(params DriverResult[] results) {
|
public CombinedResult Combined(params DriverResult[] results) {
|
||||||
return new CombinedResult(results);
|
return new CombinedResult(results);
|
||||||
|
@@ -2,14 +2,14 @@ using Orchard.ContentManagement.Handlers;
|
|||||||
using Orchard.ContentManagement.ViewModels;
|
using Orchard.ContentManagement.ViewModels;
|
||||||
|
|
||||||
namespace Orchard.ContentManagement.Drivers {
|
namespace Orchard.ContentManagement.Drivers {
|
||||||
public class TemplateResult : DriverResult {
|
public class PartTemplateResult : DriverResult {
|
||||||
public object Model { get; set; }
|
public object Model { get; set; }
|
||||||
public string TemplateName { get; set; }
|
public string TemplateName { get; set; }
|
||||||
public string Prefix { get; set; }
|
public string Prefix { get; set; }
|
||||||
public string Zone { get; set; }
|
public string Zone { get; set; }
|
||||||
public string Position { get; set; }
|
public string Position { get; set; }
|
||||||
|
|
||||||
public TemplateResult(object model, string templateName, string prefix) {
|
public PartTemplateResult(object model, string templateName, string prefix) {
|
||||||
Model = model;
|
Model = model;
|
||||||
TemplateName = templateName;
|
TemplateName = templateName;
|
||||||
Prefix = prefix;
|
Prefix = prefix;
|
||||||
@@ -31,12 +31,12 @@ namespace Orchard.ContentManagement.Drivers {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public TemplateResult Location(string zone) {
|
public PartTemplateResult Location(string zone) {
|
||||||
Zone = zone;
|
Zone = zone;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TemplateResult Location(string zone, string position) {
|
public PartTemplateResult Location(string zone, string position) {
|
||||||
Zone = zone;
|
Zone = zone;
|
||||||
Position = position;
|
Position = position;
|
||||||
return this;
|
return this;
|
@@ -43,6 +43,7 @@ namespace Orchard.ContentManagement.ViewModels {
|
|||||||
public ItemDisplayModel() {
|
public ItemDisplayModel() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemDisplayModel(ItemDisplayModel displayModel)
|
public ItemDisplayModel(ItemDisplayModel displayModel)
|
||||||
: base(displayModel) {
|
: base(displayModel) {
|
||||||
}
|
}
|
||||||
|
@@ -137,8 +137,9 @@
|
|||||||
<Compile Include="ContentManagement\Drivers\DriverResult.cs" />
|
<Compile Include="ContentManagement\Drivers\DriverResult.cs" />
|
||||||
<Compile Include="ContentManagement\Drivers\ItemDriver.cs" />
|
<Compile Include="ContentManagement\Drivers\ItemDriver.cs" />
|
||||||
<Compile Include="ContentManagement\Drivers\ItemDriverHandler.cs" />
|
<Compile Include="ContentManagement\Drivers\ItemDriverHandler.cs" />
|
||||||
|
<Compile Include="ContentManagement\Drivers\ItemTemplateResult.cs" />
|
||||||
<Compile Include="ContentManagement\Drivers\PartDriverHandler.cs" />
|
<Compile Include="ContentManagement\Drivers\PartDriverHandler.cs" />
|
||||||
<Compile Include="ContentManagement\Drivers\TemplateResult.cs" />
|
<Compile Include="ContentManagement\Drivers\PartTemplateResult.cs" />
|
||||||
<Compile Include="ContentManagement\Handlers\ActivatedContentContext.cs" />
|
<Compile Include="ContentManagement\Handlers\ActivatedContentContext.cs" />
|
||||||
<Compile Include="ContentManagement\Handlers\ActivatingContentContext.cs" />
|
<Compile Include="ContentManagement\Handlers\ActivatingContentContext.cs" />
|
||||||
<Compile Include="ContentManagement\Handlers\ActivatingFilter.cs" />
|
<Compile Include="ContentManagement\Handlers\ActivatingFilter.cs" />
|
||||||
|
Reference in New Issue
Block a user