From f2300394e9d29c1634acd81332280fca820cd636 Mon Sep 17 00:00:00 2001 From: Nathan Heskew Date: Mon, 1 Nov 2010 00:37:23 -0700 Subject: [PATCH] Adding pagination to the Contents list admin page. --HG-- branch : dev --- .../Core/Contents/Controllers/AdminController.cs | 14 ++++++++------ .../Core/Contents/Views/Admin/List.cshtml | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Orchard.Web/Core/Contents/Controllers/AdminController.cs b/src/Orchard.Web/Core/Contents/Controllers/AdminController.cs index 1c38b9907..d9be03902 100644 --- a/src/Orchard.Web/Core/Contents/Controllers/AdminController.cs +++ b/src/Orchard.Web/Core/Contents/Controllers/AdminController.cs @@ -15,6 +15,7 @@ using Orchard.Data; using Orchard.DisplayManagement; using Orchard.Localization; using Orchard.Logging; +using Orchard.UI.Navigation; using Orchard.UI.Notify; namespace Orchard.Core.Contents.Controllers { @@ -44,13 +45,10 @@ namespace Orchard.Core.Contents.Controllers { public Localizer T { get; set; } public ILogger Logger { get; set; } - public ActionResult List(ListContentsViewModel model) { + public ActionResult List(ListContentsViewModel model, Pager pager) { if (model.ContainerId != null && _contentManager.GetLatest((int)model.ContainerId) == null) return HttpNotFound(); - const int pageSize = 20; - var skip = (Math.Max(model.Page ?? 0, 1) - 1) * pageSize; - var query = _contentManager.Query(VersionOptions.Latest, GetCreatableTypes().Select(ctd => ctd.Name).ToArray()); if (!string.IsNullOrEmpty(model.TypeName)) { @@ -104,7 +102,7 @@ namespace Orchard.Core.Contents.Controllers { //-- instead of this (having the ordering and skip/take after the query) - contentItems = contentItems.Skip(skip).Take(pageSize).ToList(); + var pageOfContentItems = contentItems.Skip(pager.GetStartIndex()).Take(pager.PageSize).ToList(); model.Options.SelectedFilter = model.TypeName; model.Options.FilterOptions = GetCreatableTypes() @@ -113,10 +111,14 @@ namespace Orchard.Core.Contents.Controllers { var list = Shape.List(); - list.AddRange(contentItems.Select(ci => _contentManager.BuildDisplay(ci, "SummaryAdmin"))); + list.AddRange(pageOfContentItems.Select(ci => _contentManager.BuildDisplay(ci, "SummaryAdmin"))); + + var hasNextPage = contentItems.Skip(pager.GetStartIndex(pager.Page + 1)).Any(); + var pagerShape = Shape.Pager(pager).HasNextPage(hasNextPage); var viewModel = Shape.ViewModel() .ContentItems(list) + .Pager(pagerShape) .Options(model.Options) .TypeDisplayName(model.TypeDisplayName ?? ""); diff --git a/src/Orchard.Web/Core/Contents/Views/Admin/List.cshtml b/src/Orchard.Web/Core/Contents/Views/Admin/List.cshtml index 7b357f372..8d0a06c0d 100644 --- a/src/Orchard.Web/Core/Contents/Views/Admin/List.cshtml +++ b/src/Orchard.Web/Core/Contents/Views/Admin/List.cshtml @@ -40,6 +40,6 @@
@Display(Model.ContentItems) -@Display(Model.ContentItems2)
+@Display(Model.Pager) } \ No newline at end of file