1

このレイアウトでブログ投稿のリストをレンダリングしようとしています:

[first post - special summary]
[second post][third post][fourth post]
[pager]

最初の投稿を自分でレンダリングしてから、残りのアイテムをループして、ブログ投稿の概要テンプレートを使用してレンダリングしようとしています。

ここにいくつかの質問があります:

  1. これは、私が達成しようとしているレイアウトを実現するための良い方法ですか、それともモジュールの作成を検討し始める必要がありますか?
  2. 特別な最初の投稿レンダリング用の要約テンプレートを作成する必要がありますか?それについてはどうすればよいですか?
  3. 同じパスを続行する場合、タグやポストデートなどのパーツをレンダリングするにはどうすればよいですか?

私のテーマにはこれまでのところこれがあります:Parts.Blogs.BlogPost.List-url-blog.cshtml

@using Orchard.Blogs.Extensions;
@using Orchard.Blogs.Models;
@using Orchard.ContentManagement;
@using Orchard.Utility.Extensions;
@{
    IEnumerable<dynamic> blogPosts = Model.ContentItems;
    Model.ContentItems.Classes.Add("content-items");
    Model.ContentItems.Classes.Add("blog-posts");

    var firstPost = blogPosts.FirstOrDefault();
    //BlogPart blog = (BlogPart)firstPost.Get(typeof(BlogPart));

}
<h1>@firstPost.Title</h1>
by <span>@firstPost.ContentItem.CommonPart.Owner.NormalizedUserName</span>

@* How do i render tags using the tags part template? *@

@Display(firstPost.Tags) 
@Display(firstPost.Parts_Tags_ShowTags)
@Display(firstPost.TagsPart) 
@Display(firstPost.ContentItem.TagsPart)
@Display(firstPost.ContentItem.TagsPart.ContentItem)

@* none of the above work *@

<hr />
<ul class="content-items">
    @foreach (var post in blogPosts.Skip(1))
    {
        <li class="content-item-summary">
            @Display(post)
        </li>
    }
</ul>

ボーナスポイント-なぜ私はこのようなことをすることができないのですか?

@Display(blogPosts.Skip(1))

しかし、私はすることができます

@Display(blogPosts)
4

1 に答える 1

3

あこんにちは。これを試して:

@using Orchard.Blogs.Extensions;
@using Orchard.Blogs.Models;
@using Orchard.ContentManagement;
@using Orchard.Utility.Extensions;
@{
    IEnumerable<dynamic> blogPosts = Model.ContentItems;
    Model.ContentItems.Classes.Add("content-items");
    Model.ContentItems.Classes.Add("blog-posts");

    var firstPost = blogPosts.FirstOrDefault();
    var otherPosts = blogPosts.Skip(1).ToList();
}
<h1>@firstPost.Title</h1>
by <span>@firstPost.ContentItem.CommonPart.Owner.NormalizedUserName</span>

@Display(New.MyTagShape(Tags: firstPost.ContentItem.TagsPart.CurrentTags))

<hr />
@Display(New.List().AddRange(otherPosts))

そして、これはMyTagShape.cshtmlのコードです。

Here are your tags:
<ul>
@foreach (var tag in Model.Tags) {
    <li>@tag.TagName</li>
}
</ul>

私のマシンで動作します。しかし、フォーラムで言っていたように、リスト全体ではなく、要約テンプレートをカスタマイズすることをお勧めします。

編集:最初のアイテムに別のテンプレートを作成する方法は次のとおりです:http ://weblogs.asp.net/bleroy/archive/2011/05/23/orchard-list-customization-first-item-template.aspx

于 2011-05-13T01:12:50.220 に答える