웹마스터 팁

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

 

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

제목 글쓴이 날짜
모바일에서 레벨 아이콘, 이미지 아이콘 표시하기 [4] Gunmania 2013.08.23
1전 짜리 팁 - 최근수정일 표시 [2] 지그재거 2013.08.22
XE 알림센터 스킨을 iOS 알림창 비슷하게 만들기 [2] file novelic 2013.08.21
간단하게 사용자가 에디터 바꿔쓸 수 있도록 하기 ^^ [6] file Xiso 2013.08.20
jQuery fadeIn 홈페이지 부드럽게 이동 [4] file 지그재거 2013.08.20
리퍼러 수집기 애드온 실행후 사이트 먹통되었을때 대처법 [2] serendip 2013.08.19
탈퇴회원 레벨 아이콘 출력 안하기 [7] Gunmania 2013.08.17
벼랑끝 font awesome 45도를 아시나요 ? [2] file 지그재거 2013.08.13
[1.7.4] 로그인창 옆에 신규 쪽지 수 보여주기 socialskyo 2013.08.13
게시판 댓글 스킨에서 추가적인 변수 전달 안 되는 현상 보완 위해서. [1] sejin7940 2013.08.11
여러장의 이미지 동시 삽입시 이미지 간격조정 팁 [3] 꿈섬 2013.08.10
[주옥시리즈]닉네임/이메일 변경 금지 팁 [10] socialskyo 2013.08.10
스크롤 맨아래로 내리면 자동으로 글 목록 더보이기 구현(게시판어어느 스킨이든 사용가능) [19] 장포크 2013.08.10
지식인 모바일에서 답변이 보이지 않는 현상. 씨즈부스 2013.08.10
최신 제로보드 XE 동영상 강의 [25] 하얀마법 2013.08.09
새로고침없이 페이지 리로딩 간단하고 쉽게 서버한테는 미안하게 하는법 (서버단이 아니고 스킨에 ㅠ jquery load씀) 게시글,댓글,추천등 모든 부분다가능합니다. [2] 장포크 2013.08.08
textarea 테그 제임스라 2013.08.07
1.7.3.4 + sketchbook5 에서 대댓글 에디터 사용불가문제 [4] 뒤뒤 2013.08.07
익명게시판에서 회원 구분 가능하게 + 각 게시물에서 다른 아이디가 나타나게 하는 방법 [3] jn4kim 2013.08.06
HTML5를 이용한 시멘틱 XE 레이아웃 만들기 (인트로) [3] 이온디 2013.08.04