RadarURL

조회 수 7644 추천 수 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 2007383
2616 u-E(활성화) 본식DVD, 웨딩영상 색감이 중요한 이유새 창 열림 new 힘겨운귤35 2026.10.05 0
2615 공지 대전, 인천, 세종 하수구 막힘 문제 해결 방법 new 정열적인코요테90 2026.10.05 3
2614 취미 <문경맥주> 구입 할 수 있는 곳은 새 창 열림 new 타오르는드래곤61 2026.10.05 1
2613 데이터베이스 강남건전지❤️OlO-8655-OO53❤️친절문의환영 #강남건전지 #강남유니콘 #선릉유니콘 #강남건전지위치 #선릉역건전지#대치동유니콘 #강남바커스 #선릉바커스 #선릉역바커스 #강남룸클럽 #선릉룸클럽 #강남베터리 #강남바데리 new 괴랄한재규어89 2026.10.05 1
2612 사무 소프트웨어 용인두피문신 고민? 만족 후기 보려면 new 날카로운꿩11 2026.10.05 4
2611 논문 카­톡 gusim8003 급전/내구제 (24시문의) 폰테크 소액대출 선불폰 가개통 new 타오르는켄타우로스86 2026.10.05 1
2610 윈도우즈 웨딩누브라, 완벽한 드레스 핏을 위한 선택 new 날카로운감시자22 2026.10.05 1
2609 인터넷 성공적인 중고화물차 선택, 현명한 가이드 new 붉은드래곤50 2026.10.05 2
2608 가상화 인천맛집 순위 new 차가운파편97 2026.10.05 2
2607 응용 프로그래밍 완벽한 웨딩드레스 핏의 비밀, 웨딩누브라 new 힘겨운암석76 2026.10.05 1
2606 카메라 파주누수업체, 신속 해결 전문가의 비결 new 차가운에메랄드79 2026.10.05 1
2605 u-E(통합센터) 올해의 핫플 선정 간석동 마블! 010&&8923&&0291 new 교활한감시자99 2026.10.05 1
2604 웹서버,WAS 손목터널증후군 치료, 현명한 선택 기준은? new 괴상한두루미52 2026.10.05 1
2603 u-E(통합센터) 손목터널증후군, 두팔로정형외과에서 해답을 찾다 new 눈부신백마법사86 2026.10.05 2
2602 응용 프로그래밍 골든타워 010 2817 0845 골타문의 편하게 알아보는 셔츠룸 new 속삭이는미노타우르93 2026.10.05 2
2601 u-E(TestBed) 특별한 기념품제작, 판촉물365 new 광기의태풍18 2026.10.05 1
2600 건강 대전누수 문제, 청년연합누수가 답이다 new 몽환적인삵34 2026.10.05 2
2599 u-E(법,정책) 양산싱크대막힘, 뚫자하수구에서 한 번에 해결 낙관적인유니콘42 2026.10.05 1
2598 가상화 최근 테헤란로 벤처 밸리의 핵심 리더들 사이에서 ‘클래스가 다른 정통 수질과 프라이빗 무드’로 소문 자자한 '선릉 룸싸롱' 기습 방문, 인공미를 거부하는 무결점 뉴페이스들과 심장을 마비시킨 사심 플러팅에 제대로 저격당하고 온 솔직 후기 희미한홍학99 2026.10.05 4
2597 웹서버,WAS 카­톡 gusim8003 급전/내구제 (24시문의) 선불폰 소액결제 일수 급전대출 황금빛섬광82 2026.10.05 2
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 131 Next
/ 131


즐겨찾기 (가족)

JAESOO's HOMEPAGE


장여은 홈페이지


장여희 홈페이지


장여원 홈페이지


즐겨찾기 (업무)

알리카페 홀릭

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

말레이시아 KL Sentral 한국인 GuestHouse


즐겨찾기 (취미)

어드민아이디

유에코 사랑회

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

JServer.kr

제이서버 메타블로그

재수 티스토리


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

재수 강의 홈페이지


한소리


VTMODE.COM


숭실대 인공지능학과


숭실대 통신연구실


베너