diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/BlogPostController.cs b/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/BlogPostController.cs index 004ee86a5..2d695bb28 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/BlogPostController.cs +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/BlogPostController.cs @@ -42,7 +42,7 @@ namespace Orchard.Blogs.Controllers { if (post == null) return new NotFoundResult(); - return View(post); + return View(new BlogPostViewModel {Blog = blog, Post = post}); } public ActionResult Create(string blogSlug) diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Models/BlogPost.cs b/src/Orchard.Web/Packages/Orchard.Blogs/Models/BlogPost.cs index 6e73c7812..fae442b68 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Models/BlogPost.cs +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Models/BlogPost.cs @@ -1,9 +1,15 @@ using System; +using Orchard.Core.Common.Models; using Orchard.Models; +using Orchard.Security; namespace Orchard.Blogs.Models { public class BlogPost : ContentPart { - public Blog Blog { get; set; } + //public Blog Blog { get; set; } + public string Title { get { return this.As().Title; } } + public string Body { get { return this.As().Body; } } + public string Slug { get { return this.As().Slug; } } + public IUser Creator { get { return this.As().OwnerField.Value; } } public DateTime? Published { get { return Record.Published; } } } } \ No newline at end of file diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Models/BlogPostProvider.cs b/src/Orchard.Web/Packages/Orchard.Blogs/Models/BlogPostProvider.cs index 1a25a5349..78ac30119 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Models/BlogPostProvider.cs +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Models/BlogPostProvider.cs @@ -11,7 +11,7 @@ namespace Orchard.Blogs.Models { Filters.Add(new ActivatingFilter("blogpost")); Filters.Add(new ActivatingFilter("blogpost")); Filters.Add(new StorageFilter(repository)); - AddOnLoaded((context, bp) => bp.Blog = contentManager.Get(context.ContentItem.Id)); + //AddOnLoaded((context, bp) => bp.Blog = contentManager.Get(context.ContentItem.Id)); } } } \ No newline at end of file diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Orchard.Blogs.csproj b/src/Orchard.Web/Packages/Orchard.Blogs/Orchard.Blogs.csproj index 0a824eb83..bca24f89a 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Orchard.Blogs.csproj +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Orchard.Blogs.csproj @@ -88,6 +88,7 @@ + @@ -95,6 +96,7 @@ + diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Routes.cs b/src/Orchard.Web/Packages/Orchard.Blogs/Routes.cs index 48a96108e..6f1466d76 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Routes.cs +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Routes.cs @@ -97,6 +97,22 @@ namespace Orchard.Blogs { }, new MvcRouteHandler()) }, + new RouteDescriptor { + Route = new Route( + "{blogSlug}/{postSlug}", + new RouteValueDictionary { + {"area", "Orchard.Blogs"}, + {"controller", "BlogPost"}, + {"action", "Item"} + }, + new RouteValueDictionary { + {"blogSlug", new IsBlogConstraint(_blogService)} + }, + new RouteValueDictionary { + {"area", "Orchard.Blogs"} + }, + new MvcRouteHandler()) + }, new RouteDescriptor { Route = new Route( "{blogSlug}", diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Services/BlogPostService.cs b/src/Orchard.Web/Packages/Orchard.Blogs/Services/BlogPostService.cs index 55c039dd5..864e5b77c 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Services/BlogPostService.cs +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Services/BlogPostService.cs @@ -21,7 +21,7 @@ namespace Orchard.Blogs.Services { _routableRepository.Get(r => r.ContentItem.ContentType.Name == "blogpost" && r.Slug == slug); BlogPost blogPost = record != null ? _contentManager.Get(record.Id) : null; - return blogPost != null && blogPost.Blog.ContentItem.Id == blog.ContentItem.Id ? blogPost : null; + return blogPost != null && blogPost.Record.Blog.Id == blog.ContentItem.Id ? blogPost : null; } public IEnumerable Get(Blog blog) { @@ -30,10 +30,10 @@ namespace Orchard.Blogs.Services { _routableRepository.Fetch(rr => rr.ContentItem.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 manually here + //TODO: (erikpo) Need to filter by blog in the line above instead of filtering here return records.Select(r => _contentManager.Get(r.Id).As()).Where( - bp => bp.Blog.ContentItem.Id == blog.ContentItem.Id); + bp => bp.Record.Blog.Id == blog.ContentItem.Id); } public BlogPost Create(CreateBlogPostParams parameters) { diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/ViewModels/BlogPostViewModel.cs b/src/Orchard.Web/Packages/Orchard.Blogs/ViewModels/BlogPostViewModel.cs new file mode 100644 index 000000000..ddae28580 --- /dev/null +++ b/src/Orchard.Web/Packages/Orchard.Blogs/ViewModels/BlogPostViewModel.cs @@ -0,0 +1,9 @@ +using Orchard.Blogs.Models; +using Orchard.Mvc.ViewModels; + +namespace Orchard.Blogs.ViewModels { + public class BlogPostViewModel : BaseViewModel { + public Blog Blog { get; set; } + public BlogPost Post { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Views/Blog/Item.aspx b/src/Orchard.Web/Packages/Orchard.Blogs/Views/Blog/Item.aspx index 0ea3045ec..b7553c9d1 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Views/Blog/Item.aspx +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Views/Blog/Item.aspx @@ -14,7 +14,7 @@ if (Model.Posts.Count() > 0) { %> <% } %> diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Views/BlogPost/Item.aspx b/src/Orchard.Web/Packages/Orchard.Blogs/Views/BlogPost/Item.aspx new file mode 100644 index 000000000..549fcce82 --- /dev/null +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Views/BlogPost/Item.aspx @@ -0,0 +1,15 @@ +<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %> +<%@ Import Namespace="Orchard.Core.Common.Models"%> +<%@ Import Namespace="Orchard.Models"%> +<%@ Import Namespace="Orchard.Blogs.Extensions"%> +<%@ Import Namespace="Orchard.Blogs.ViewModels"%> +<%@ Import Namespace="Orchard.Blogs.Models"%> +<%@ Import Namespace="Orchard.Mvc.Html"%> +<%@ Import Namespace="Orchard.Mvc.ViewModels"%> +<% Html.Include("Header"); %> +
+

<%=Html.Encode(Model.Post.Title) %>

+
Posted by <%=Html.Encode(Model.Post.Creator.UserName) %> on {M d yyyy h:mm tt}
+ <%=Model.Post.Body %> +
+<% Html.Include("Footer"); %> \ No newline at end of file diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Views/BlogPost/ListByBlog.aspx b/src/Orchard.Web/Packages/Orchard.Blogs/Views/BlogPost/ListByBlog.aspx index f6700b9cd..f6729d7db 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Views/BlogPost/ListByBlog.aspx +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Views/BlogPost/ListByBlog.aspx @@ -1,4 +1,5 @@ -<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage>" %> +<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %> +<%@ Import Namespace="Orchard.Blogs.ViewModels"%> <%@ Import Namespace="Orchard.Core.Common.Models"%> <%@ Import Namespace="Orchard.Models"%> <%@ Import Namespace="Orchard.Blogs.Extensions"%> @@ -9,10 +10,10 @@

Posts

<% //TODO: (erikpo) Replace this with an Html extension method of some sort (ListForModel?) - if (Model.Count() > 0) { %> + if (Model.Posts.Count() > 0) { %> <% } %>