我们需要显示一个显示X帖子的博客帖子页面 - 第一个帖子显示为标题,其余帖子显示为2列。该页面底部有一个显示更多按钮,使用ajax获取下一页帖子并在底部添加它们。 是否可以为后续页面获取X + 1项目?
任何提示,即使在代码中都是受欢迎的,因为我们使用了源代码版本的果园安装。
答案 0 :(得分:1)
因此,在上述评论混乱之前,这是我提出的解决方案。
我认为对于改变我想澄清的控制器动作存在轻微的误解(我希望我现在能正确理解所有内容):
Orchard.Blogs | BlogController |项目行动
public ActionResult Item(int blogId, PagerParameters pagerParameters) {
// This is all original code
Pager pager = new Pager(_siteService.GetSiteSettings(), pagerParameters);
var blogPart = _blogService.Get(blogId, VersionOptions.Published).As<BlogPart>();
if (blogPart == null)
return HttpNotFound();
if (!_services.Authorizer.Authorize(Orchard.Core.Contents.Permissions.ViewContent, blogPart, T("Cannot view content"))) {
return new HttpUnauthorizedResult();
}
// This is the actual change:
// Use the pagerParameters provided, otherwise fall back to the blog settings
pager.PageSize = pagerParameters.PageSize.HasValue ? pager.PageSize : blogPart.PostsPerPage;
// This is all original code again
_feedManager.Register(blogPart, _services.ContentManager.GetItemMetadata(blogPart).DisplayText);
var blogPosts = _blogPostService.Get(blogPart, pager.GetStartIndex(), pager.PageSize) // Your new page size will be used
.Select(b => _services.ContentManager.BuildDisplay(b, "Summary"));
dynamic blog = _services.ContentManager.BuildDisplay(blogPart);
var list = Shape.List();
list.AddRange(blogPosts);
blog.Content.Add(Shape.Parts_Blogs_BlogPost_List(ContentItems: list), "5");
var totalItemCount = _blogPostService.PostCount(blogPart);
blog.Content.Add(Shape.Pager(pager).TotalItemCount(totalItemCount), "Content:after");
return new ShapeResult(this, blog);
}
所以这个变化非常微妙,但这样我就可以将博客默认的pageSize配置为7个项目,并且对于每个后续的Ajax-Request,我都会提供一个&#34; pageSize&#34; -Parameter with the desired大小