mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-14 19:04:51 +08:00
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:
@@ -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)
|
||||
|
@@ -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>
|
||||
}
|
||||
|
@@ -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) {
|
||||
|
@@ -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" />
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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(),
|
||||
|
@@ -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
|
||||
|
65
src/Orchard.Web/Themes/TheAdmin/Views/Pager.cshtml
Normal file
65
src/Orchard.Web/Themes/TheAdmin/Views/Pager.cshtml
Normal 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
|
||||
}
|
@@ -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.
|
||||
|
@@ -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>();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user