글 삭제 시 저장한 정보를 삭제하기
function moduleInstall() { $oModuleController = &getController('module'); $oModuleController->insertTrigger('document.deleteDocument', 'triggersample', 'controller', 'triggerDeleteTriggersample', 'after'); return new Object(); } function checkUpdate() { $oModuleModel = &getModel('module'); if(!$oModuleModel->getTrigger('document.deleteDocument', 'triggersample', 'controller', 'triggerDeleteTriggersample', 'after')) { return true; } return false; } function moduleUpdate() { $oModuleModel = &getModel('module'); $oModuleController = &getController('module'); if(!$oModuleModel->getTrigger('document.deleteDocument', 'triggersample', 'controller', 'triggerDeleteTriggersample', 'after')) { $oModuleController->insertTrigger('document.deleteDocument', 'triggersample', 'controller', 'triggerDeleteTriggersample', 'after'); } return new Object(0,'success_updated'); }
/** * @brief 정보 삭제 **/ function triggerDeleteTriggersample(&$obj) { $args->module_srl = $obj->module_srl; $args->document_srl = $obj->document_srl; $this->deleteTriggersample($args); } /** * @brief 정보 추가 **/ function insertTriggersample($args = NULL) { if($args == NULL) { return new Object(-1, "msg_error_occured"); } // begin transaction $oDB = &DB::getInstance(); $oDB->begin(); $output = executeQuery('triggersample.insertTriggersample', $args); if(!$output->toBool()) { $oDB->rollback(); return new Object(-1, "msg_error_occured"); } // commit $oDB->commit(); return $output; }
접속자를 확인 후 특정 IP차단하기
function moduleInstall() { $oModuleController = &getController('module'); $oModuleController->insertTrigger('moduleObject.proc', 'triggersample', 'controller', 'triggerProcTriggersample', 'before'); return new Object(); } function checkUpdate() { $oModuleModel = &getModel('module'); if(!$oModuleModel->getTrigger('moduleObject.proc', 'triggersample', 'controller', 'triggerProcTriggersample', 'before')) { return true; } return false; } function moduleUpdate() { $oModuleModel = &getModel('module'); $oModuleController = &getController('module'); if(!$oModuleModel->getTrigger('moduleObject.proc', 'triggersample', 'controller', 'triggerProcTriggersample', 'before')) { $oModuleController->insertTrigger('moduleObject.proc', 'triggersample', 'controller', 'triggerProcTriggersample', 'before'); } return new Object(0,'success_updated'); }
/** * @brief IP차단하기 **/ function triggerProcTriggersample() { // 로그인 정보 가져오기 $logged_info = Context::get('logged_info'); if($logged_info->is_admin == 'Y') { return; } if($_SERVER['REMOTE_ADDR'] == '127.0.0.1') { Context::setResponseMethod('XMLRPC'); $header_message = sprintf("%s %s", 403, 'Forbidden'); header("HTTP/1.0 ".$header_message); header("Status: ".$header_message); header("Content-Type: text/html; charset=UTF-8"); $html = sprintf( '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html lang="en" xml:lang="en"><head><title>'. '%s</title></head><body><h1>%s</h1>IP block..</body></html>', $header_message, 'Forbidden' ); die($html); return new Object(); } }
본문출력 전 메시지 출력하기
function moduleInstall() { $oModuleController = &getController('module'); $oModuleController->insertTrigger('display', 'triggersample', 'controller', 'triggerDisplayTriggersample', 'before'); return new Object(); } function checkUpdate() { $oModuleModel = &getModel('module'); if(!$oModuleModel->getTrigger('display', 'triggersample', 'controller', 'triggerDisplayTriggersample', 'before')) { return true; } return false; } function moduleUpdate() { $oModuleModel = &getModel('module'); $oModuleController = &getController('module'); if(!$oModuleModel->getTrigger('display', 'triggersample', 'controller', 'triggerDisplayTriggersample', 'before')) { $oModuleController->insertTrigger('display', 'triggersample', 'controller', 'triggerDisplayTriggersample', 'before'); } return new Object(0,'success_updated'); }
/** * @brief 본문출력 전 메시지 출력하기 **/ function triggerDisplayTriggersample(&$output) { if((Context::get('module') != 'admin') && !Context::get('act')) { $message = "<font style='font-size:30px;font-weight:bold;'>Triggersample 예제입니다.</font> "; $output = "{$message}{$output}"; } }
관리자페이지 설정메뉴 트리거 사용하기
function moduleInstall() { $oModuleController = &getController('module'); $oModuleController->insertTrigger('module.dispAdditionSetup', 'triggersample', 'controller', 'triggerDispTriggersampleAdditionSetup', 'after'); return new Object(); } function checkUpdate() { $oModuleModel = &getModel('module'); if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'triggersample', 'controller', 'triggerDispTriggersampleAdditionSetup', 'after')) { return true; } return false; } function moduleUpdate() { $oModuleModel = &getModel('module'); $oModuleController = &getController('module'); if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'triggersample', 'controller', 'triggerDispTriggersampleAdditionSetup', 'after')) { $oModuleController->insertTrigger('module.dispAdditionSetup', 'triggersample', 'controller', 'triggerDispTriggersampleAdditionSetup', 'after'); } return new Object(0,'success_updated'); }
/** * @brief 관리자페이지 게시판 추가설정에 표시하기 **/ function triggerDispTriggersampleAdditionSetup(&$obj) { $oTemplate = &TemplateHandler::getInstance(); $tpl = $oTemplate->compile($this->module_path.'tpl', 'triggersample_setup'); $obj .= $tpl; return new Object(); }
내 모듈에서 트리거 만들기
/** * @brief 정보 추가 **/ function insertTriggersample($args = NULL) { if($args == NULL) { return new Object(-1, "msg_error_occured"); } // trigger 호출 (before) $output = ModuleHandler::triggerCall('triggersample.insertTriggersample', 'before', $args); if(!$output->toBool()) return $output; // begin transaction $oDB = &DB::getInstance(); $oDB->begin(); $output = executeQuery('triggersample.insertTriggersample', $args); if(!$output->toBool()) { $oDB->rollback(); return new Object(-1, "msg_error_occured"); } // trigger 호출 (after) if($output->toBool()) { $trigger_output = ModuleHandler::triggerCall('triggersample.insertTriggersample', 'after', $args); if(!$trigger_output->toBool()) { $oDB->rollback(); return $trigger_output; } } // commit $oDB->commit(); return $output; }
3편 마무리
의외의 분량이 나왔기에 트리거가 없는 대상 처리는 다음편에서 다루겠습니다. 이번 내용은 그간 1, 2편에서 설명했던 내용을 토대로 기본 예제를 만들어 구현을 해보았습니다. 예제는 첨부파일에 모듈로 만들어져있으며, 본 예제와 4편의 예제를 포함한 모듈입니다. 다음 4편에서는 트리거가 없는 대상 트리거 만들기를 통하여 일반 Javscript에서 jQuery, JAF를 이용한 방법까지 예제를 적어보겠습니다.