Umbraco 初学者工具包以错误的顺序对博客文章进行排序
Umbraco Starter Kit sorting blog posts in wrong order
我试图先找到正确的答案,但没有成功。
我正在使用 V7 中的 Umbraco Starter Kit 开发网站
出于某种原因,它首先使用最早的文章对博客文章进行排序,而我想使用局部视图宏 '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>
}
}
我完全卡住了。尝试了一些东西,但我所做的只是破坏网站。非常感谢这里的一些帮助以所需的方式对其进行排序。
非常感谢您的指导和帮助
正如您自己弄清楚的那样,您正在尝试按项目上不存在的 属性 进行排序。
我建议您在博客 post 上添加一个名为 publishDate
或类似名称的 属性。然后,您可以在每个 post 上设置此 属性,以指示它们何时 'published'。
你不想只使用内置属性(如创建日期或发布日期)的原因是,如果你需要更新旧博客 post(可能更正打字错误)发布日期现在将在您重新发布时更新。因此,只需更正拼写错误,旧博客 post 就会显示为最新博客 post.
您当然应该实施回退,这样如果未设置此 属性,发布日期将回退到使用项目的实际最新发布日期。
我试图先找到正确的答案,但没有成功。
我正在使用 V7 中的 Umbraco Starter Kit 开发网站 出于某种原因,它首先使用最早的文章对博客文章进行排序,而我想使用局部视图宏 '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>
}
}
我完全卡住了。尝试了一些东西,但我所做的只是破坏网站。非常感谢这里的一些帮助以所需的方式对其进行排序。
非常感谢您的指导和帮助
正如您自己弄清楚的那样,您正在尝试按项目上不存在的 属性 进行排序。
我建议您在博客 post 上添加一个名为 publishDate
或类似名称的 属性。然后,您可以在每个 post 上设置此 属性,以指示它们何时 'published'。
你不想只使用内置属性(如创建日期或发布日期)的原因是,如果你需要更新旧博客 post(可能更正打字错误)发布日期现在将在您重新发布时更新。因此,只需更正拼写错误,旧博客 post 就会显示为最新博客 post.
您当然应该实施回退,这样如果未设置此 属性,发布日期将回退到使用项目的实际最新发布日期。