웹마스터 팁
확장변수에 회원정보를 넣어보자
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로 수정
위와 같이 수정을 하면 확장 변수의 검색도 정상적으로 동작합니다.
댓글 10
-
착한악마
2009.06.30 13:27
-
도파돌이
2009.06.30 21:43
좋은 팁 고마워요~~~~.
-
오르
2009.07.02 16:57
대단하네요..'ㅡ'
혹시 다른 형식의 확장변수 추가하는 법도 아시나요?
필요한 형식이
[단일선택] [한줄입력] [단일선택] [한줄입력] ......
이런식으로 된게 필요한데 어떻게 추가하는 법을 모르겠어요 ㅠㅠ
확장변수 추가 매뉴얼이라도 있으면 좋을려만..
-
개돌
2009.07.03 15:49
[단일선택] [한줄입력] [단일선택] [한줄입력]
이 중에 최종 DB에 저장되는 결과값은 어떤건가요 ?? 4개 전부???
만일 4개가 전부 들어간다면 그냥 가로배열로 레이아웃을 바꿔야 될것 같은데요.
그리고 [선택] => [입력] 두가지 정보가 필요한거라면
value 값을 [선택한값]-[입력한값] 과 같은 형식으로 묶어서 저장해야 될테고요..
위에 말씀하신것처럼 4개를 나오게 하려면 음... 저도 조금 복잡하네요 ...
// 단순히 [선택] 과 [입력]을 두줄로 나눠서 쓰는게 싫은신 거라면 레이아웃 수정을 권해봅니다.
-
뽀칠이
2009.07.07 20:07
확장변수에 주번 입력받을수 있는 형식?
또는 학년/ 반 입력 받을수 있는 형식?
즉 2칸짜리 받을수 있는 형식이 가능하면 팁으로 한번 부탁드리겠습니다.
-
개돌
2009.07.08 09:12
주번 = 주민등록번호 말씀이신가요?
입력폼 - 입력폼 <== 이렇게 두칸으로 받는거 말씀이시죠??
이런 경우 제 생각엔 값이 입력폼1-입력폼2 <== 이런식으로 결과를 저장해서 출력시 - 를 기준으로 나눠서 출력을 하는게 쉬울것 같은데요
그렇지 않다면 확장변수의 값이 복잡해 질것 같네요
-
Jiyoung540
2009.07.02 20:44
^^ 와!!! 좋네요!! 감사해요!! 팁공유! ^^ -
모노로그
2009.07.08 02:26
멋지십니다. ~!
-
살려주세요
2009.07.19 20:54
전화번호 국번 + 가운뎃 번호 + 끝 번호 이건 어떻게 구현해야 할까요?
국번은 당연히 단일선택, 셀렉트 박스고 나머지들은 텍스트 박스..
아 확장 변수를 사용할 줄을 몰라서 완전 헤매고 잇어요 ㅠㅠ
-
THEOTHERS
2010.08.12 15:50
대단하십니다. 고수의 숨결이 느껴지네요.. 따라 하기도 쉽지않네요 ㅜ ㅡ
제목 | 글쓴이 | 날짜 |
---|---|---|
익스플로어 즐겨찾기에 아이콘 추가하기 [7] | rolly™ | 2001.12.13 |
홈페이지에 Fade-in 적용하기~ [5] | remy | 2002.01.08 |
[1차패치] 내 msn 현재상태를 보여주자! + 캡처없앰 -ㅂ- [18] | 티르 | 2002.01.04 |
새로운필터를 적용한 칼라버튼.[ie5.5 sp2이상] [26] | 술도짱 | 2001.11.15 |
글입력상자에서 자동으로 한글, 영문 바뀌게 하기 [6] | 이경두 | 2001.11.15 |
글씨를 세로로 써봅시다...^_^ [6] | 술도짱 | 2001.11.14 |
XE 업데이트 방법 - 제3편 (1.2.4 에서 1.4.4.1 이상의 최신버전으로 업그레이드) + 문제대응 [8] | Gekkou | 2010.07.07 |
비밀번호 찾기 기능 조심하세요 [4] | 老姜君 | 2010.10.28 |
referer 로 사이트 차단하기.. [3] | 하얀마법 | 2010.06.20 |
내가 작성 한 글에 대한 일괄 삭제/이동/복사 권한 주기 [2] | 개돌 | 2009.05.15 |
(재 수정) 제로보드 XE 신버젼에 Lavalic 2 설치하기 [4] | 조성우371 | 2009.01.16 |
게시글을 다른 게시판에로 이동시 알아야 할 중요한 사항! [2] | 유샤인 | 2010.09.15 |
업데이트 후 Rewrite mod 사용이 안돼는 경우 [2] | 겨우리851 | 2009.06.18 |
확장변수에 회원정보를 넣어보자 [10] | 개돌 | 2009.06.30 |
관리자 페이지 (module=admin) 백지 문제 [5] | 개돌 | 2009.03.17 |
XE DB 백업한거 복원 하기 [2] | 라르게덴 | 2009.03.17 |
lighttpd 에서 XE rewrite 기능 (.htaccess) 사용하기 [2] | msl2246 | 2009.02.28 |
게시글 등록시 ''제목색깔''과 ''제목굵게'' 기능을 일반 사용자들에게도 주자. [5] | 비나무 | 2008.10.15 |
에디터에 웹폰트를 추가하여 사용하기 [3] | 하얌이 | 2010.10.18 |
플래시를 이용한 최근게시물 구현 [6] | 한그림 | 2010.10.13 |
와~~이 기능은 planner할때 사용해도 좋을듯합니다...진짜 좋은 기능같습니다.
사용따라 다양하게 할수 있을거 같네요..^^