我是Orchard CMS和MVC的新手,所以请原谅我的无知。我做了一次搜索,没有找到任何明显相关的内容......
在我的Orchard网站上的一个Footer Quad区域中,我想显示最近的5篇博文,仅按标题显示。目前它显示标题,帖子,标签等都处于未格式化的状态(我还没有对博客进行设计)。
使用跟踪工具我创建了一个名为的备用视图;
Parts.Blogs.RecentBlogPosts
然而,此视图中的唯一内容是;
@Display(Model.ContentItems)
其中 - 不像其他已安装的小部件我已编辑了备用视图 - 并没有给我任何东西来创建我需要创建的布局。
我选择了错误的形状/视图,还是我需要陷入某些编码?
正如我所说,我是MVC和Orchard的新手但非常渴望学习。对此的任何帮助将一如既往地受到高度赞赏。
答案 0 :(得分:3)
我试图区分最近的博客文章布局和博客摘要帖子时遇到了完全相同的问题。我遵循了这个概念
http://weblogs.asp.net/bleroy/archive/2011/07/31/so-you-don-t-want-to-use-placement-info.aspx
并创建Parts.Blogs.RecentBlogPosts替代。然后,当使用形状跟踪工具浏览模型时,我找到了我正在寻找的所有元素并将它们放入我的新形状中。我知道我的方法可能不是最合适的方法,但它有效。对于需要做类似事情的人来说,这可能是一个起点:
<div class="last-news">
<ul>
@foreach (var item in Model.ContentItems.ContentItems.Items)
{
var max = (item.ContentItem.BodyPart.Text.Length > 100) ? 100 : item.ContentItem.BodyPart.Text.Length;
<li><header>@Display(item.ContentItem.CommonPart.PublishedUtc.ToShortDateString())</header></li>
<li><h1><a href="/@item.ContentItem.Parts[5].Path">@Display(item.ContentItem.TitlePart.Title)</a></h1></li>
<li>@Display(Html.Raw(item.ContentItem.BodyPart.Text.Substring(0, max)))</li>
}
</ul>
</div>
答案 1 :(得分:2)
确实值得解释。 Model.ContentItems在这里确实是一个List形状。当您使用它调用Display时,它将为列表形状找到最合适的模板(并且可以是替代)并呈现它。默认的列表渲染只是呈现UL / LI,并且在每个LI中调用显示列表元素的单个内容形状,但使用摘要显示类型。当反过来渲染时,系统会找到最相关的内容模板,该模板通常呈现一堆区域,其中部件根据放置被推动。因此,在很多嵌套级别中有很多事情发生。 不过,可以在任何级别覆盖整个事物。困难在于知道放在那里的东西。最简单的方法是在形状跟踪中探索模型并查看可以使用的内容。 本文介绍如何在特定情况下覆盖列表呈现并完全接管它: http://weblogs.asp.net/bleroy/archive/2011/03/27/taking-over-list-rendering-in-orchard.aspx
答案 2 :(得分:1)
Parts.Blogs.RecentBlogPosts
视图显示Parts_Blogs_BlogPost_List
形状(Parts.Blogs.BlogPost.List.cshtml
),其中显示了BlogPost内容项。 (您可以在RecentBlogPostsPartDriver.cs中看到它)。 BlogPost内容类型由TitlePart和BodyPart部分组成,它们具有自己的形状和视图(或Orchard术语中的模板)。
因此,要对这些模板进行一些更正,您可以尝试替换Parts_Blogs_BlogPost_List
,Parts_Common_Body_Summary
和其他形状。
请参阅Orchard docs page上的以下说明,特别是: