我试图首先找到正确的答案,但是没有运气。
我正在使用Vm7中的Umbraco入门工具包在网站上工作 出于某种原因,它首先使用最旧的帖子对博客帖子进行排序,而我想使用Partial View Macro'GetLatestBlogPosts'在列表视图中首先获取最新的帖子。
这是我当前用于部分视图宏的代码:
@using ContentModels = Umbraco.Web.PublishedContentModels;
@using Umbraco.Web;
@inherits Umbraco.Web.Macros.PartialViewMacroPage
@{
var startNodeId = Model.MacroParameters["startNodeId"] != null
Model.MacroParameters["startNodeId"] : Model.Content.Id;
var numberOfPosts = 3;
if (Model.MacroParameters["numberOfPosts"] != null)
{
int.TryParse((string)Model.MacroParameters["numberOfPosts"], out
numberOfPosts);
}
}
@if (startNodeId != null)
{
@* Get the starting page *@
var startNode = Umbraco.TypedContent(startNodeId);
//Gets all blogposts to calculate pages
var blogposts = startNode.Children.OrderByDescending(x => x.GetPropertyValue("PublicationDate")).ToList();
var pageCount = (int)Math.Ceiling((double)blogposts.Count / (double)numberOfPosts);
var page = 1;
if (!string.IsNullOrEmpty(Request.QueryString["page"]))
{
int.TryParse(Request.QueryString["page"], out page);
if (page <= 0 || page > pageCount)
{
page = 1;
}
}
//Gets the blogposts for the current page
var pagedBlogposts = blogposts.Skip((page - 1) * numberOfPosts).Take(numberOfPosts).ToList();
if (pagedBlogposts.Count > 0)
{
<div class="blogposts">
@foreach (ContentModels.Blogpost post in pagedBlogposts)
{
<a href="@post.Url" class="blogpost">
<div class="blogpost-meta">
<small class="blogpost-date">@post.CreateDate.ToLongDateString()</small>
<small class="blogpost-cat">
@Html.Partial("~/Views/Partials/CategoryLinks.cshtml", post.Categories)
</small>
</div>
@if(post.FeaturedImage != null){
<div class="blogpost-image">
<img class="img-responsive" src="@post.FeaturedImage.Url?width=200" alt="@post.PageTitle" style="width: 100%; height: 100%;"/>
</div>
}
<h3 class="blogpost-title">@post.PageTitle</h3>
<div class="blogpost-excerpt">@post.Excerpt</div>
</a>
}
</div>
}
if (blogposts.Count > numberOfPosts)
{
<div class="pagination">
<nav class="nav-bar nav-bar--center">
@if (page <= 1)
{
<span class="nav-link nav-link--black nav-link--disabled">Prev</span>
}
else
{
<a class="nav-link nav-link--black" href="@(Model.Content.Url + "?page=" + (page - 1))">Prev</a>
}
@for (int i = 1; i <= pageCount; i++)
{
<a class="nav-link nav-link--black @(page == i ? "nav-link--active" : null)" href="@(Model.Content.Url + "?page=" + i)">@i</a>
}
@if (page == pageCount)
{
<span class="nav-link nav-link--black nav-link--disabled">Next</span>
}
else
{
<a class="nav-link nav-link--black" href="@(Model.Content.Url + "?page=" + (page + 1))">Next</a>
}
</nav>
</div>
}
}
我完全被困住了。尝试了一些事情,但我想做的就是破坏网站。非常感谢您提供帮助,以所需的方式对此进行排序。
非常感谢您的指导和帮助
答案 0 :(得分:3)
您发现自己正在尝试按商品上不存在的属性进行排序。
我建议您在博客文章中添加一个名为publishDate
或类似名称的属性。然后,您可以在每个帖子上设置此属性,以指示它们何时“发布”。
您不希望仅使用内置属性(例如创建日期或发布日期)进行此类操作的原因是,如果您需要更新旧博客帖子(可能会纠正拼写错误),那么发布日期现在,当您重新发布时将进行更新。因此,只需更正输入错误即可使旧博客帖子显示为最新博客帖子。
您当然应该实施后备,因此,如果未设置此属性,则发布日期将后退为使用该项目的实际最新发布日期。