我无法找到发布日期。我工作的Umbraco.Core.Models.IPublished内容接口,似乎没有发布的日期,只有创建和更新的日期。Umbraco 7 - 如何从IPublishedContent获取发布的日期?
我在interwebs上找到的所有文档都建议使用Document(id),然后Document.ReleasedDate,但现在标记为过时。它建议在Umbraco.Core.Models.Content类中使用ReleaseDate。
我错过了什么?
我无法找到发布日期。我工作的Umbraco.Core.Models.IPublished内容接口,似乎没有发布的日期,只有创建和更新的日期。Umbraco 7 - 如何从IPublishedContent获取发布的日期?
我在interwebs上找到的所有文档都建议使用Document(id),然后Document.ReleasedDate,但现在标记为过时。它建议在Umbraco.Core.Models.Content类中使用ReleaseDate。
我错过了什么?
使用IPublishedContent上的UpdateDate。发布内容时,该日期始终会更新。
您提到的ReleaseDate用于设置将自动发布特定内容项目的未来日期和时间。所以那不是你以后的日子。当发布日期被设置时,一旦该项目被发布,UpdateDate也将随着该日期而被更新。
如果您使用的是Umbraco 7,请查看Umbraco.Core.Models.IContent接口上的ReleaseDate属性。显然它“获取或设置内容应该发布的日期并因此发布”。
它在你上面的回复本已报道。这不是pwee正在寻找的,因为那个日期在每次更改后都会重置。 –
我做了自己的测试,发现'ReleaseDate'在后台标注为“Publish at”,在进行修改后(例如拼写更正)不会改变。所以我能够用这个来满足我的需求。谢谢@Teppic。 – Markus
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继承在启动类,所以你只需要将上面的类添加到您的项目。
它创造了奇迹。 –
我想你应该使用“.Created”日期。因为这将是该文章最初发布的日期。
另外,您可以在您的DocType使用自定义DateTime属性,并用其作为通过检索它的发布日期如下:
YourNodeObject.GetPropertyValue<DateTime>("customPropertyAliasHere");
问候
如果我使用UpdateDate并发布文章,然后在三天后回去修复拼写错误,现在“发布日期”已关闭三天。它是否正确? –
是的,这是正确的。如果这是您的情况,最好为您的内容添加“发布日期”属性。然后,您可以选择通过事件处理程序设置日期,从而确保日期仅在首次发布时更新,或者仅将其作为必需字段,内容编辑器可以选择他们想要的任何日期。 – sitereactor
是的,我想我必须添加一个'发布日期'属性并创建一个事件处理程序。 –