2014-01-05 29 views
2

我无法找到发布日期。我工作的Umbraco.Core.Models.IPublished内容接口,似乎没有发布的日期,只有创建和更新的日期。Umbraco 7 - 如何从IPublishedContent获取发布的日期?

我在interwebs上找到的所有文档都建议使用Document(id),然后Document.ReleasedDate,但现在标记为过时。它建议在Umbraco.Core.Models.Content类中使用ReleaseDate。

我错过了什么?

回答

2

使用IPublishedContent上的UpdateDate。发布内容时,该日期始终会更新。

您提到的ReleaseDate用于设置将自动发布特定内容项目的未来日期和时间。所以那不是你以后的日子。当发布日期被设置时,一旦该项目被发布,UpdateDate也将随着该日期而被更新。

+0

如果我使用UpdateDate并发布文章,然后在三天后回去修复拼写错误,现在“发布日期”已关闭三天。它是否正确? –

+1

是的,这是正确的。如果这是您的情况,最好为您的内容添加“发布日期”属性。然后,您可以选择通过事件处理程序设置日期,从而确保日期仅在首次发布时更新,或者仅将其作为必需字段,内容编辑器可以选择他们想要的任何日期。 – sitereactor

+0

是的,我想我必须添加一个'发布日期'属性并创建一个事件处理程序。 –

1

如果您使用的是Umbraco 7,请查看Umbraco.Core.Models.IContent接口上的ReleaseDate属性。显然它“获取或设置内容应该发布的日期并因此发布”。

+0

它在你上面的回复本已报道。这不是pwee正在寻找的,因为那个日期在每次更改后都会重置。 –

+0

我做了自己的测试,发现'ReleaseDate'在后台标注为“Publish at”,在进行修改后(例如拼写更正)不会改变。所以我能够用这个来满足我的需求。谢谢@Teppic。 – Markus

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继承在启动类,所以你只需要将上面的类添加到您的项目。

+0

它创造了奇迹。 –

0

我想你应该使用“.Created”日期。因为这将是该文章最初发布的日期。

另外,您可以在您的DocType使用自定义DateTime属性,并用其作为通过检索它的发布日期如下:

YourNodeObject.GetPropertyValue<DateTime>("customPropertyAliasHere"); 

问候

相关问题