根據你要使用這個日期,或許稍微不同的方法可能會更好。以前的答案是有效的,可能會工作得很好。但在發佈時更新主數據庫可能會讓發佈引擎認爲主項目已更改並需要重新發布。 (EventDisabler等可以防止這種情況發生,也可以觸發重新索引,等等......事情可能會變得非常棘手)
或者,您可以改爲在Web數據庫中的項目上編寫發佈日期。
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<pipelines>
<publishItem>
<processor type="Sitecore.Publishing.Pipelines.PublishItem.PerformAction, Sitecore.Kernel">
<patch:attribute name="type">Your.Namespace.PerformAction, Your.Assembly</patch:attribute>
</processor>
</publishItem>
</pipelines>
</sitecore>
</configuration>
和實施與此類似:
public class PerformAction : Sitecore.Publishing.Pipelines.PublishItem.PerformAction
{
public override void Process(PublishItemContext context)
{
base.Process(context);
if (context.Aborted || context.VersionToPublish == null || context.VersionToPublish.Source == null)
return;
var target = context.PublishOptions.TargetDatabase.GetItem(context.VersionToPublish.ID, context.VersionToPublish.Language);
if (target == null)
return;
using (new EditContext(target, false /*updateStatistics*/, true /*silent*/))
{
DateField lastPublished = target.Fields["LastPublished"]
lastPublished.Value = Sitecore.DateUtil.IsoNo;
}
}
}
約翰西方有一個博客帖子這個位置:
http://www.sitecore.net/learn/blogs/technical-blogs/john-west-sitecore-blog/posts/2011/08/intercept-item-publishing-with-the-sitecore-aspnet-cms.aspx
具有存儲在Web數據庫中的發佈日期,你可以從那裏讀取它,或者爲主數據庫創建一個計算索引字段,而不是來自Web數據庫的日期。
這可能是一個更強大的解決方案,但它又取決於您使用該字段的內容,以及您是否正在控制讀取該值的代碼。