2012-12-16 1 views
2

업데이트 :저장 버튼을 클릭하고 변경 사항을 저장하기 전에 컨텐츠 탭에서 노드의 저장되지 않은 속성 값을 변경하십시오. Umbraco

내가 저장 버튼을 클릭 한 후와의 BackOffice 콘텐츠 탭에서 프로그램 변경 사항을 저장하기 전에 변경되었습니다 노드의 속성 값을 싶어.

노드에 많은 특성이 포함될 수 있습니다. 저장 버튼을 클릭하면 노드의 속성에 대한 새로운 변경 값을 먼저 가져 오려고합니다. Umbraco는 서버 측에서 API를 가져와야한다고 생각합니다.

어떤 아이디어라도 대단히 감사하겠습니다.

+0

내 업데이 트를 찾아주세요 Umbraco 4.11

건배

조나단이 테스트. 필요한 경우 더 많은 정보를 제공 할 수 있습니다. – Pingpong

답변

0

변경 사항을 확인하려는 umbraco 관리자의 필드를 대상으로하는 jquery 이벤트 처리기를 사용하면됩니다. 이 예제는 모니터링하려는 umbraco 필드의 레이블을 찾은 다음 레이블에 형제 인 필드가 변경 될 때 실행되는 jquery 이벤트 핸들러를 추가하여 작동합니다.이 예제는 'Name '필드에 있습니다. 모든 노드의'등록 정보 '탭에 있습니다. 다른 필드 유형은 값을 다르게 보유하므로 일반적으로 $ (this) .val()은 모든 필드 유형이 아닌 대부분의 경우에 작동해야합니다. 당신은 IApplicationEventHandler 클래스의 Document.BeforeSave 방법으로 배선 할 \ umbraco \ editcontent.aspx

<script type="text/javascript"> 
     $(document).ready(function() { 
      $("div.propertyItemheader:contains('Name') + div.propertyItemContent").keyup(function() { 
       alert("field changed"); 
      }); 

     }); 
</script> 
+0

노드에 많은 특성이 포함될 수 있습니다. 이상적으로는 서버 측 로직을 원합니다. – Pingpong

+0

여기에서 클라이언트 측 작업을 수행하는 것은 Umbraco가 이러한 이벤트와 속성 서버 측을 노출하는 모범 사례 내에서 실제로 존재하지 않습니다. – Dillorscroft

1

의 말에

드롭이. 지금처럼 (당신이 "오렌지"가 "사과"에서 bodyText을 변경하고 가정) :

using umbraco.cms.businesslogic.web; 
using Umbraco.Core; 
using Umbraco.Web; 


namespace ClassLibrary1 
{ 
    public class Class1 : IApplicationEventHandler 
    { 
     public void OnApplicationStarted(UmbracoApplication httpApplication, ApplicationContext applicationContext) 
     { 
      Document.BeforeSave += new Document.SaveEventHandler(Document_BeforeSave); 
      Document.AfterSave += new Document.SaveEventHandler(Document_AfterSave); 
     } 

     void Document_BeforeSave(Document sender, umbraco.cms.businesslogic.SaveEventArgs e) 
     { 
      // your code goes here! 
      sender.getProperty("bodyText").Value // returns apple 
     } 

     void Document_AfterSave(Document sender, umbraco.cms.businesslogic.SaveEventArgs e) 
     { 
      // your code goes here! 
      sender.getProperty("bodyText").Value // returns orange 
     } 

     public void OnApplicationStarting(UmbracoApplication httpApplication, ApplicationContext applicationContext) 
     { 
      // unused 
     } 

     public void OnApplicationInitialized(UmbracoApplication httpApplication, ApplicationContext applicationContext) 
     { 
      // unused 
     } 

    } 
} 

나는

+0

나는 그것을 시험해 보았다. 그러나 Document_BeforeSave에있는 보낸 사람의 상태는 변경되지 않고 저장되지 않은 값이 아닙니다. 예를 들어 사과에서 오렌지까지 문서 A의 내용을 변경하고 저장 버튼을 클릭하면 보낸 사람이 오렌지가 아닌 사과를 반환합니다. – Pingpong

+0

AfterSave 이벤트에서 당신은'sender.getProperty ("bodyText")에서 "orange"를 얻을 것입니다 .Value ("bodyText"를 당신이 가진 속성으로 대체하십시오) – Jonathan

관련 문제