2

我是 Orchard CMS 和 MVC 的新手,所以请原谅我的无知。我已经进行了搜索,但没有发现任何明显相关的内容......

在我的 Orchard 网站的 Footer Quad 区域之一中,我想按标题显示最近的 5 篇博客文章。目前它以未格式化的状态显示标题、帖子、标签等(我还没有为博客设置样式)。

使用跟踪工具,我创建了一个名为的备用视图;

Parts.Blogs.RecentBlogPosts

但是,此视图中的唯一内容是;

@Display(Model.ContentItems)

与其他已安装的小部件不同,我编辑了备用视图 - 并没有给我任何东西来创建我需要创建的布局。

我是否选择了错误的形状/视图,或者我需要陷入一些编码?

正如我所说,我是 MVC 和 Orchard 的新手,但非常热衷于学习。一如既往,对此的任何帮助将不胜感激。

4

3 回答 3

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>
于 2013-10-18T15:15:44.750 回答
2

它确实值得解释。这里的 Model.ContentItems 确实是一个 List 形状。当您使用它调用 Display 时,它将为列表形状找到最合适的模板(并且可以是替代模板)并呈现它。默认列表呈现仅呈现 UL/LI,并且在每个 LI 中,对列表元素的单个内容形状调用 Display,但使用摘要显示类型。当它依次被渲染时,系统会定位最相关的内容模板,该模板通常会渲染一堆区域,在这些区域内,部件会根据放置被推送。所以在很多嵌套级别中发生了很多事情。尽管如此,仍然可以在任何级别上覆盖整个事情。困难在于知道该放什么。最简单的方法是在形状跟踪中探索模型,看看你可以使用什么。 http://weblogs.asp.net/bleroy/archive/2011/03/27/taking-over-list-rendering-in-orchard.aspx

于 2012-11-03T22:40:27.377 回答
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 文档页面上的以下说明:

  1. 替补
  2. 访问和渲染形状
于 2012-11-03T20:25:16.127 回答