如何在Orchard CMS中为第一页设置不同的页面大小

时间:2016-04-06 12:49:38

标签: orchardcms

我们需要显示一个显示X帖子的博客帖子页面 - 第一个帖子显示为标题,其余帖子显示为2列。该页面底部有一个显示更多按钮,使用ajax获取下一页帖子并在底部添加它们。 是否可以为后续页面获取X + 1项目?

任何提示,即使在代码中都是受欢迎的,因为我们使用了源代码版本的果园安装。

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大小