일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- PHP
- dovecot
- 안드로이드 푸시
- Android
- javascript
- mysql
- 자바스크립트
- php 시큐어코딩
- C# IO
- not working
- 자동 생성
- chart.js
- php 취약점
- FCM
- C#
- UML
- html5
- 안드로이드
- soundpool
- 안드로이드 gcm
- roundcube
- 안드로이드 푸쉬
- 설치
- 우분투
- xe
- 폼메일
- curl
- WebView
- android 효과음
- Mail Server
- Today
- Total
그러냐
[기초] XE구조의 비밀 그 다섯번째 - 끼어들기의 신 "트리거(trigger)"!! 본문
출처 : https://conory.com/blog/14432
애드온과 비슷한 성격을 가진 트리거에 대해서 알아보겠습니다.
지난강좌에서 애드온은 XE실행에 관여하는 일종의 프로그램이다고 했습니다.
이번강좌에서 배울 트리거도 마찬가지로 XE실행에 관여할 수 있습니다.
트리거!! 누구냐 넌!!
trigger (트리거)는 "총의 방아쇠"라는 뜻입니다. 즉 그 방아쇠를 당겨 총을 쏠 수 있겠지요.. 그런 느낌입니다..
XE에서 trigger는 XE실행중에 다른모듈이 끼어들 수 있는 기능입니다.
그럼 trigger와 애드온의 차이점이 뭐죠?
바로 모듈실행중에 끼어들 수 있다는 점입니다.
애드온은 전체 XE실행 중간에는 끼어들 수 있지만 모듈실행 중에는 끼어들지 못합니다. (모듈실행시작전, 모듈실행종료후에만 가능)
그러나 trigger는 그부분에서 호출만 해준다면 어느곳이나 다 끼어들 수 있습니다.
trigger가 끼어드는 법
트리거는 trigger name과 called position에 의해 구별됩니다.
트리거를 호출하면 해당 trigger name과 called position으로 등록된 함수들이 실행됩니다.
그래서 trigger 함수실행을 통해 다른모듈이 실행중인 모듈에 관여하게 됩니다.
trigger name : 보통 "모듈명.함수명"으로 정해집니다. 예) 'document.updateDocument'
called position : 호출되는 위치를 표시 (보통 before , after를 사용)
*트리거 등록
보통 모듈 설치시 해당 모듈에서 사용할 트리거를 등록합니다.
트리거 호출시 실행함수가 있는 "호출모듈명, 호출클래스명, 호출함수명"과 함께 등록합니다.
그리고 등록한 "호출모듈명, 호출클래스명" 위치에 "호출함수명"으로 된 실행함수가 있어야합니다.
$oModuleController = getController('module');
$oModuleController->insertTrigger(trigger name, 호출모듈명, 호출클래스명, 호출함수명, called position);
*트리거 확인
이미 등록된 트리거인지 아래코드로 알 수 있습니다.
$oModuleModel = getModel('module');
$oModuleModel->getTrigger(trigger name, 호출모듈명, 호출클래스명, 호출함수명, called position);
*트리거 호출
끼어들기를 당할 위치에서 아래코드로 트리거 호출하면 해당 트리거에 등록된 실행함수들이 실행됩니다.
obj 에다 데이터를 넣어주면 실행함수를 실행시킬때 함수인자로 들어갑니다.
$output = ModuleHandler::triggerCall(trigger name, called position, obj);
if(!$output->toBool()) return $output;
*트리거 제거
이제 트리거가 필요없어졌거나 모듈삭제시 아래코드 실행으로 등록된 트리거를 삭제할 수 있습니다.
$oModuleModel = getModel('module');
$oModuleModel->deleteTrigger(trigger name, 호출모듈명, 호출클래스명, 호출함수명, called position);
예시) 문서등록 트리거 - document.insertDocument
- document모듈의 insertDocument 함수에서 트리거 호출
$output = ModuleHandler::triggerCall('document.insertDocument', 'after', $obj);
if(!$output->toBool()) return $output;
- 문서등록시 포인트를 지급하기위해 트리거등록
//포인트 모듈설치시
if(!$oModuleModel->getTrigger('document.insertDocument', 'point', 'controller', 'triggerInsertDocument', 'after'))
$oModuleController->insertTrigger('document.insertDocument', 'point', 'controller', 'triggerInsertDocument', 'after');
- 트리거 실행함수
//point.controller.php 파일위치
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | /** * @brief A trigger to add points to the member for creating a post */ function triggerInsertDocument(& $obj ) { $oDocumentModel = getModel( 'document' ); if ( $obj ->status != $oDocumentModel ->getConfigStatus( 'temp' )) { $module_srl = $obj ->module_srl; $member_srl = $obj ->member_srl; if (! $module_srl || ! $member_srl ) return new Object(); // The fix to disable giving points for saving the document temporarily if ( $module_srl == $member_srl ) return new Object(); // Get the point module information $oModuleModel = getModel( 'module' ); $config = $oModuleModel ->getModuleConfig( 'point' ); $module_config = $oModuleModel ->getModulePartConfig( 'point' , $module_srl ); // Get the points of the member $oPointModel = getModel( 'point' ); $cur_point = $oPointModel ->getPoint( $member_srl , true); $point = $module_config [ 'insert_document' ]; if ( strlen ( $point ) == 0 && ! is_int ( $point )) $point = $config ->insert_document; $cur_point += $point ; // Add points for attaching a file $point = $module_config [ 'upload_file' ]; if ( strlen ( $point ) == 0 && ! is_int ( $point )) $point = $config ->upload_file; if ( $obj ->uploaded_count) $cur_point += $point * $obj ->uploaded_count; // Increase the point $this ->setPoint( $member_srl , $cur_point ); } return new Object(); } |
'php' 카테고리의 다른 글
ipTIME NAS 에 설치한 XE, 다올CMS 첨부파일 버튼 무반응 해결 (0) | 2018.07.16 |
---|---|
[xe개발] 게시판 글 쓰기 처리 순서 과정 (0) | 2018.07.11 |
XE Trigger 완전 정복하기 2편 (0) | 2018.07.11 |
[PHP] 다중 파일을 zip으로 묶어받기 (1) | 2017.12.11 |
PHPExcel 에서 줄바꿈 처리 (0) | 2017.12.07 |