2012-11-16 2 views
0

silverstripe에서 게시 명령을 가로 챌 수있는 함수를 작성하는 방법을 누구에게 말해 줄 수 있습니까? 페이지 변경이 발생할 때마다 다른 시스템에 대한 HTTP 호출이 전송되는 시스템을 구현하여 관리자에게 페이지가 변경되었음을 알립니다. 시스템이 승인되지 않은 경우 변경 사항을 제거 할 수있는 시간을 관리자에게 제공하기 위해 몇 분 정도 기다려야합니다.Silverstripe function intercept

+0

나는이 같은 것을 찾고 있다고 생각하니? http://www.silverstripe.org/cms-workflow-module/ –

답변

1

이 목적으로 사용할 수있는 SiteTree 클래스에는 다양한 이벤트 후크가 있습니다.

class MySiteTreeExtension extends DataExtension { 
    function onAfterPublish() { 
     $this->notifyMyAdmin(sprintf('Page "%s" has been published', $this->owner->Title)); 
    } 
} 

mysite/_config.php에 다음 추가하여 확장 적용 :

Object::add_extension('SiteTree', 'MySiteTreeExtension'); 

당신은 분명히 그 HTTP 호출을 할 수있는 notifyMyAdmin() 메소드를 구현해야합니다. 일반적으로 사용자 동작에 대해 동기 HTTP 호출을 수행하지 말 것을 권합니다. 시스템이 다른 시스템의 가용성에 종속되어 있기 때문입니다. 대신 messagequeue 모듈을 사용하는 것이 좋습니다. "출판과 함께 몇 분간 기다려야한다"는 측면에서 : 확장 시스템을 통해 출판물을 거부하는 것은 불가능합니다. 이 목적을 위해 서브 클래스에서 SiteTree->doPublish()을 덮어 쓸 수 있지만 여전히 사용자에게는 이상한 UI 패턴이됩니다. 워크 플로우 모듈과 "Request Publication"플러스 일부 cron 작업을 자동 승인하는 것이 더 간단합니다.

+0

잉고, 머리를 주셔서 감사합니다. 나는 당신이 제안하고있는 "Request Publication"을 어떻게하는지 확신 할 수 없다. onAfterPublish는 유용합니다. 감사합니다. –