RadarURL

조회 수 5180 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
안녕하세요, diary4u.net 주인장 이녀석입니다.(광고 죄송^^;)

제가 나름대로 큰 팁이라고 생각하는 녀석을 올리려고 합니다.

발단은 제 홈 diary4u.net에 커뮤니티 기능을 넣으려고 한 것이었습니다.

비공개 커뮤니티를 제로보드를 이용하여 구현하려고 하던 중, 제로보드에는 한 사람이

한 그룹에만 속할 수 있다는 한계가 있다는 것을 발견했습니다.--;

물론 레벨로 게시판 이용 가능한 사람을 구분할 수도 있겠지만,

다른 커뮤니티에 여러 레벨을 가진 이용자가 있을 수도(있게 될 겁니다) 있지 않겠습니까?

그래서 한 사람이 여러 그룹에 속할 수 있는 방법을 찾기 시작했습니다.

그리고 대여섯시간의 삽질 끝에 만들어 내고 말았습니다^^;;;

원리는 그리 어렵지 않은데,

따로 테이블을 만들어서 사용자가 추가로 가질 그룹을 저장합니다.

그리고 _head.php에서 그룹 사용자 체크하는 부분을 수정해서 추가 그룹 데이터가 있으면

$member[group_no]를 현재 사용하려는 그룹 번호로 바꿔줍니다.

.....

한마디로 제로보드 헤더 파일의 동작을 속이는 거죠^^;

단점은.....

비공개 그룹의 멤버 관리 부분이 소용 없어진다는 점이 있습니다.

정확히 뭐라고 설명하기가 힘드네요...

------------------------------------------------------------------------

이제 공개합니다.

1. 일단 DB에 새로운 테이블을 만듭니다.(mysql에 접속해서 일단 db를 만들 수 있다는 전제로)

create table group_member_table (
        uid int(20) not null primary key auto_increment,
        user_no int(20) not null,
        group_no int(20) not null
);

2. lib.php에서

        // 관리자 테이블과 회원관리 테이블의 이름을 미리 변수로 정의
        $member_table = "zetyx_member_table";  // 회원들의 데이타가 들어 있는 직접적인 테이블
        $group_table = "zetyx_group_table";   // 그룹테이블
        $admin_table="zetyx_admin_table";     // 게시판의 관리자 테이블

부분을 찾아서

        $group_member_table="group_member_table"; // 그룹 멤버관리 테이블

부분을 추가 해 줍니다.

3. _head.php에서

                // 현재 그룹이 폐쇄그룹이고 로그인한 멤버가 비멤버일때 에러표시
                if($group[is_open]==0&&!$is_admin&&$member[group_no]!=$setup[group_no]) Error("공개 되어 있지 않습니다");

부분을 찾습니다. 이 부분이 폐쇄그룹일 때 멤버가 아니면 에러를 내는 부분입니다.
이 부분 바로 !!!위!!!에 다음을 추가합니다.(실제로 속이는 부분)

                // 멤버의 그룹 번호가 현재 게시판의 그룹번호와 다를 때, 참여그룹에 추가되어 있는지 검사,
                // 추가되어 있으면 멤버의 그룹번호를 현재 게시판의 그룹번호로 변경
                if ($member[no]&&$member[group_no]!=$setup[group_no]) {
                        $queryString="select * from $group_member_table where user_no=".$member[no]." and group_no=".$setup[group_no];
                        $result=mysql_query($queryString);
                        if (mysql_fetch_array($result)) $member[group_no]=$setup[group_no];
                }

------------------------------------------------------------------------

자, 이제 게시판 부분에서 할 일은 다 끝난것 같습니다.
이렇게 해 놔도 겉 보기에 변한 점이 없을텐데요...

이제 회원을 우리가 만든 '추가 그룹' 테이블에 추가 해 줘야 이 스크립트가 쓸모가 있겠죠?

4. admin/admin_view_member.php 에서

맨 위 부분에( <? 바로 뒤에 )

// 그룹정보를 저장
        $result=mysql_query("select no, name from $group_table");
        while ($data=mysql_fetch_object($result)) {
                $group_name[$data->no]=$data->name;
        }

이 부분을 추가 해 주시구요(그룹 테이블에서 그룹 번호와 이름을 읽어들여서 저장합니다),

다음으로는

  function move_group()
  {
   var i, j=0, k=0;
   for(i=0;i<document.write.length;i++) {
    if(document.write[i].checked)
    k++;
   }
   if(k<1)
   {
    alert("멤버를 선택 해 주세요");
    return false;
   }


   if(confirm("선택된 멤버를 선택된 그룹으로 이동하시겠습니까?"))
   {
    write.exec2.value="move_group";
    write.submit();
    return true;
   }
   return false;
  }

부분을 찾아서 바로 밑에

  function add_group()
  {
   var i, j=0, k=0;
   for(i=0;i<document.write.length;i++) {
    if(document.write[i].checked)
    k++;
   }
   if(k<1)
   {
    alert("멤버를 선택 해 주세요");
    return false;
   }
   if(confirm("선택된 멤버를 선택된 그룹에 추가하시겠습니까?"))
   {
    write.exec2.value="add_group";
    write.submit();
    return true;
   }
   return false;
  }
  function clean_group() {
          if (confirm("추가 그룹 테이블을 검색해서 없어진 그룹에 대한 데이터를 정리합니다.\n계속하시겠습니까?")) {
                  write.exec2.value="clean_group";
                  write.submit();
                  return true;
          }
          return false;
  }

이 두 함수를 추가 해 주시구요(추가 그룹 등록, 추가 그룹 테이블 정리를 위한 함수였습니다),

또 다음으로

   echo"
        <tr align=center height=23 bgcolor=#e0e0e0>
           <td style=font-family:Tahoma;font-size:7pt;>$number</td>
           <td><input type=checkbox name=cart[] value=$data[no]></td>
           <td style=font-family:Tahoma;font-size:8pt;>$data[user_id]</td>
           <td><img src=images/t.gif height=3><br>$data[name] </td>
           <td style=font-family:Tahoma;font-size:8pt;>$grant_color$data[level]</td>
           <td style=font-family:Tahoma;font-size:8pt;>".($data[point1]*10+$data[point2])." <font style=font-size:7pt;>(".$data[point1]."/".$data[point2].")</font></td>
           <td style=font-family:Tahoma;font-size:8pt;>".date("Y-m-d",$data[reg_date])."</td>
           <td style=font-family:Tahoma;font-size:8pt;><a href=$PHP_SELF?exec=$exec&group_no=$group_no&exec2=modify&page=$page&no=$data[no]&keyword=$keyword&keykind=$keykind&like=$like&page_num=$page_num>Modify</a></td>
           <td style=font-family:Tahoma;font-size:8pt;>";
   if($data[no]>1) echo"<a href=$PHP_SELF?exec=$exec&group_no=$group_no&exec2=del&keyword=$keyword&page=$page&no=$data[no]$href onclick=\"return confirm('삭제하시겠습니까?')\">Delete</a>"; else echo" ";
   echo"   </td>
        </tr>
        ";

   $number--;

이런 부분을 찾아서 $number--; 부분 바로 위에

   $queryString="select * from $group_member_table where user_no='".$data[no]."'";
   $group_member_string="";
   $gresult=mysql_query($queryString);
   while ($gdata=mysql_fetch_array($gresult)) {
           $group_member_string.="   <a href=$PHP_SELF?exec=$exec&group_no=$group_no&exec2=delgroup&delgroup_num=".$gdata[group_no]."&delgroup_no=".$data[no]."&keyword=$keyword&page=$page&no=$data[no]$href onclick=\"return confirm('".$data[name]."님을 ".$group_name[$gdata[group_no]]."그룹에서 삭제하시겠습니까?')\">".$group_name[$gdata[group_no]]."</a>";
   }
   if ($group_member_string!="") echo "<tr align=center height=23 bgcolor=#e0e0e0>
                   <td colspan=3 style=font-family:Tahoma;font-size:9pt;>참여중인 그룹 (지우려면 클릭하세요)</td>
                   <td colspan=6 align=left style=font-family:Tahoma;font-size:9pt;>$group_member_string</td>
           </tr>";


이만큼을 추가 해 주세요.
이건 회원 리스트 바로 아래에 추가 그룹이 있을 때 추가 그룹 정보를 보여줍니다.

다음으로(헥헥...길다)

  ?></select></td>
    <td><input type=button value='그룹 변경' style=border-color:#b0b0b0;background-color:#3d3d3d;color:#ffffff;font-size:8pt;font-family:Tahoma;height:20px; onclick=move_group()> </td>
<?


부분을 찾아서 <? 바로 위에

    <td><select name=addgroup><?
    foreach($group_name as $key=>$val) {
            echo "<option value=$key>$val</option>";
    }
    ?></select></td>
    <td><input type=button value='추가그룹에 추가' style=border-color:#b0b0b0;background-color:#3d3d3d;color:#ffffff;font-size:8pt;font-family:Tahoma;height:20px; onclick=add_group()> </td>
    <td><input type=button value='추가그룹 정리' style=border-color:#b0b0b0;background-color:#3d3d3d;color:#ffffff;font-size:8pt;font-family:Tahoma;height:20px; onclick=clean_group()> </td>

이만큼을 추가 해 주세요.
이 곳은 카트에 담은 회원을 새로운 추가그룹에 더하는 버튼과 추가그룹 테이블을 정리하는 버튼을 표시하는 부분입니다.

5. 여기까지 참 수고하셨습니다.
조금만 더 가면 됩니다.
이제 admin/admin_exe_member.php에서 del_member($no) 함수가 끝난 다음 부분에
아래와 같은 내용을 추가하면 됩니다.

// 회원 추가 그룹 추가하는 부분

        if ($exec2=="add_group"&&$member[is_admin]==1) {
                for($i=0;$i<sizeof($cart);$i++) {
                        // 이미 추가되어 있는지 확인
                        $queryString="select uid from $group_member_table where user_no='$cart[$i]' and group_no=$addgroup";
                        echo "<!-- queryString : $queryString -->";
                        $result=mysql_query($queryString) or Error(mysql_error(),"");
                        if (!mysql_fetch_array($result)) {
                                $queryString="insert into $group_member_table (user_no, group_no) values('$cart[$i]',$addgroup)";
                                echo "<!-- queryString : $queryString -->";
                                mysql_query($queryString);
                        }
                }
                movepage("$PHP_SELF?exec=view_member&group_no=$group_no&page=$page&keyword=$keyword&level_search=$level_search&page_num=$page_num&keykind=$keykind&like=$like");
        }


// 추가 그룹 데이터 검색해서 없어진 그룹 정리하는 부분
        if ($exec2=="clean_group"&&$member[is_admin]==1) {
                // 그룹 테이블을 검색해서 그룹 번호를 얻어옴
                $result=mysql_query("select no from $group_table");
                while ($data=mysql_fetch_array($result)) {
                        $group_number[]=$data["no"];
                }
                // 추가그룹 데이터를 검색해서 없어진 그룹을 찾아냄
                $result=mysql_query("select distinct(group_no) from $group_member_table");
                while ($data=mysql_fetch_array($result)) {
                        $found=false;
                        foreach ($group_number as $key=>$val) {
                                if ($val==$data[no]) $found=true;
                        }
                        if (!$found) $delete_group[]=$data[no];
                }
                // 없어진 그룹과 관련된 추가그룹 데이터 삭제
                foreach($delete_group as $key=>$val) {
                        mysql_query("delete from $group_member_table where group_no=$val");
                }
        }

// 회원 참여 추가 그룹 삭제하는 부분
        if ($exec2=="delgroup") {
                @mysql_query("delete from $group_member_table where user_no=$delgroup_no and group_no=$delgroup_num", $connect) or Error(mysql_error(),"");
        }

------------------------------------------------------------------------

자! 이제 변경 사항은 끝입니다.

실제로 사용에 들어가 볼까요?

일단 이 모든 기능들은 최고관리자용의 기능입니다.

최고 관리자로 로그인 해서 게시판 관리 기능으로 들어갑니다.

(벌써 다른 비공개 그룹은 만들어 놓은 상태겠죠?)

거기에서 아무 그룹이나 선택한 다음에 멤버 관리를 선택합니다.

일단 카트에 회원을 담은 다음(무슨 뜻인지 아시죠?)

만들어놓은 비공개 그룹으로 그룹을 옮기는게 아니라,

오른쪽 아래 부분의 추가 그룹에 추가 버튼 보이시죠? 그 옆의 선택 상자에서 그룹 이름을

선택한 다음에 '추가 그룹에 추가'를 누릅니다.

그러면 회원 리스트가 조금 달라질겁니다.

한줄이 더 생기죠? 그 회원이 가진 추가 그룹 정보가 바로 보이는 것입니다.

그 정보에서 추가 그룹 이름을 클릭하면 그 추가 그룹 정보는 삭제됩니다.

이렇게 말로 해서는 조금 알아듣기 힘드시겠지만, 일단 직접 게시판 관리를 해 보시면

금방 이해가 가실겁니다.

제 귀찮음에 의해 여러명의 추가 그룹 정보 삭제 기능은 만들지 않았습니다.

그리고 만약 비공개 그룹을 삭제하면 아쉽게도 추가 그룹 테이블의 정보는 삭제되지 않습니다.

(만약 그렇게 하려면 손 볼 파일이 서너개 더 늘어납니다. 끔찍하죠?^^;;;;)

그래서 이 귀차니즘의 결과로 추가 그룹 정리 버튼이 있습니다.

이걸 누르면 없어진 그룹에 대한 정보가 정리 되게 됩니다.

------------------------------------------------------------------------

장문의 글 읽어주셔서 감사합니다.

제로보드를 이용해서 커뮤니티나 동호회(특히 비공개) 만드시려는 분 들께 유용하게 쓰였으면

좋겠습니다.

질문사항은 여기에다가 해 주셔도 좋지만, 제 홈(http://www.diary4u.net)에 들러서 해 주시면

더 자세하게 답변 해 드리겠습니다.(또 홈 광고 해서 죄송합니다)

그럼.

출처 : http://www.nzeo.com/bbs/zboard.php?id=cgi_tip&page=3&sn1=&divpage=1&sn=off&ss=on&sc=off&keyword=그룹&select_arrange=headnum&desc=asc&no=2769
?

공부 게시판

공부에 도움되는 글을 올려주세요.

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 [공지] 공부 게시판 입니다. 처누 2003.08.18 928104
346 응용 프로그래밍 WIndows Application의 실행 속도 측정 file JaeSoo 2023.09.06 3185
345 웹 프로그래밍 메모리 부족 현상 (allowed memory size of 134217728 bytes..) JaeSoo 2023.08.01 2207
344 웹 프로그래밍 Guzzle - cURL error 60: SSL certificate problem: unable to get local issuer certificate 문제 해결 file JaeSoo 2023.07.30 2188
343 웹 프로그래밍 XE 캐시파일 재성생후 404 Oops, Sorry. Page is not found! 나올때 JaeSoo 2023.07.29 2117
342 응용 프로그래밍 [Apple] 엔터프라이즈 계정신청 (Enterprise Program) file JaeSoo 2023.03.27 267
341 웹 프로그래밍 XE - " Fatal error: Class 'Object' not found in " / class 낫파운드 오류 file JaeSoo 2023.03.20 147
340 응용 프로그래밍 [MSA] MSA란 무엇인가? 개념 이해하기 file JaeSoo 2023.01.26 210
339 웹 프로그래밍 iOS 앱 개발을 위한 인증서 생성 및 관리 file JaeSoo 2023.01.18 218
338 프로그래밍 [ iOS ] 앱 스토어 개인, 회사, 엔터프라이즈 차이점 file JaeSoo 2023.01.09 237
337 웹 프로그래밍 PHP 파서 이해하기 (<?php의 php를 생략하고 간단히 <? 태그 와 ?> 태그를 사용하는 방법) JaeSoo 2016.08.10 322
336 프로그래밍 SVN의 cleanup 에러시 해결방법 JaeSoo 2016.05.05 728
335 프로그래밍 [오류해결] svn cleanup failed-previous operation has not finished; run cleanup if it was interrupted file JaeSoo 2016.05.05 611
334 프로그래밍 TortoiseSVN 계정변경 file JaeSoo 2016.05.05 582
333 프로그래밍 SVN passwd 설정 : 계정 (users/passwd) file JaeSoo 2016.05.04 543
332 웹 프로그래밍 XE 비회원 글쓰기 항목 지우기 file JaeSoo 2016.04.28 499
331 응용 프로그래밍 메모리 영역 (code, data, stack, heap) file JaeSoo 2016.03.23 747
330 응용 프로그래밍 [SVN] Subversion 명령들 file JaeSoo 2016.02.06 967
329 응용 프로그래밍 IBM JDK 1.6 에서 Spring 2.5.2를 사용할 때 GenericTypeResolver 에서 NullPointerException이 발생하는 문제 JaeSoo 2016.01.27 787
328 웹 프로그래밍 오른쪽 마우스 금지 소스 / 드래그 금지 소스 JaeSoo 2016.01.20 475
327 응용 프로그래밍 [전자정부 표준프레임워크] 톰캣(Tomcat) 설치하기 file JaeSoo 2016.01.02 535
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 18 Next
/ 18


즐겨찾기 (가족)

JAESOO's HOMEPAGE


YOUNGAE's HOMEPAGE


장여은 홈페이지


장여희 홈페이지


장여원 홈페이지


즐겨찾기 (업무)

알리카페 홀릭

숭실대 컴퓨터 통신연구실 (서창진)

말레이시아 KL Sentral 한국인 GuestHouse


즐겨찾기 (취미)

어드민아이디

유에코 사랑회

아스가르드 좋은사람/나쁜사람

JServer.kr

제이서버 메타블로그

재수 티스토리


즐겨찾기 (강의, 커뮤니티)

재수 강의 홈페이지


한소리


VTMODE.COM


숭실대 인공지능학과


숭실대 통신연구실


베너