2014-01-05 26 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"); 

問候

相關問題