2016-04-06 9 views
0

X投稿を表示するブログ投稿ページを表示する必要があります。最初の投稿はヘッダーとして表示され、残りは2列に表示されます。ページには、下部にajaxを使用して次のページの投稿を取得し、下部に追加するボタンが追加されています。 後続のページでX + 1個のアイテムを取得できますか?オーチャードCMSの最初のページに異なるページサイズを設定する方法

オーチャード・インストールのソース・バージョンを使用しているため、ヒントは、コードでさえ歓迎します。

+0

あなたはAjaxからどのアクションを呼び出しますか?通常、ページングされたアクションには "PagerParameters" - paramがあります。通常のページャーは、 "?pageSize = 50"のようなqueryStringを追加するだけで利用できます。十分ではありませんか? – Xceno

+0

@Xcenoオーチャードのブログ記事は、各ブログがページサイズのための独自のプロパティを持っているので、パラメータとして渡すとページサイズを考慮に入れないと思います。 – fotisgpap

+0

BlogControllerの実際のItem-Actionは上記のパラメータをとります。 (Orchard 1.10のソースコード) pageSizeがブログ設定で指定されたもので上書きされるのは間違いありませんが、簡単に変更できます。 – Xceno

答えて

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); 
} 

だから変更は非常に微妙ですが、この方法では、私は、7つの項目にブログのデフォルトのpageSizeを構成しますし、後続のすべてのAjaxリクエストのために、私は希望を持つ「のpageSize」-parameterを提供したいですサイズ。

+0

は完璧に動作します!非常に@ Xcenoありがとう! – fotisgpap

関連する問題