웹마스터 팁

* 게시물을 다 작성하고 나서 보니 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'] = '회원정보';
 
member0.jpg

line 272
$lang->column_type_list['member'] = '회원정보';  항목을 추가합니다.
 
2. 그룹 정보를 가져올 수 있도록 xml 쿼리를 하나 추가합니다.
 
<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>

 

관리자 페이지의 회원관리에 설정해둔 그룹 정보를 가져올때 사용할 쿼리 문입니다.
 
3. 그룹 선택시 회원정보를 가져오는 스크립트 파일을 추가합니다.
 
 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('대상이 없습니다.');
 }
}
 
4. 그룹 선택시 회원정보를 가져오는 함수를 실행 하기 위해 module을 수정합니다.
 
   <action name="dispGroupInMember" type="view" standalone="true" />

dispGroupInMember 함수를 실행하면 member.view.php 파일을 찾게 될겁니다.
 
기반 작업은 다 되었습니다.
정보를 가져오고 출력하는 부분을 수정해 보겠습니다.
 
5. 우선 확장 변수가 member일 경우 그룹 정보를 가져오도록 수정 합니다.(2개의 함수 추가)
 
 /**
         * @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 함수는 글 작성시 확장 변수에 그룹 정보를 출력할때 사용하는 함수이며
getMemberInfo 는 글 내용 출력 시 입력된 회원 정보를 가져오는 함수 입니다.
 
6. 확장변수 type이 member일 경우에 대한 처리를 추가합니다.
 case 'member' :
      if(!$value) {
       $group_list = $this->getGroupList();      
                      return $group_list;
      }else return $value;
                    break;
value가 있으면 그대로 리턴을 하고(내용 출력시) 없으면 그룹 정보를 가져옵니다.(글 작성 시)
 
7. 글 내용 출력시 회원 정보를 html로 출력 하는 소스 추가
 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;
글 내용 출력 시 type이 member 이면 해당 member_srl을 이용해 회원정보를 가져와 내용을 클릭하면 회원정보 팝업이 뜨도록 만듭니다.
 
8. 글 작성 시 그룹 리스트 + 회원 리스트 셀렉트 박스를 출력하는 HTML 소스 추가
 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>&nbsp;&nbsp;';
      $buff .= '<select name="'.$column_name.'" id="'.$column_name.'" class="select">';
      $buff .= '</select>';
     break;
doSelectGroup 이라는 함수는 위에 만들었던 js 파일 에 함수가 있습니다.
그룹 리스트가 바뀌면 거기에 ajax로 해당 그룹의 회원정보를 가져와 그 다음 selectbox에 넣어줍니다.
 
9. doSelectGroup 함수가 실행 하게될 member.view.php 파일의 dispGroupInMember 함수를 추가해보겠습니다.
 
 /**
   * @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로 담습니다.
 
10. getGroupMemberList 를 추가 합니다.
 
 /**
         * @brief group_srl에 해당하는 회원 리스트 가져옴
         **/
        function getGroupMemberList($group_srl) {
   if(!$group_srl) return;
            $args->group_srl = $group_srl;
            $output = executeQuery('member.getGroupMemberList', $args);
            return $output->data;
        }
처음에 만들어둔 getGroupMemberList.xml 쿼리를 이용해 회원리스트를 가져와서 리턴해 줍니다.
 
11. 마지막으로 아까 위에서 만들었던 js 파일을 html 에 import 해줍니다.
 <!--#include("header.html")-->
<!--%import("../../tpl/js/member_list.js")-->

2번 라인의 member_list.js 파일을 import 해줬습니다.
 
 member1.jpg
평소엔 그룹 리스트만 나오다가..
 
 
 
member2.jpg
특정 그룹을 선택하면 해당 그룹의 멤버 정보가 오른쪽에서 선택할 수 있게 나옵니다.  

 
 
 

 

 /*===================긴급 추가====================*/

 위 내용 적용 시 확장변수에서 이름검색이 되지 않는 문제가 발생 하였습니다.

이를 해결하기 위해 몇가지 추가 작업이 필요하네요.

 

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로 수정

 

위와 같이 수정을 하면 확장 변수의 검색도 정상적으로 동작합니다.

제목 글쓴이 날짜
익스플로어 즐겨찾기에 아이콘 추가하기 [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] file 老姜君 2010.10.28
referer 로 사이트 차단하기.. [3] 하얀마법 2010.06.20
내가 작성 한 글에 대한 일괄 삭제/이동/복사 권한 주기 [2] file 개돌 2009.05.15
(재 수정) 제로보드 XE 신버젼에 Lavalic 2 설치하기 [4] 조성우371 2009.01.16
게시글을 다른 게시판에로 이동시 알아야 할 중요한 사항! [2] 유샤인 2010.09.15
업데이트 후 Rewrite mod 사용이 안돼는 경우 [2] 겨우리851 2009.06.18
확장변수에 회원정보를 넣어보자 [10] file 개돌 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] file 하얌이 2010.10.18
플래시를 이용한 최근게시물 구현 [6] 한그림 2010.10.13