게시판에 새 글 작성 후 게시물, 사용자 정보 등을 가져오는 애드온

김재동 • August 14, 2012

xpressengine

만들고자 하는 것 : 게시물의 확장변수를 재조합하여 코드화한 후 태그에 강제로 입력하는 애드온

게시물의 작성을 완료하기 전에는 document_srl이 부여되지 않으므로 게시글의 제목이나 내용, 태그, 확장변수 등을 가져오는 것이 쉽지 않았다. 그래서 애드온의 호출시점을 before_module_proc에서 after_module_proc로 바꿀 수 밖에 없었다. 생각에는 이렇게 DB에 update를 한 후 확장변수를 불러와서 다시 한번 tags에 저장을 하는 것 말고는 딱히 방법이 없을 것 같아 sol님께 문의해보았더니 DB에 update를 두 번하는 것이라 비효율적이라서 차라리 트리거를 쓰는 것이 낫겠다는 답변을 얻었다. 그래서 이제는 트리거에 대해 공부를 해야 한다. 트리거로 넘어가기 전에 그동안 공부한 내용을 정리해 보고자 한다.

게시물 정보 가져오기

addon_name.addon.php

<?php
if(!defined('__XE__')) exit();

// 새 글을 작성해서 저장버튼을 누르고 act가 실행되고 난 직후
if(Context::get('act')=='procBoardInsertDocument' &amp;&amp; $called_position == 'after_module_proc' &amp;&amp; $this->toBool()) {
    // document_srl을 구함.
    $document_srl = $this->get('document_srl');
    // comment_srl을 구함.
    $comment_srl = $this->get('comment_srl');
    // 게시물의 각종 변수에 접근하기 위해 oDocument 객체변수 사용이 필요.
    // document 모델을 oDocumentModel에 저장
    $oDocumentModel = &amp;getModel('document');
    // DocumentModel의 getDocument method를 통해 oDocument 인스턴스 생성(생성을 위해서는 document_srl이 필요함)
    $oDocument = $oDocumentModel->getDocument($document_srl);
    // 제목
    $title = $oDocument->get('title');
    // 내용(HTML코드가 trim되지 않은 형태)
    $content = $oDocument->get('content');
    // 태그(trim되지 않은 원형 그대로)
    $tags = $oDocument->get('tags');
    debugPrint("[document_srl] ".$document_srl."\n[comment_srl] ".$comment_srl."\n[title] ".$title."\n[content] ".$content."\n[tags] ".$tags);
}
?>

결국 확장변수를 어떻게 불러오는지까지는 알아내지 못했다. Document Model은 Document 클래스를 상속하고 있고 Document Model 클래스의 getDocument 메서드는 새로운 document_item 클래스를 생성한다.

회원 정보 가져오기

    // 로그인 중이면 1(TRUE) 아니면 0(FALSE)
    $is_logged = Context::get(is_logged);
    //debugPrint($is_logged);
    // 사용자의 로그인 정보에 접근 logged_info는 배열형태로 저장 됨.
    $logged_info = Context::get(logged_info);
    // logged_info에서 사용자 아이디(user_id)를 가져옴.
    debugPrint("userid : ".$logged_info->user_id);

회원 정보(logged_info)에는 다음과 같은 내용들이 저장된다.

stdClass Object (
    [member_srl] => 4   // $logged_info->member_srl 회원 고유번호
    [user_id] =>        // $logged_info->user_id 아이디
    [email_address] =>  // $logged_info->email_address 이메일 주소
    [password] =>       // $logged_info->password 비밀번호
    [email_id] =>       // $logged_info->email_id 이메일 아이디
    [email_host] =>     // $logged_info->email_host 이메일 호스트
    [user_name] =>      // $logged_info->user_name 이름
    [nick_name] =>      // $logged_info->nick_name 닉네임
    [find_account_question] => 0 XE 공홈에서 사용하는 듯...질문찾기?
    [find_account_answer] =>  XE 공홈에서 사용하는 듯...답변찾기?
    [homepage] =>       // $logged_info->homepage 홈페이지
    [blog] =>           //$logged_info->blog 블로그
    [birthday] =>       // $logged_info->birthday 생년월일 (YYYYMMDD)
    [allow_mailing] => N    // $logged_info->allow_mailing 메일링 가입
    [allow_message] => Y    // $logged_info->allow_message 쪽지 수신 허용
    [denied] => N       // $logged_info->denied 사용중지
    [limit_date] =>     // $logged_info->limit_date 제한일
    [regdate] =>        // $logged_info->regdate 회원가입일자
    [last_login] =>     // $logged_info->last_login 최종 로그인 일자
    [change_password_date] =>   // $logged_info->change_password_date 비밀번호 변경일자
    [is_admin] => Y      // $logged_info->is_admin 관리자 확인
    [description] =>        // $logged_info->description 설명
    [list_order] =>         // $logged_info->list_order ???
    [profile_image] =>  // $logged_info->profile_image 프로필 이미지
    [image_name] => // $logged_info->image_name 이름 이미지 경로
    [image_mark] =>     // $logged_info->image_mark 그룹 이미지 경로
    [signature] =>      // $logged_info->signature 서명
    [group_list] => Array ( [1] => 준회원 )  // $logged_info->group_list 소속 그룹 목록
    [is_openid] =>      // $logged_info->is_openid 오픈아이디
    [menu_list] => Array (
        [dispMemberInfo] => 회원 정보 보기
        [dispMemberScrappedDocument] => 스크랩 보기
        [dispMemberSavedDocument] => 저장함 보기
        [dispMemberOwnDocument] => 작성 글 보기
        [dispCommunicationFriend] => 친구 보기
        [dispCommunicationMessages] => 쪽지함 보기
        )
    [is_site_admin] =>  // $logged_info->is_site_admin 가상 사이트 관리자 확인
)

참고