웹마스터 팁

* 게시물을 다 작성하고 나서 보니 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로 수정

 

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

제목 글쓴이 날짜
php 와 mysql 을 이용한 웹인증..(윈도우에서) 이성헌 2003.06.05
apache 서버에서 apache 인증 (윈도우에서 apm 설치후) 이성헌 2003.06.05
webalizer 윈도우+아파치에서 돌려보기 [3] [1] HuHu^^; 2003.06.12
긴급 - mysql 설치때 주의점(window xp 에서) [3] 이성헌 2003.08.11
[동영상] iis 5.1 + PHP 4.3.2 + MySQL 4.0.13 + 제로보드 4.1 pl4 설치 [48] 비행소년™ 2003.08.25
Apache 에서 DoS 공격 막기 (1.3.x, 2.x) 좋은진호 2003.09.08
[C급]Internet Explorer 다중 취약점 ATpple.com 2003.11.12
APM서버설치-XAMPP v1.2 [14] The Darkness 2003.12.05
MySQL 퍼포먼스를 top명령어처럼 모니터링 mytop 좋은진호 2003.12.14
VirtualHost 안될때 [1] 이성헌 2003.12.16
Apache 2.X 버전의 한글문제와 새로운 방식의 APM 셋팅 [8] 최종우 2003.12.17
apache 1.3.x-2.0.48 의 원격 유저 검색 취약점을 이용한 exploit [2] DearMai 2003.12.27
[XAMPP]한 컴퓨터에서 여러 개의 홈페이지 운영하는 방법(가상호스트 아님) [8] The Darkness 2004.02.05
Windows XP 에서 Apache 2 + PHP 5 + SQLite 설치하기 [8] 엔젤퀸 2004.02.23
xampp 1.3 설치해 보기(winxp) [3] 이주성 2004.03.03
경량화 리눅스 'Linux Annyung' [5] u2em 2004.03.27
Apache 보안 [4] u2em 2004.04.05
개인서버로 메일 서버 및 기타 서버를 운영할 때 메일 및 서비스 절대 못 하게 하기...(xp이상) [3] 그냥이렇게。 2004.04.20
Apache 서버운영에 쓸모있는 팁 몇가지 [2] PCLab 2004.05.21
Apache 서비스를 위한 NT 보안 설정 [2] 토토루 2004.05.24