만들고자 하는 것 : 게시물의 확장변수를 재조합하여 코드화한 후 태그에 강제로 입력하는 애드온
게시물의 작성을 완료하기 전에는 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' && $called_position == 'after_module_proc' && $this->toBool()) {
// document_srl을 구함.
$document_srl = $this->get('document_srl');
// comment_srl을 구함.
$comment_srl = $this->get('comment_srl');
// 게시물의 각종 변수에 접근하기 위해 oDocument 객체변수 사용이 필요.
// document 모델을 oDocumentModel에 저장
$oDocumentModel = &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 가상 사이트 관리자 확인
)
참고
- Context의 이해 http://www.xeschool.com/xe/xenote_understanding_of_context
- 유용한 변수 logged_info http://www.xeschool.com/xe/xenote_useful_variable_logged_info