mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-09-23 04:43:35 +08:00
Blog post create cleaned up.
--HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4043647
This commit is contained in:
@@ -3,5 +3,9 @@ using Orchard.Models;
|
||||
|
||||
namespace Orchard.Core.Common.Models {
|
||||
public class BodyAspect : ContentPart<BodyRecord> {
|
||||
public string Text {
|
||||
get { return Record.Text; }
|
||||
set { Record.Text = value; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -3,7 +3,13 @@ using Orchard.Models;
|
||||
|
||||
namespace Orchard.Core.Common.Models {
|
||||
public class RoutableAspect : ContentPart<RoutableRecord> {
|
||||
public string Title { get { return Record.Title; } }
|
||||
public string Slug { get { return Record.Slug; } }
|
||||
public string Title {
|
||||
get { return Record.Title; }
|
||||
set { Record.Title = value; }
|
||||
}
|
||||
public string Slug {
|
||||
get { return Record.Slug; }
|
||||
set { Record.Slug = value; }
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,8 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using Orchard.Core.Common.Models;
|
||||
using Orchard.Core.Common.Models;
|
||||
|
||||
namespace Orchard.Core.Common.ViewModels {
|
||||
public class BodyEditorViewModel {
|
||||
|
@@ -3,5 +3,7 @@
|
||||
<%@ Import Namespace="Orchard.Core.Common.Models" %>
|
||||
<%@ Import Namespace="Orchard.Core.Settings.ViewModels" %>
|
||||
<%@ Import Namespace="Orchard.Utility" %>
|
||||
<h3>Body</h3>
|
||||
<ul><li><%=Html.EditorFor(m=>m.Text, Model.TextEditorTemplate) %></li></ul>
|
||||
<fieldset>
|
||||
<label>Body</label>
|
||||
<%=Html.EditorFor(m=>m.Text, Model.TextEditorTemplate) %>
|
||||
</fieldset>
|
@@ -114,8 +114,9 @@ namespace Orchard.Blogs.Controllers {
|
||||
if (blog == null)
|
||||
return new NotFoundResult();
|
||||
|
||||
model.BlogPost = _contentManager.UpdateEditorViewModel(_contentManager.New<BlogPost>("blogpost"), null, this);
|
||||
model.BlogPost.Item.Blog = blog;
|
||||
BlogPost blogPost = _contentManager.New<BlogPost>("blogpost");
|
||||
blogPost.Blog = blog;
|
||||
model.BlogPost = _contentManager.UpdateEditorViewModel(blogPost, null, this);
|
||||
|
||||
if (!ModelState.IsValid)
|
||||
return View(model);
|
||||
|
@@ -9,32 +9,29 @@ namespace Orchard.Blogs.Models {
|
||||
public class BlogPost : ContentPart<BlogPostRecord> {
|
||||
public readonly static ContentType ContentType = new ContentType { Name = "blogpost", DisplayName = "Blog Post" };
|
||||
|
||||
public Blog Blog { get; set; }
|
||||
|
||||
[HiddenInput(DisplayValue = false)]
|
||||
public int Id { get { return ContentItem.Id; } }
|
||||
|
||||
[Required]
|
||||
public string Title {
|
||||
get { return this.As<RoutableAspect>().Title; }
|
||||
set { this.As<RoutableAspect>().Record.Title = value; }
|
||||
set { this.As<RoutableAspect>().Title = value; }
|
||||
}
|
||||
|
||||
[Required]
|
||||
public string Slug {
|
||||
get { return this.As<RoutableAspect>().Slug; }
|
||||
set { this.As<RoutableAspect>().Record.Slug = value; }
|
||||
set { this.As<RoutableAspect>().Slug = value; }
|
||||
}
|
||||
|
||||
[Required]
|
||||
public string Body {
|
||||
get { return this.As<BodyAspect>().Record.Text; }
|
||||
set { this.As<BodyAspect>().Record.Text = value; }
|
||||
public Blog Blog {
|
||||
get { return this.As<CommonAspect>().Container.As<Blog>(); }
|
||||
set { this.As<CommonAspect>().Container = value; }
|
||||
}
|
||||
|
||||
public IUser Creator {
|
||||
get { return this.As<CommonAspect>().OwnerField.Value; }
|
||||
set { this.As<CommonAspect>().Record.OwnerId = value.Id; }
|
||||
get { return this.As<CommonAspect>().Owner; }
|
||||
set { this.As<CommonAspect>().Owner = value; }
|
||||
}
|
||||
|
||||
public DateTime? Published
|
||||
|
@@ -26,8 +26,6 @@ namespace Orchard.Blogs.Models {
|
||||
Filters.Add(new StorageFilter<BlogPostRecord>(repository));
|
||||
Filters.Add(new ContentItemTemplates<BlogPost>("BlogPost", "Detail", "Summary", "SummaryAdmin"));
|
||||
|
||||
OnLoaded<BlogPost>((context, bp) => bp.Blog = contentManager.Get<Blog>(bp.Record.Blog.Id));
|
||||
|
||||
OnGetItemMetadata<BlogPost>((context, bp) => {
|
||||
context.Metadata.DisplayText = bp.Title;
|
||||
context.Metadata.DisplayRouteValues =
|
||||
|
@@ -3,7 +3,6 @@ using Orchard.Models.Records;
|
||||
|
||||
namespace Orchard.Blogs.Models {
|
||||
public class BlogPostRecord : ContentPartRecord {
|
||||
public virtual BlogRecord Blog { get; set; }
|
||||
public virtual DateTime? Published { get; set; }
|
||||
}
|
||||
}
|
@@ -9,32 +9,24 @@ namespace Orchard.Blogs.Services {
|
||||
public class BlogPostService : IBlogPostService {
|
||||
private readonly IContentManager _contentManager;
|
||||
private readonly IRepository<BlogPostRecord> _blogPostRepository;
|
||||
private readonly IRepository<RoutableRecord> _routableRepository;
|
||||
|
||||
public BlogPostService(IContentManager contentManager, IRepository<BlogPostRecord> blogPostRepository, IRepository<RoutableRecord> routableRepository) {
|
||||
public BlogPostService(IContentManager contentManager, IRepository<BlogPostRecord> blogPostRepository) {
|
||||
_contentManager = contentManager;
|
||||
_blogPostRepository = blogPostRepository;
|
||||
_routableRepository = routableRepository;
|
||||
}
|
||||
|
||||
public BlogPost Get(Blog blog, string slug) {
|
||||
RoutableRecord record =
|
||||
_routableRepository.Get(r => r.ContentItemRecord.ContentType.Name == "blogpost" && r.Slug == slug);
|
||||
BlogPost blogPost = record != null ? _contentManager.Get<BlogPost>(record.Id) : null;
|
||||
|
||||
return blogPost != null && blogPost.Record.Blog.Id == blog.ContentItem.Id ? blogPost : null;
|
||||
return _contentManager.Query<BlogPost, BlogPostRecord >()
|
||||
.Join<RoutableRecord>().Where(x => x.Slug == slug)
|
||||
.Join<CommonRecord>().Where(x => x.Container == blog.Record.ContentItemRecord)
|
||||
.List().FirstOrDefault();
|
||||
}
|
||||
|
||||
public IEnumerable<BlogPost> Get(Blog blog) {
|
||||
//TODO: (erikpo) Figure out how to sort by published date
|
||||
IEnumerable<RoutableRecord> records =
|
||||
_routableRepository.Fetch(rr => rr.ContentItemRecord.ContentType.Name == "blogpost"
|
||||
/*, bpr => bpr.Asc(bpr2 => bpr2.Published.GetValueOrDefault(new DateTime(2099, 1, 1)))*/);
|
||||
|
||||
//TODO: (erikpo) Need to filter by blog in the line above instead of filtering here
|
||||
return
|
||||
records.Select(r => _contentManager.Get(r.Id).As<BlogPost>()).Where(
|
||||
bp => bp.Record.Blog.Id == blog.ContentItem.Id);
|
||||
return _contentManager.Query<BlogPost, BlogPostRecord>()
|
||||
.Join<CommonRecord>().Where(x => x.Container == blog.Record.ContentItemRecord)
|
||||
.OrderByDescending(x=>x.CreatedUtc)
|
||||
.List();
|
||||
}
|
||||
|
||||
public void Delete(BlogPost blogPost) {
|
||||
|
@@ -1,4 +1,6 @@
|
||||
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ItemDisplayViewModel<BlogPost>>" %>
|
||||
<%@ Import Namespace="Orchard.Models"%>
|
||||
<%@ Import Namespace="Orchard.Core.Common.Models"%>
|
||||
<%@ Import Namespace="Orchard.Models.ViewModels"%>
|
||||
<%@ Import Namespace="Orchard.Blogs.Extensions"%>
|
||||
<%@ Import Namespace="Orchard.Blogs.Models"%>
|
||||
@@ -7,4 +9,4 @@
|
||||
<%=Html.PublishedState(Model.Item) %>
|
||||
| <a href="#">?? comments</a>
|
||||
</div>
|
||||
<div class="content"><%=Model.Item.Body ?? "<p><em>there's no content for this blog post</em></p>" %></div>
|
||||
<div class="content"><%=Model.Item.As<BodyAspect>().Text ?? "<p><em>there's no content for this blog post</em></p>" %></div>
|
@@ -1,4 +1,6 @@
|
||||
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ItemDisplayViewModel<BlogPost>>" %>
|
||||
<%@ Import Namespace="Orchard.Models"%>
|
||||
<%@ Import Namespace="Orchard.Core.Common.Models"%>
|
||||
<%@ Import Namespace="Orchard.Models.ViewModels"%>
|
||||
<%@ Import Namespace="Orchard.Blogs.Extensions"%>
|
||||
<%@ Import Namespace="Orchard.Blogs.Models"%>
|
||||
@@ -7,7 +9,7 @@
|
||||
<%=Html.PublishedState(Model.Item) %>
|
||||
| <a href="#">?? comments</a>
|
||||
</div>
|
||||
<div class="content"><%=Model.Item.Body ?? "<p><em>there's no content for this blog post</em></p>"%></div>
|
||||
<div class="content"><%=Model.Item.As<BodyAspect>().Text ?? "<p><em>there's no content for this blog post</em></p>"%></div>
|
||||
<p class="actions">
|
||||
<%-- todo: (heskew) make into a ul --%>
|
||||
<span class="construct">
|
||||
|
@@ -12,13 +12,13 @@
|
||||
<fieldset>
|
||||
<label class="sub" for="permalink">Permalink<br /><span><%=Request.Url.ToRootString() %>/<%=Model.Blog.Slug %>/</span></label>
|
||||
<span><%=Html.TextBoxFor(m => m.Slug, new { id = "permalink", @class = "text" })%></span>
|
||||
</fieldset>
|
||||
</fieldset><%--
|
||||
<fieldset>
|
||||
<%--<label for="body">Excerpt</label>
|
||||
<span>[still needed]</span>-- %>
|
||||
<label for="body">Body</label>
|
||||
<span><%=Html.TextAreaFor(m => m.Body, new { id = "body", @class = "html" })%></span>
|
||||
</fieldset>
|
||||
</fieldset>--%>
|
||||
</div>
|
||||
<div class="secondary">
|
||||
<fieldset>
|
||||
|
@@ -1,11 +1,8 @@
|
||||
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %>
|
||||
<%@ Import Namespace="System.Web.Mvc.Html" %>
|
||||
|
||||
<script src="<%=ResolveUrl("~/Packages/TinyMce/scripts/tiny_mce.js") %>" type="text/javascript"></script>
|
||||
|
||||
<%=Html.TextArea("", Model, 25, 80, new {}) %>
|
||||
|
||||
<script type="text/javascript">
|
||||
<%-- todo: (heskew) need script include and init script to not be duplicated --%>
|
||||
<%--<script src="<%=ResolveUrl("~/Packages/TinyMce/scripts/tiny_mce.js") %>" type="text/javascript"></script>--%>
|
||||
<%=Html.TextArea("", Model, 25, 80, new { @class = "html" }) %>
|
||||
<%--<script type="text/javascript">
|
||||
tinyMCE.init({ theme: "advanced", mode: "textareas", plugins: "fullscreen,autoresize", theme_advanced_toolbar_location: "top", theme_advanced_toolbar_align: "left", theme_advanced_buttons3_add: "fullscreen" });
|
||||
</script>
|
||||
|
||||
</script>--%>
|
Reference in New Issue
Block a user