按发布日期排序,即使发布日期是明天还是2年前

时间:2017-03-22 10:33:57

标签: umbraco umbraco7

我正在尝试尽可能让我的客户更直观。他们已经有很多新闻文章需要转移到这个新的Umbraco 7网站。我想要发生以下事情:

  • 如果他们制作了一篇新闻文章并将“发布日期”设置为明天,那么它将在明天之前显示在页面上。
  • 如果他们没有设置“发布日期”,则应查看发布日期(如果您希望立即发布,则不会填写“发布日期”日期)
  • 如果他们编辑旧文章,则根本不应影响排序(意味着UpdateDate不起作用)
  • 如果今天发布了n篇文章,并且某人发布了昨天设置为“发布时间”的新闻文章,则会将新闻文章放在3个新文章之前

这样的事情是否可能,而不创造额外的财产?在我看来,这只会让这个人感到困惑。

2 个答案:

答案 0 :(得分:0)

显然,唯一的方法是创建一个类型为Date的附加字段。我希望通过Umbraco内置的那些来做到这一点。

原来没有"这是本文发表的确切日期"我可以访问的属性,同时仍然可以使用它。它确实为创建者提供了一些关于排序的选项,因为它现在很容易按日期排序。

答案 1 :(得分:0)

据我了解您的情况,以下是我对您的每个问题的回复

  • 如果他们制作新闻文章并设置" Publish At"从明天开始,到明天才会在页面上显示。

答案 - 如果他们将发布日期设置为明天而只是保存该文章,那么它将永远不会发布到明天。如果页面已经发布,则需要先取消发布。

  • 如果他们没有设置"发布At"日期,它应该查看发布日期(如果您希望立即发布日期,则不会填写"发布日期"日期)

Ans - 他们只需点击保存并发布即可立即发布文章。

  • 如果他们编辑旧文章,它根本不应影响排序(意味着UpdateDate不应该工作)

Ans - 您可以在ContentService_Saving事件中处理此问题。请参阅 - ContentService Events

  • 如果今天有n篇文章全部发布,并且有人发布了一篇新闻文章,其中包括" Publish At"设置为昨天,它将把新闻文章放在3个新的
  • 之前

Ans - 取自This Umbraco forum。在这里也为每个人添加这个。

我将创建属性SortDate,以及另一个true / false属性PublishMode。虽然SortDate是不言自明的,但是一旦完成绘图并向页面添加内容,我会将PublishMode设置为true。因此,如果我已经编写了一个页面并且只需要在发布之后修复拼写错误并重新编写,那么这将设置为true。

然后我会挂钩重新发布事件并添加一些逻辑:

if (page's type alias is a post) && (PublishMode is false) {
if (DateCompare(page.CreateDate, page.UpdateDate) >= 0 
{ page.SortDate = page.CreateDate } 
else {page.SortDate = page.UpdateDate}
}

因此,在您完成之后,您可以根据"模式"对日期进行排序。正在重新发布的文件。

作为旁注,即使您没有选择日期,datepicker数据类型也会自动设置为" 01/01 / 0011"。所以它永远不会返回空值。

此外,datepicker数据类型不是DateTime对象。因此,要使用DateCompare,您必须将每个日期属性解析为DateTime对象,如:

DateCompare(DateTime.Parse(Page.CreateDate.ToString("r"), DateTime.Parse(Page.UpdateDate.ToString("r"))

希望这会有所帮助!!

由于