들어가기전에

이번 3편은 예제 위주의 소개가 되기 때문에 특별한 설명보다는 다양한 예제를 중점적으로 소개하겠습니다. 그리고 트리거가 없는 대상의 경우는 조금 부연설명과 함께 소개하도록 하겠습니다. 본 예제들은 triggersample.zip 이라는 모듈명으로 만들어 놓았으니 테스트해보시고 필요한 곳에 응용하시기 바랍니다.
 

목차

XE에 심어져 있는 트리거 사용하기

  • 글 등록 시 몇가지 정보를 저장하기
  • 글 수정 시 비교 후 정보를 저장하기
  • 글 삭제 시 저장한 정보를 삭제하기
  • 접속자를 확인 후 특정 IP차단하기
  • 본문출력 전 메시지 출력하기
  • 관리자페이지 설명메뉴 트리거 사용하기
  • 내 모듈에서 트리거 만들기

 

XE에 심어져 있는 트리거 사용하기

글 등록 시 몇가지 정보를 저장하기

function moduleInstall()
{
    $oModuleController = &getController('module');
    $oModuleController->insertTrigger('document.insertDocument', 'triggersample', 'controller', 'triggerInsertTriggersample', 'after');

    return new Object();
}

function checkUpdate()
{
    $oModuleModel = &getModel('module');
    if(!$oModuleModel->getTrigger('document.insertDocument', 'triggersample', 'controller', 'triggerInsertTriggersample', 'after'))
    {
        return true;
    }

    return false;
}

function moduleUpdate()
{
    $oModuleModel = &getModel('module');
    $oModuleController = &getController('module');
    if(!$oModuleModel->getTrigger('document.insertDocument', 'triggersample', 'controller', 'triggerInserttriggersample', 'after'))
    {
        $oModuleController->insertTrigger('document.insertDocument', 'triggersample', 'controller', 'triggerInserttriggersample', 'after');
    }


    return new Object(0,'success_updated');

}

 

/**
 * @brief 등록 정보 추가
 **/
function triggerInsertTriggersample(&$obj)
{
    $args->module_srl = $obj->module_srl;
    $args->document_srl = $obj->document_srl;
    $args->type = 'insert';

    $this->insertTriggersample($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;
}

 

글 수정 시 비교 후 정보를 저장하기

function moduleInstall()
{
    $oModuleController = &getController('module');
    $oModuleController->insertTrigger('document.updateDocument', 'triggersample', 'controller', 'triggerUpdateTriggersample', 'before');

    return new Object();
}

function checkUpdate()
{
    $oModuleModel = &getModel('module');
    if(!$oModuleModel->getTrigger('document.updateDocument', 'triggersample', 'controller', 'triggerUpdateTriggersample', 'before'))
    {
        return true;
    }

    return false;
}

function moduleUpdate()
{
    $oModuleModel = &getModel('module');
    $oModuleController = &getController('module');
    if(!$oModuleModel->getTrigger('document.updateDocument', 'triggersample', 'controller', 'triggerUpdateTriggersample', 'before'))
    {
        $oModuleController->insertTrigger('document.updateDocument', 'triggersample', 'controller', 'triggerUpdateTriggersample', 'before');
    }


    return new Object(0,'success_updated');
}

 

/**
 * @brief 수정 정보 추가
 **/
function triggerUpdateTriggersample(&$obj)
{
    $oDocumentModel = &getModel('document');

    // 제목이 없는 글은 본문의 내용으로 대체한다.
    if(isset($obj->title))
    {
        if($obj->title == '') $document_obj->title = cut_str(strip_tags($obj->content), 20, '...');
        if($obj->title == '') $document_obj->title = 'Untitled';
    }

    // 특정 문구를 제거
    $document_obj->content = preg_replace('!<\!--(Before|After)(Document|Comment)\(([0-9]+),([0-9]+)\)-->!is', '', $obj->content);

    // 관리자 그룹이 아닐경우 본문에 HackTag를 제거
    if(Context::get('is_logged'))
    {
        $logged_info = Context::get('logged_info');

        if($logged_info->is_admin != 'Y')
        {
            $document_obj->content = removeHackTag($document_obj->content);
        }

    }

    // 현재 글 수정 시 입력받은 값과 비교할 기존의 글 정보를 가져옴
    $oDocument = $oDocumentModel->getDocument($obj->document_srl, FALSE, FALSE);
    $oldDocument = $oDocument->variables;

    if($oldDocument['title'] != $obj->title)
    {
        $args->type = 'update';
    }
    elseif($oldDocument['content'] != $obj->content)
    {
        $args->type = 'update';
    }

    $args->module_srl = $obj->module_srl;
    $args->document_srl = $obj->document_srl;
    if($args->type == 'update')
    {
        $this->insertTriggersample($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;
}

 

Atachment
첨부
TAG •
  • 많은 도움이 되었습니다 감사합니다.