웹마스터 팁
확장변수에 회원정보를 넣어보자
2009.06.30 10:46
* 게시물을 다 작성하고 나서 보니 codehighlighter가 이상하게 나오네요.
* 줄바꿈이 안되서 줄번호도 하나밖에 안나오고요 .. 이점 양해하면서 봐주세요 ㅠ.ㅠ
* 첨부파일은 아래 정리한 내용 파일로 정리한 겁니다.
XE 게시물 작성 시 확장 변수라는 것을 사용할 수 있습니다.
확장 변수의 종류에는
- 일반 테스트 박스
- 셀렉트 박스
- 체크박스
- 라디오박스
- 전화번호
- 이메일
- 한국주소
등의 형식이 있습니다.
하지만 이 확장변수에 회원정보를 넣고 싶다면 ??
이슈 트래커는 소유자라는 항목에 이와 비슷한 기능이 포함되어있습니다.
개발자 그룹에 한해 소유자 리스트에 회원 목록이 나오죠.
이러한 기능을 확장 변수에 추가해 봤습니다.
"제로님 이거 추후 버젼에 기능 추가로 넣어주시면 감사하겠습니다"
우선 몇개의 파일 수정과 파일 추가가 필요합니다.
아래 내용은 XE1.2.4로 작성 하였습니다.
1. 관리자 페이지의 확장 변수 항목에 회원정보 항목 추가
$lang->column_type = '형식'; $lang->column_type_list['text'] = '한줄 입력칸 (text)'; $lang->column_type_list['homepage'] = 'URL 형식'; $lang->column_type_list['email_address'] = '이메일 형식 (email)'; $lang->column_type_list['tel'] = '전화번호 형식 (phone)'; $lang->column_type_list['textarea'] = '여러줄 입력칸 (textarea)'; $lang->column_type_list['checkbox'] = '다중 선택 (checkbox)'; $lang->column_type_list['select'] = '단일 선택 (select)'; $lang->column_type_list['radio'] = '라디오 버튼 (radio)'; $lang->column_type_list['kr_zip'] = '한국주소 (zip)'; $lang->column_type_list['date'] = '일자 (년월일)'; $lang->column_type_list['member'] = '회원정보';
line 272
<query id="getGroupMemberList" action="select"> <tables> <table name="member" alias="member"/> <table name="member_group_member" alias="group_member"/> </tables> <columns> <column name="member.*" /> <column name="group_member.*" /> </columns> <conditions> <condition operation="in" column="group_member.group_srl" var="group_srl" /> <condition operation="equal" column="group_member.member_srl" var="member.member_srl" pipe="and" /> </conditions> <navigation> <index var="sort_index" default="member.nick_name" order="asc" /> </navigation> </query>
function doSelectGroup(column_name, target_name) { var field_obj = xGetElementById('fo_write')[column_name]; var group_srl = field_obj.value; if(group_srl){ var response_tags = new Array('error'+ '+ ','message','member_list'); exec_xml('member','dispGroupInMember',{group_srl:group_srl}, completerSearchMember,response_tags, target_name); } } function completerSearchMember(ret_obj, response_tags, fo_obj) { var selectbox = null; selectbox = xGetElementById(fo_obj); for(i=0;i<selectbox.options.length;i++){ selectbox.options[i] = null; } if(ret_obj['error'] == 0 && ret_obj.member_list){ var it = new Array(); var items = ret_obj['member_list']['item']; var sel = 0; if(typeof(items) == 'undefined'){ it = ret_obj['member_list']; selectbox.options[0]=new Option(it.nick_name+'('+it.user_id+')',it.member_srl); }else{ it = items; for(var i=0,c=it.length;i<c;i++){ selectbox.options[i]=new Option(it[i].nick_name+'+ '('+it[i].user_id+')',it[i].member_srl); } } selectbox.options[sel].selected = true; }else{ alert('대상이 없습니다.'); } }
<action name="dispGroupInMember" type="view" standalone="true" />
dispGroupInMember 함수를 실행하면 member.view.php 파일을 찾게 될겁니다.
/** * @brief Group list **/ function getGroupList() { $oMemberModel = &getModel('member'); $group_list = $oMemberModel->getGroups(); return $group_list; } /** * @brief member info **/ function getMemberInfo($member_srl) { $oMemberModel = &getModel('member'); $member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl); return $member_info; }
getGroupList 함수는 글 작성시 확장 변수에 그룹 정보를 출력할때 사용하는 함수이며
case 'member' : if(!$value) { $group_list = $this->getGroupList(); return $group_list; }else return $value; break;
case 'member' : if($value) { $member_info = $this->getMemberInfo($value); $values = $member_info->nick_name; } return sprintf('<span class="nick_name member_%s">%s</span>', $value, $values); break;
case 'member' : $buff .= '<select name="group_srl" class="select" onchange="doSelectGroup(this.name, \''.$column_name.'\');">'; foreach($default as $v) { if($value && in_array($v,$value)) $selected = ' selected="selected"'; else $selected = ''; $buff .= '<option value="'.$v->group_srl.'" '.$selected.'>'.$v->title.'</option>'; } $buff .= '</select> '; $buff .= '<select name="'.$column_name.'" id="'.$column_name.'" class="select">'; $buff .= '</select>'; break;
/** * @brief group_srl에 해당하는 member 리스트 가져오기 **/ function dispGroupInMember(){ $group_srl = Context::get('group_srl'); $oMemberModel = &getModel('member'+ '); $member_list = $oMemberModel->getGroupMemberList($group_srl); $this->add('member_list'+ ', $member_list); }
member.model.php 의 getGroupMemberList 함수를 실행하여 해당 그룹의 멤버 정보를 가져와서 member_list로 담습니다.
/** * @brief group_srl에 해당하는 회원 리스트 가져옴 **/ function getGroupMemberList($group_srl) { if(!$group_srl) return; $args->group_srl = $group_srl; $output = executeQuery('member.getGroupMemberList', $args); return $output->data; }
<!--#include("header.html")--> <!--%import("../../tpl/js/member_list.js")-->
2번 라인의 member_list.js 파일을 import 해줬습니다.
/*===================긴급 추가====================*/
위 내용 적용 시 확장변수에서 이름검색이 되지 않는 문제가 발생 하였습니다.
이를 해결하기 위해 몇가지 추가 작업이 필요하네요.
1. 회원정보 확장변수의 이름을 공통적으로 member로 지정합니다.
2. 획장변수의 검색방식을 var_idx 에서 eid로 변경합니다.
- /modules/board/board.view.php line 82
/**
* 목록이 노출될때 같이 나오는 검색 옵션을 정리하여 스킨에서 쓸 수 있도록 context set
* 확장변수에서 검색 선택된 항목이 있으면 역시 추가
**/
// 템플릿에서 사용할 검색옵션 세팅 (검색옵션 key값은 미리 선언되어 있는데 이에 대한 언어별 변경을 함)
foreach($this->search_option as $opt) $search_option[$opt] = Context::getLang($opt);
$extra_keys = Context::get('extra_keys');
if($extra_keys) {
foreach($extra_keys as $key => $val) {
if($val->search == 'Y') $search_option['extra_vars'.$val->eid] = $val->name;
}
}
Context::set('search_option', $search_option);
- idx 를 eid로 변경했습니다.
3. 검색소스를 수정 합니다.
- /modules/document/document.model.php ime 258
default :
if(strpos($search_target,'extra_vars')!==false) {
// $args->var_idx = substr($search_target, strlen('extra_vars'));
$args->var_eid = substr($search_target, strlen('extra_vars'));
$args->var_value = str_replace(' ','%',$search_keyword);
if($args->var_eid=='member'){
$oMemberModel = &getModel('member');
$member_srl = $oMemberModel->getMemberSrlByNickName($args->var_value);
$args->var_value = $member_srl;
}
$args->sort_index = 'documents.'.$args->sort_index;
$query_id = 'document.getDocumentListWithExtraVars';
}
break;
- 기존의 var_idx로 검색하던 부분을 eid로 검색하도록 수정
- eid가 member일 경우(1번항목에서 member로 지정한 이유가 이 부분 때문입니다.) nick_name 을 member_srl로 변환
- member_srl 을 검색값으로 변경
4. 쿼리문 수정
- /modules/document/queries/getDocumentListWithExtraVars.xml line 14
<condition operation="equal" column="extra_vars.eid" var="var_eid" notnull="notnull" pipe="and" />
- 각각 var_idx를 eid로 var_idx 를 var_eid로 수정
위와 같이 수정을 하면 확장 변수의 검색도 정상적으로 동작합니다.