XpressEngine에서 트리거라는 것은 어떤 동작을 수행하기에 앞서 미리 정의된 트리거 이름으로 등록된 내용(함수)이 있다면 이를 먼저 수행하는 기능을 하게 됩니다.

예를 들어, documentController 클래스에서 게시물을 저장하는데, 이 동작을 수행하기에 앞서 document.insertDocument 라는 이름으로 호출 위치가 before 즉, 선행되어야할 동작이 등록되어 있다면 이를 먼저 수행한 후 게시물을 저장하게 됩니다. 게시물을 저장하는 동작이 끝난 다음에는 document.insertDocument 라는 트리거 이름에 호출 위치가 after로 등록되어 있는 동작을 수행하게 됩니다.

코드는 대충 아래와 같은 형태가 됩니다.


...

// trigger 호출 (before)
$output = ModuleHandler::triggerCall('document.insertDocument', 'before', $obj);
if(!$output->toBool()) return $output;

// 실제 문서 저장 루틴
...

// trigger 호출 (after)
if($output->toBool()) {
    $trigger_output = ModuleHandler::triggerCall('document.insertDocument', 'after', $obj);
    if(!$trigger_output->toBool()) {
        $oDB->rollback();
        return $trigger_output;
    }
}

...


따라서, 만약 게시물이 저장하기에 앞서 내용에 어떤 필터링을 가하고 싶다면, document.insertDocument 라는 트리거 이름을 갖는 함수를 등록해주면 됩니다. 다만, 트리거에 의해 호출되는 함수는 반드시 모듈에 존재해야 합니다. 아직까지 XpressEngine에서는 애드온 등의 함수를 트리거에 의해 호출하는 방법은 없습니다. 따라서, 트리거 기능을 이용하기 위해서는 새로운 모듈을 만들어야 합니다.

예를 들어, 게시물이 등록되기에 앞서 내용에 어떤 필터링을 가하기 위해, 새로운 모듈을 만들고 그 모듈을 설치 혹은 업데이트하는 과정에 아래와 같은 내용을 추가합니다.


...

$oModuleController = &getController('module');
$oModuleController->insertTrigger('document.insertDocument', 'someclass', 'controller', 'triggerInsertDocumentFilter', 'before');

...


이처럼 어떤 특정 동작에 자신이 원하는 기능을 추가하기 위해 트리거를 등록해놓으면, 해당 동작이 실행될 때마다 자신이 등록해놓은 추가 기능을 수행하게 됩니다.

이와 비슷하게 애드온이 있습니다만, 애드온은 보다 일반적인 추가 기능을 위해 사용하는 경우가 많고, 트리거는 어떤 특정 동작에 원하는 기능을 추가하기 위해 사용하게 됩니다.

XpressEngine에서 애드온이 호출되는 시점은 총 4번으로

•before_module_init
•before_module_proc
•after_module_proc
•before_display_content
이며, 애드온에 대한 자세한 내용은 XpressEngine 메뉴얼을 참고하시기 바랍니다.


아래는 XpressEngine의 최신 버전인 1.2.1 r6096 을 기준으로 각 모듈의 트리거 이름 목록을 정리합니다.


Class
Function
Trigger Name
Call
boardAdminView
dispBoardAdminBoardAdditionSetup
module.dispAdditionSetup before/after
commentModel
getCommentMenu
comment.getCommentMenu
before/after
commentController
insertComment
comment.insertComment
before/after

updateComment comment.updateComment
before/after

deleteComment comment.deleteComment
before/after
documentModel
getDocumentMenu document.getDocumentMenu
before/after
documentController insertDocument document.insertDocument
before/after

updateDocument document.updateDocument
before/after

deleteDocument document.deleteDocument
before/after

updateReadedCount document.updateReadedCount
after
   updateVotedCount document.updateVotedCount
after
fileController
downloadFile file.downloadFile
before/after

insertFile file.insertFile
before/after

deleteFile file.deleteFile
before/after
homepageView
dispHomepageBoardAddition
module.dispAdditionSetup
before/after
issuetrackerAdminView
dispIssuetrackerAdminAdditionSetup
module.dispAdditionSetup
before/after
memberController
doLogout member.doLogout
before/after

procMemberModifyInfo
member.doLogin
after

procMemberAuthAccount
member.doLogin after

doLogin
member.doLogin
before/after

insertMember member.insertMember
before/after

updateMember member.updateMember
before/after

deleteMember member.deleteMember
before/after
memberModel
getMemberMenu member.getMemberMenu
before/after
moduleController
deleteModule module.deleteModule
before/after
moduleAdminView
dispModuleAdminModuleAdditionSetup
module.dispAdditionSetup
before/after
trackbackController
insertTrackback trackback.insertTrackback
before
wikiAdminView
dispWikiAdminWikiAdditionSetup
module.dispAdditionSetup
before/after

배포자 mooo
현재평점 10 (평가자 수 : 1)
profile

여기에서 행복한 시간 되십시오.