mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
var pageOfContentItems = query.Slice(pager.GetStartIndex(), pager.PageSize).ToList();
|
|
||||||
|
|
||||||
model.Options.SelectedFilter = model.TypeName;
|
model.Options.SelectedFilter = model.TypeName;
|
||||||
model.Options.FilterOptions = GetCreatableTypes()
|
model.Options.FilterOptions = GetCreatableTypes()
|
||||||
.Select(ctd => new KeyValuePair<string, string>(ctd.Name, ctd.DisplayName))
|
.Select(ctd => new KeyValuePair<string, string>(ctd.Name, ctd.DisplayName))
|
||||||
.ToList().OrderBy(kvp => kvp.Key);
|
.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();
|
var list = Shape.List();
|
||||||
list.AddRange(pageOfContentItems.Select(ci => _contentManager.BuildDisplay(ci, "SummaryAdmin")));
|
list.AddRange(pageOfContentItems.Select(ci => _contentManager.BuildDisplay(ci, "SummaryAdmin")));
|
||||||
|
|
||||||
var pagerShape = Shape.Pager(pager).TotalItemCount(query.Count());
|
|
||||||
|
|
||||||
var viewModel = Shape.ViewModel()
|
var viewModel = Shape.ViewModel()
|
||||||
.ContentItems(list)
|
.ContentItems(list)
|
||||||
.Pager(pagerShape)
|
.Pager(pagerShape)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
var queryString = ViewContext.HttpContext.Request.QueryString;
|
var queryString = ViewContext.HttpContext.Request.QueryString;
|
||||||
if (queryString != null) {
|
if (queryString != null) {
|
||||||
foreach (string key in queryString.Keys) {
|
foreach (string key in queryString.Keys) {
|
||||||
if (!routeData.ContainsKey(key)) {
|
if (key != null && !routeData.ContainsKey(key)) {
|
||||||
var value = queryString[key];
|
var value = queryString[key];
|
||||||
routeData[key] = queryString[key];
|
routeData[key] = queryString[key];
|
||||||
}
|
}
|
||||||
@@ -27,13 +27,13 @@
|
|||||||
@tag.StartElement
|
@tag.StartElement
|
||||||
if(hasNextPage) {
|
if(hasNextPage) {
|
||||||
routeData["page"] = Model.Page + 1;
|
routeData["page"] = Model.Page + 1;
|
||||||
<li class="older">
|
<li class="page-next">
|
||||||
@Html.ActionLink((string)nextText, (string)routeData["action"], (string)routeData["controller"], routeData, null)
|
@Html.ActionLink((string)nextText, (string)routeData["action"], (string)routeData["controller"], routeData, null)
|
||||||
</li>
|
</li>
|
||||||
}
|
}
|
||||||
if(Model.Page > 1) {
|
if(Model.Page > 1) {
|
||||||
routeData["page"] = 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)
|
@Html.ActionLink((string)previousText, (string)routeData["action"], (string)routeData["controller"], routeData, null)
|
||||||
</li>
|
</li>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ using Orchard.Data;
|
|||||||
using Orchard.DisplayManagement;
|
using Orchard.DisplayManagement;
|
||||||
using Orchard.Localization;
|
using Orchard.Localization;
|
||||||
using Orchard.UI.Admin;
|
using Orchard.UI.Admin;
|
||||||
|
using Orchard.UI.Navigation;
|
||||||
using Orchard.UI.Notify;
|
using Orchard.UI.Notify;
|
||||||
|
|
||||||
namespace Orchard.Blogs.Controllers {
|
namespace Orchard.Blogs.Controllers {
|
||||||
@@ -27,7 +28,8 @@ namespace Orchard.Blogs.Controllers {
|
|||||||
IBlogPostService blogPostService,
|
IBlogPostService blogPostService,
|
||||||
IContentManager contentManager,
|
IContentManager contentManager,
|
||||||
ITransactionManager transactionManager,
|
ITransactionManager transactionManager,
|
||||||
IBlogSlugConstraint blogSlugConstraint) {
|
IBlogSlugConstraint blogSlugConstraint,
|
||||||
|
IShapeFactory shapeFactory) {
|
||||||
Services = services;
|
Services = services;
|
||||||
_blogService = blogService;
|
_blogService = blogService;
|
||||||
_blogPostService = blogPostService;
|
_blogPostService = blogPostService;
|
||||||
@@ -35,8 +37,10 @@ namespace Orchard.Blogs.Controllers {
|
|||||||
_transactionManager = transactionManager;
|
_transactionManager = transactionManager;
|
||||||
_blogSlugConstraint = blogSlugConstraint;
|
_blogSlugConstraint = blogSlugConstraint;
|
||||||
T = NullLocalizer.Instance;
|
T = NullLocalizer.Instance;
|
||||||
|
Shape = shapeFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dynamic Shape { get; set; }
|
||||||
public Localizer T { get; set; }
|
public Localizer T { get; set; }
|
||||||
public IOrchardServices Services { get; set; }
|
public IOrchardServices Services { get; set; }
|
||||||
|
|
||||||
@@ -135,20 +139,25 @@ namespace Orchard.Blogs.Controllers {
|
|||||||
return View(viewModel);
|
return View(viewModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActionResult Item(string blogSlug) {
|
public ActionResult Item(string blogSlug, Pager pager) {
|
||||||
BlogPart blogPart = _blogService.Get(blogSlug);
|
BlogPart blogPart = _blogService.Get(blogSlug);
|
||||||
|
|
||||||
if (blogPart == null)
|
if (blogPart == null)
|
||||||
return HttpNotFound();
|
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");
|
var blogPosts = _blogPostService.Get(blogPart, pager.GetStartIndex(), pager.PageSize, VersionOptions.Latest)
|
||||||
return View(model);
|
.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) {
|
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.Manage.cshtml" />
|
||||||
<Content Include="Views\Parts\Blogs.Blog.Description.cshtml" />
|
<Content Include="Views\Parts\Blogs.Blog.Description.cshtml" />
|
||||||
<Content Include="Views\EditorTemplates\Parts\Blogs.Blog.Fields.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>
|
<SubType>Code</SubType>
|
||||||
</Content>
|
</Content>
|
||||||
<Content Include="Views\Items\Content-Blog.SummaryAdmin.cshtml" />
|
<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>());
|
return GetBlogQuery(blogPart, versionOptions).List().Select(ci => ci.As<BlogPostPart>());
|
||||||
}
|
}
|
||||||
|
|
||||||
public int PostCount(BlogPart blogPart, VersionOptions versionOptions) {
|
public IEnumerable<BlogPostPart> Get(BlogPart blogPart, int skip, int count) {
|
||||||
return GetBlogQuery(blogPart, versionOptions).Count();
|
return Get(blogPart, skip, count, VersionOptions.Published);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<BlogPostPart> Get(BlogPart blogPart, int skip, int count) {
|
public IEnumerable<BlogPostPart> Get(BlogPart blogPart, int skip, int count, VersionOptions versionOptions) {
|
||||||
return GetBlogQuery(blogPart, VersionOptions.Published).Slice(skip, count).ToList().Select(ci => ci.As<BlogPostPart>());
|
return GetBlogQuery(blogPart, versionOptions).Slice(skip, count).ToList().Select(ci => ci.As<BlogPostPart>());
|
||||||
}
|
}
|
||||||
|
|
||||||
public int PostCount(BlogPart blogPart) {
|
public int PostCount(BlogPart blogPart) {
|
||||||
return PostCount(blogPart, VersionOptions.Published);
|
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) {
|
public IEnumerable<BlogPostPart> Get(BlogPart blogPart, ArchiveData archiveData) {
|
||||||
var query = GetBlogQuery(blogPart, VersionOptions.Published);
|
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, VersionOptions versionOptions);
|
||||||
IEnumerable<BlogPostPart> Get(BlogPart blogPart, ArchiveData archiveData);
|
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);
|
||||||
|
IEnumerable<BlogPostPart> Get(BlogPart blogPart, int skip, int count, VersionOptions versionOptions);
|
||||||
int PostCount(BlogPart blogPart);
|
int PostCount(BlogPart blogPart);
|
||||||
int PostCount(BlogPart blogPart, VersionOptions versionOptions);
|
int PostCount(BlogPart blogPart, VersionOptions versionOptions);
|
||||||
IEnumerable<KeyValuePair<ArchiveData, int>> GetArchives(BlogPart blogPart);
|
IEnumerable<KeyValuePair<ArchiveData, int>> GetArchives(BlogPart blogPart);
|
||||||
|
|||||||
@@ -63,9 +63,8 @@ namespace Orchard.Comments.Controllers {
|
|||||||
throw new ArgumentOutOfRangeException();
|
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 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 {
|
var model = new CommentsIndexViewModel {
|
||||||
Comments = entries.ToList(),
|
Comments = entries.ToList(),
|
||||||
|
|||||||
@@ -803,8 +803,9 @@ table .button {
|
|||||||
|
|
||||||
.pager { list-style: none; padding: 0; margin: 12px 0 0 0; }
|
.pager { list-style: none; padding: 0; margin: 12px 0 0 0; }
|
||||||
.pager li { float: left; padding: 0 12px 0 0; margin: 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 a:hover { background-color: #eaeaea; color: #333; }
|
||||||
|
.pager span { background-color:inherit; }
|
||||||
|
|
||||||
|
|
||||||
/* Core Modules
|
/* 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="TheAdmin\Views\Header.cshtml" />
|
||||||
<Content Include="TheThemeMachine\Views\Layout.cshtml" />
|
<Content Include="TheThemeMachine\Views\Layout.cshtml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup />
|
<ItemGroup>
|
||||||
|
<Content Include="TheAdmin\Views\Pager.cshtml" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.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.
|
<!-- 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() {
|
int IContentQuery<T>.Count() {
|
||||||
var criteria = _query.BindItemVersionCriteria();
|
var criteria = (ICriteria)_query.BindItemVersionCriteria().Clone();
|
||||||
|
criteria.ClearOrders();
|
||||||
return criteria.SetProjection( Projections.RowCount() ).UniqueResult<Int32>();
|
return criteria.SetProjection( Projections.RowCount() ).UniqueResult<Int32>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user