【问题标题】:Orchard CMS Recent Blog Post Widget Alternate ViewOrchard CMS 最近的博客文章小部件备用视图
【发布时间】:2012-11-03 16:27:11
【问题描述】:

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

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

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

Parts.Blogs.RecentBlogPosts

然而,这个视图中唯一的内容是;

@Display(Model.ContentItems)

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

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

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

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 orchardcms


    【解决方案1】:

    在尝试将最近的博客文章布局与博客摘要文章区分开来时,我遇到了完全相同的问题。我遵循了这个概念

    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>
    

    【讨论】:

      【解决方案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

      【讨论】:

      • 啊!伟大的伯特兰。我很荣幸能得到您的帮助。从我在 Orchard 的短暂时间里,我看出你显然是知情人。 ;-)
      • O_o 你太客气了。真正的问题是,这有帮助吗?
      • 是的,我已经设法将您的样本快速转换为我需要的布局。不幸的是,它已经晚了,所以我还没有真正看过代码本身,或者你的出色解释。但是,毫无疑问,我明天会这样做。我非常渴望了解正在发生的事情,以便我可以了解更多。感谢您的帮助,并花费大量时间和精力(通常)来解释 Orchard 的工作原理。
      • 我将如何做同样的事情,但使用博客摘要页面,然后是实际的博客文章页面。同样,我似乎只能找到单独的区域元素。这让我处于类似的情况,因为我需要重新安排事物并进行更改,这需要我可以控制顶级形状。任何指针将不胜感激@Bertrand Le Roy
      • 移动形状的标准方法是放置。如果您出于某种原因不想使用展示位置,请阅读以下内容:weblogs.asp.net/bleroy/archive/2011/07/31/…
      【解决方案3】:

      Parts.Blogs.RecentBlogPosts 视图显示 Parts_Blogs_BlogPost_List 形状 (Parts.Blogs.BlogPost.List.cshtml),其中显示了 BlogPost 内容项。 (您可以在 RecentBlogPostsPartDriver.cs 中看到它)。 BlogPost 内容类型由 TitlePart 和 BodyPart 部分组成,它们有自己的形状和视图(或 Orchard 术语中的模板)。 因此,要对这些模板进行一些更正,您可以尝试交替使用Parts_Blogs_BlogPost_ListParts_Common_Body_Summary 和其他形状。

      请在Orchard docs page 上查看以下说明,尤其是:

      1. 替代品
      2. 访问和渲染形状

      【讨论】:

      • 感谢您的回复,但我仍然不明智。我能够很容易地为 twitter 小部件创建替代品。但这真的没有任何意义。无论如何,谢谢。
      • 好的,我想我到了某个地方。但是根据我目前采取的路线,要在提要中只获取标题,我将不得不为所有其他部分创建空的替代项。这似乎有点不对劲。
      • 您可以通过将以下内容添加到您的 placement.info 文件中来隐藏博客文章的摘要:&lt;Place Parts_Common_Body_Summary="-"/&gt;。这将在您的模块/主题打开时从显示中删除形状。
      • 但这也会将其从博客摘要页面中删除??我只想从我放置在每个页面的页脚中的小部件中删除这些。我的目标是让这个小部件显示最近 3 或 4 篇博文的标题。
      猜你喜欢
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多