A bit more work to get paging wrapped up including a Pager template overide for TheAdmin to use a number pager (e.g. < 1 2 3 >)

--HG--
branch : dev
This commit is contained in:
Nathan Heskew
2010-11-02 14:55:01 -07:00
parent e0352aa87d
commit dee8955019
12 changed files with 107 additions and 27 deletions

View File

@@ -77,19 +77,17 @@ namespace Orchard.Core.Contents.Controllers {
break;
}
var pageOfContentItems = query.Slice(pager.GetStartIndex(), pager.PageSize).ToList();
model.Options.SelectedFilter = model.TypeName;
model.Options.FilterOptions = GetCreatableTypes()
.Select(ctd => new KeyValuePair<string, string>(ctd.Name, ctd.DisplayName))
.ToList().OrderBy(kvp => kvp.Key);
var pagerShape = Shape.Pager(pager).TotalItemCount(query.Count());
var pageOfContentItems = query.Slice(pager.GetStartIndex(), pager.PageSize).ToList();
var list = Shape.List();
list.AddRange(pageOfContentItems.Select(ci => _contentManager.BuildDisplay(ci, "SummaryAdmin")));
var pagerShape = Shape.Pager(pager).TotalItemCount(query.Count());
var viewModel = Shape.ViewModel()
.ContentItems(list)
.Pager(pagerShape)

View File

@@ -6,7 +6,7 @@
var queryString = ViewContext.HttpContext.Request.QueryString;
if (queryString != null) {
foreach (string key in queryString.Keys) {
if (!routeData.ContainsKey(key)) {
if (key != null && !routeData.ContainsKey(key)) {
var value = queryString[key];
routeData[key] = queryString[key];
}
@@ -27,13 +27,13 @@
@tag.StartElement
if(hasNextPage) {
routeData["page"] = Model.Page + 1;
<li class="older">
<li class="page-next">
@Html.ActionLink((string)nextText, (string)routeData["action"], (string)routeData["controller"], routeData, null)
</li>
}
if(Model.Page > 1) {
routeData["page"] = Model.Page - 1;
<li class="newer">
<li class="page-previous">
@Html.ActionLink((string)previousText, (string)routeData["action"], (string)routeData["controller"], routeData, null)
</li>
}

View File

@@ -10,6 +10,7 @@ using Orchard.Data;
using Orchard.DisplayManagement;
using Orchard.Localization;
using Orchard.UI.Admin;
using Orchard.UI.Navigation;
using Orchard.UI.Notify;
namespace Orchard.Blogs.Controllers {
@@ -27,7 +28,8 @@ namespace Orchard.Blogs.Controllers {
IBlogPostService blogPostService,
IContentManager contentManager,
ITransactionManager transactionManager,
IBlogSlugConstraint blogSlugConstraint) {
IBlogSlugConstraint blogSlugConstraint,
IShapeFactory shapeFactory) {
Services = services;
_blogService = blogService;
_blogPostService = blogPostService;
@@ -35,8 +37,10 @@ namespace Orchard.Blogs.Controllers {
_transactionManager = transactionManager;
_blogSlugConstraint = blogSlugConstraint;
T = NullLocalizer.Instance;
Shape = shapeFactory;
}
dynamic Shape { get; set; }
public Localizer T { get; set; }
public IOrchardServices Services { get; set; }
@@ -135,20 +139,25 @@ namespace Orchard.Blogs.Controllers {
return View(viewModel);
}
public ActionResult Item(string blogSlug) {
public ActionResult Item(string blogSlug, Pager pager) {
BlogPart blogPart = _blogService.Get(blogSlug);
if (blogPart == null)
return HttpNotFound();
//() => {
// var list = shapeHelper.List();
// list.AddRange(_blogPostService.Get(part, VersionOptions.Latest)
// .Select(bp => _contentManager.BuildDisplay(bp, "SummaryAdmin")));
// return shapeHelper.Parts_Blogs_BlogPost_List_Admin(ContentPart: part, ContentItems: list);
//})
var model = Services.ContentManager.BuildDisplay(blogPart, "DetailAdmin");
return View(model);
var blogPosts = _blogPostService.Get(blogPart, pager.GetStartIndex(), pager.PageSize, VersionOptions.Latest)
.Select(bp => _contentManager.BuildDisplay(bp, "SummaryAdmin"));
var blog = Services.ContentManager.BuildDisplay(blogPart, "DetailAdmin");
var list = Shape.List();
list.AddRange(blogPosts);
blog.Content.Add(Shape.Parts_Blogs_BlogPost_ListAdmin(ContentItems: list), "5");
var totalItemCount = _blogPostService.PostCount(blogPart, VersionOptions.Latest);
blog.Content.Add(Shape.Pager(pager).TotalItemCount(totalItemCount), "Content:after");
return View(blog);
}
bool IUpdateModel.TryUpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) {

View File

@@ -131,7 +131,7 @@
<Content Include="Views\Parts\Blogs.Blog.Manage.cshtml" />
<Content Include="Views\Parts\Blogs.Blog.Description.cshtml" />
<Content Include="Views\EditorTemplates\Parts\Blogs.Blog.Fields.cshtml" />
<Content Include="Views\Parts\Blogs.BlogPost.List.Admin.cshtml">
<Content Include="Views\Parts\Blogs.BlogPost.ListAdmin.cshtml">
<SubType>Code</SubType>
</Content>
<Content Include="Views\Items\Content-Blog.SummaryAdmin.cshtml" />

View File

@@ -49,18 +49,22 @@ namespace Orchard.Blogs.Services {
return GetBlogQuery(blogPart, versionOptions).List().Select(ci => ci.As<BlogPostPart>());
}
public int PostCount(BlogPart blogPart, VersionOptions versionOptions) {
return GetBlogQuery(blogPart, versionOptions).Count();
public IEnumerable<BlogPostPart> Get(BlogPart blogPart, int skip, int count) {
return Get(blogPart, skip, count, VersionOptions.Published);
}
public IEnumerable<BlogPostPart> Get(BlogPart blogPart, int skip, int count) {
return GetBlogQuery(blogPart, VersionOptions.Published).Slice(skip, count).ToList().Select(ci => ci.As<BlogPostPart>());
public IEnumerable<BlogPostPart> Get(BlogPart blogPart, int skip, int count, VersionOptions versionOptions) {
return GetBlogQuery(blogPart, versionOptions).Slice(skip, count).ToList().Select(ci => ci.As<BlogPostPart>());
}
public int PostCount(BlogPart blogPart) {
return PostCount(blogPart, VersionOptions.Published);
}
public int PostCount(BlogPart blogPart, VersionOptions versionOptions) {
return GetBlogQuery(blogPart, versionOptions).Count();
}
public IEnumerable<BlogPostPart> Get(BlogPart blogPart, ArchiveData archiveData) {
var query = GetBlogQuery(blogPart, VersionOptions.Published);

View File

@@ -13,6 +13,7 @@ namespace Orchard.Blogs.Services {
IEnumerable<BlogPostPart> Get(BlogPart blogPart, VersionOptions versionOptions);
IEnumerable<BlogPostPart> Get(BlogPart blogPart, ArchiveData archiveData);
IEnumerable<BlogPostPart> Get(BlogPart blogPart, int skip, int count);
IEnumerable<BlogPostPart> Get(BlogPart blogPart, int skip, int count, VersionOptions versionOptions);
int PostCount(BlogPart blogPart);
int PostCount(BlogPart blogPart, VersionOptions versionOptions);
IEnumerable<KeyValuePair<ArchiveData, int>> GetArchives(BlogPart blogPart);

View File

@@ -63,9 +63,8 @@ namespace Orchard.Comments.Controllers {
throw new ArgumentOutOfRangeException();
}
var entries = comments.Slice(pager.GetStartIndex(), pager.PageSize).ToList().Select(comment => CreateCommentEntry(comment.Record));
var pagerShape = Shape.Pager(pager).TotalItemCount(comments.Count());
var entries = comments.Slice(pager.GetStartIndex(), pager.PageSize).ToList().Select(comment => CreateCommentEntry(comment.Record));
var model = new CommentsIndexViewModel {
Comments = entries.ToList(),

View File

@@ -803,8 +803,9 @@ table .button {
.pager { list-style: none; padding: 0; margin: 12px 0 0 0; }
.pager li { float: left; padding: 0 12px 0 0; margin: 0; }
.pager a { font-size: 1.077em; display: block; background-color: whiteSmoke; padding: 6px 6px; color: #333;}
.pager a, .pager span { font-size: 1.077em; display: block; background-color: whiteSmoke; padding: 6px 6px; color: #333;}
.pager a:hover { background-color: #eaeaea; color: #333; }
.pager span { background-color:inherit; }
/* Core Modules

View File

@@ -0,0 +1,65 @@
@{
var nextText = HasText(Model.NextText) ? Model.NextText : T(">").Text;
var previousText = HasText(Model.PreviousText) ? Model.PreviousText : T("<").Text;
var routeData = new RouteValueDictionary(ViewContext.RouteData.Values);
var queryString = ViewContext.HttpContext.Request.QueryString;
if (queryString != null) {
foreach (string key in queryString.Keys) {
if (key != null && !routeData.ContainsKey(key)) {
var value = queryString[key];
routeData[key] = queryString[key];
}
}
}
if (routeData.ContainsKey("id") && !HasText(routeData["id"])) {
routeData.Remove("id");
}
var totalPageCount = (int) Math.Ceiling((double) Model.TotalItemCount / Model.PageSize);
Model.Classes.Add("pager");
Model.Classes.Add("group");
var tag = Tag(Model, "ul");
}
@if (totalPageCount > 1) {
@tag.StartElement
// previous page
if(Model.Page > 1) {
if (Model.Page == 2 && routeData.ContainsKey("page")) {
routeData.Remove("page");
}
else {
routeData["page"] = Model.Page - 1;
}
<li class="page-previous">
@Html.ActionLink((string)previousText, (string)routeData["action"], (string)routeData["controller"], routeData, null)
</li>
}
// page numbers
for (var p = 1; p <= totalPageCount; p++) {
<li class="page-@p">
@if (p == Model.Page) {
<span>@p</span>
}
else {
if (p == 1) {
routeData.Remove("page");
}
else {
routeData["page"] = p;
}
@Html.ActionLink(p.ToString(), (string)routeData["action"], (string)routeData["controller"], routeData, null)
}
</li>
}
// next page
if(Model.Page < totalPageCount) {
routeData["page"] = Model.Page + 1;
<li class="page-next">
@Html.ActionLink((string)nextText, (string)routeData["action"], (string)routeData["controller"], routeData, null)
</li>
}
@tag.EndElement
}

View File

@@ -93,7 +93,9 @@
<Content Include="TheAdmin\Views\Header.cshtml" />
<Content Include="TheThemeMachine\Views\Layout.cshtml" />
</ItemGroup>
<ItemGroup />
<ItemGroup>
<Content Include="TheAdmin\Views\Pager.cshtml" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.

View File

@@ -196,7 +196,8 @@ namespace Orchard.ContentManagement {
}
int IContentQuery<T>.Count() {
var criteria = _query.BindItemVersionCriteria();
var criteria = (ICriteria)_query.BindItemVersionCriteria().Clone();
criteria.ClearOrders();
return criteria.SetProjection( Projections.RowCount() ).UniqueResult<Int32>();
}