我无法找到公布日期。我使用Umbraco.Core.Models.IPublishedContent接口,它似乎没有发布日期,只有创建和更新日期。
我在interwebs上找到的所有文档,建议使用Document(id),然后使用Document.ReleasedDate,但现在已经过时了。它建议在Umbraco.Core.Models.Content类中使用ReleaseDate。
我错过了什么?
答案 0 :(得分:4)
在IPublishedContent上使用UpdateDate。发布内容时,该日期始终会更新。
您提到的ReleaseDate用于设置特定内容项应在何时发布(自动)的未来日期和时间。所以这不是你追求的日期。设置发布日期后,一旦项目发布,UpdateDate也将使用此日期进行更新。
答案 1 :(得分:2)
Umbraco内容项目没有内置属性来指示它们何时首次发布。
如果您想要可靠地指示实际发布内容的时间,最好的选择是在文档类型中添加自定义属性。然后,您可以向应用程序添加事件处理程序,该属性处理程序将属性更新为首次发布时的当前日期:
using System;
using System.Linq;
using Umbraco.Core;
using Umbraco.Core.Services;
namespace YourNamespace
{
/// <summary>
/// Updates the publishedDate property when content is first published
/// </summary>
public class UpdatePublishDateEventHandler : ApplicationEventHandler
{
protected override void ApplicationInitialized(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
ContentService.Published += ContentService_Published;
}
void ContentService_Published(Umbraco.Core.Publishing.IPublishingStrategy sender, Umbraco.Core.Events.PublishEventArgs<Umbraco.Core.Models.IContent> e)
{
const string publishedDateKey = "publishedDate";
var contentService = ApplicationContext.Current.Services.ContentService;
foreach (var content in e.PublishedEntities.Where(x => x.HasProperty(publishedDateKey)))
{
var existingValue = content.GetValue(publishedDateKey);
if (existingValue == null)
{
content.SetValue(publishedDateKey, DateTime.Now);
contentService.SaveAndPublishWithStatus(content, raiseEvents: false);
}
}
}
}
}
Umbraco会在启动时自动扫描并激活从ApplicationEventHandler继承的类,因此您只需将上述类添加到项目中即可。
答案 2 :(得分:1)
如果您使用的是Umbraco 7,请查看Umbraco.Core.Models.IContent接口上的 ReleaseDate 属性。显然它“获取或设置内容应该被释放的日期,从而被发布”。
答案 3 :(得分:-1)
我认为您应该使用“.Created”日期。这将是文章最初发布的日期。
或者,您可以在DocType上使用自定义DateTime属性,并通过如下检索将其用作发布日期:
YourNodeObject.GetPropertyValue<DateTime>("customPropertyAliasHere");
此致