2014-01-05 2 views
2

게시 날짜를 찾는 데 문제가 있습니다. 저는 Umbraco.Core.Models.PublishedContent 인터페이스를 작업했습니다. 게시 된 날짜가없는 것으로 보이며 생성되고 업데이트 된 날짜 만 있습니다.Umbraco 7 - IPublishedContent에서 게시 날짜를 얻으려면 어떻게해야합니까?

내가 interwebs에서 찾은 모든 문서는 Document (id)를 사용하고 Document.ReleasedDate를 사용하는 것이 좋습니다. 그러나 이제는 폐기되었습니다. Umbraco.Core.Models.Content 클래스에서 ReleaseDate를 사용하는 것이 좋습니다.

무엇이 누락 되었습니까?

답변

2

IPublishedContent의 UpdateDate를 사용하십시오. 해당 날짜는 항상 컨텐트를 게시 할 때 업데이트됩니다.

언급 한 ReleaseDate는 특정 컨텐트 항목을 (자동으로) 게시해야하는 미래 날짜와 시간을 설정하는 데 사용됩니다. 그래서 당신이 지낸 데이트가 아닙니다. 릴리스 날짜가 설정되면 항목이 게시 된 후 UpdateDate도이 날짜로 업데이트됩니다.

+0

UpdateDate를 사용하여 기사를 게시 한 후 3 일 후에 맞춤법 오류를 수정하면 "게시 된 날짜"가 3 일 후에 해제됩니다. 이 올바른지? –

+1

네, 맞습니다. 이것이 귀하의 시나리오 인 경우 콘텐츠에 '게시 날짜'속성을 추가하는 것이 좋습니다. 그런 다음 이벤트 처리기를 통해 날짜를 설정하여 날짜를 처음 게시 할 때만 업데이트하거나 단순히 콘텐츠 편집기가 원하는 날짜를 선택할 수있는 필수 필드로 지정하도록 선택할 수 있습니다. – sitereactor

+0

네, 'Publish Date'속성을 추가하고 이벤트 핸들러를 만들어야 할 것 같습니다. –

1

Umbraco 7을 사용하는 경우 Umbraco.Core.Models.IContent 인터페이스의 ReleaseDate 속성을 확인하십시오. 분명히 "내용을 공개해야하는 날짜를 가져 오거나 설정합니다."

+0

그것은 이미 위의 답변에보고 된 것. 그것은 모든 변경 후에 날짜가 재설정되기 때문에 그것이 원하는 것을 찾는 것이 아닙니다. –

+0

나는 내 자신의 테스트를했으며, "Publish at"가 수정 (예 : 맞춤법 교정) 후 변경되지 않았기 때문에 백 오피스에서 라벨링 된 'ReleaseDate'를 발견했습니다. 그래서 나는 이것을 나의 필요에 사용할 수 있었다. @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

아마도 ". 생성 한"날짜를 사용해야한다고 생각합니다. 기사가 처음 게시 된 날짜입니다.

은 또한 당신은 당신의에서 DocType에서 사용자 정의 날짜 시간 속성을 사용하여로 검색하여 게시 날짜에 따라 다음 것을 사용할 수 있습니다

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

안부

관련 문제