Как отобразить различные части (например, теги) поста в блоге в Orchard CMS? - PullRequest
1 голос
/ 12 мая 2011

Я пытаюсь отобразить список сообщений в блоге в этом макете:

[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)

1 Ответ

3 голосов
/ 13 мая 2011

О, привет.Попробуйте это:

@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

...