我無法找到發佈日期。我工作的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
是的,我想我必須添加一個'發佈日期'屬性並創建一個事件處理程序。 –