【问题标题】:Umbraco Starter Kit sorting blog posts in wrong orderUmbraco Starter Kit 以错误的顺序排序博客文章
【发布时间】:2019-02-05 07:37:45
【问题描述】:

我试图先找到正确的答案,但没有运气。

我正在使用 V7 中的 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>
}
}

我完全被困住了。尝试了一些东西,但我所尝试的只是破坏网站。非常感谢您在这里提供一些帮助,以便以所需的方式对其进行排序。

非常感谢您的指导和帮助

【问题讨论】:

  • 帖子的排序发生在startNode.Children.OrderByDescending(x =&gt; x.GetPropertyValue("PublicationDate")).ToList();,这表明应该首先显示最新的帖子。您确定博文上的PublicaitonDate 属性填充了不同的日期吗?
  • 你能告诉我们 PublicationDate 在后台的样子吗?为什么不按 Umbraco 内置的 createDate 来组织呢?
  • 实际上文档类型上没有属性“PublicationDate”。我想这是在一位朋友帮助我从我的最新博客文章列表视图中的“featuredImage”属性中获取缩略图时写的。但我想按发布日期而不是创建日期对博客文章进行排序。因此,即使它现在按降序排序,它也会按创建日期显示帖子。这不是我想要的,因为今天创建的帖子可能会在 4 周内发布

标签: sorting umbraco blogs umbraco7 umbraco-blog


【解决方案1】:

正如您自己发现的那样,您正在尝试按项目上不存在的属性进行排序。

我建议您在博客文章中添加一个名为 publishDate 或类似名称的属性。然后,您可以在每个帖子上设置此属性,以指示它们何时“发布”。

您不想只使用内置属性(如创建日期或发布日期)的原因是,如果您需要更新旧博客文章(可能更正错字)发布日期现在将在您重新发布时更新。因此,现在只需更正错字,旧博文就会显示为最新博文。

您当然应该实现回退,因此如果未设置此属性,则发布日期将回退为使用项目的实际最新发布日期。

【讨论】:

  • 谢谢克劳斯,我昨天已经做到了,这完全符合我的要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-20
  • 2019-01-13
  • 2011-01-07
  • 2017-10-20
  • 2020-05-05
相关资源
最近更新 更多