CMS솔루션마켓, 이온디 - 워드프레스, 라이믹스, 카페24, 그누보드, 엑셀

알림

http://www.nzeo.com/bbs/zboard.php?id=cgi_tip&page=1&sn1=&divpage=1&sn=on&ss=off&sc=off&keyword=다라나&select_arrange=headnum&desc=asc&no=38881.게시물 복사/이동 시 기존 게시물의 뒤로 이동시키기[링크]


관리자가 게시물을 A 게시판에서 B 게시판으로 이동시키면 날짜에 상관없이 항상 B게시판의 맨 위에 나타납니다. 그럼 나중의 날짜가 오히려 맨 위에 나타나는 경우도 있고, 또 여러가지 사정에 의해 B 게시판에 있는 게시물들 사이에 넣어야 할 경우도 있을 겁니다.
그런 경우에 기존의 게시물관리 창을 이용해 메뉴 하나를 추가했습니다.
(팁을 자세히 찾아보진 않았지만 없는 것 같더군요. 있는 팁이라면 댓글 달아주세요. 바로 지우겠습니다.)

수정해야 할 파일은 3개입니다.
bbs/select_list_all.php (여기에 메뉴를 추가합니다.)
bbs/list_all.php (여기에 실제로 게시물 사이에 집어 넣습니다.)
script/script_list.php (게시물 관리를 누르면 뜨는 창의 크기를 조절합니다.)

원리는 다음과 같습니다.
A 게시판에서 5개의 게시물을 선택했다고 가정합니다. 그리고 B 게시판의 위에서 10개의 게시물 밑에 이 5개를 넣고 싶습니다.
그러면 먼저 B 게시판의 맨 위 게시물 10개를 공지로 올려놓고, A 게시판에서 5개의 게시물을 옮겨온 뒤에, 아까 공지로 올린 10개의 게시물을 다시 내리는 겁니다. (내리고 난 뒤 연결되는 부분의 next_no, prev_no만 수정해주면 됩니다.)

간단하죠? ^^ 자세한 건 코드에 주석을 달아놨으니 보고 참고하세요.

script/script_list.php에서 고쳐야 할 부분.
111라인에서

window.open("select_list_all.php?id=<?=$id?>&selected="+document.list.selected.value,"게시물정리","width=260,height=180,toolbars=no,resize=no,scrollbars=no");



window.open("select_list_all.php?id=<?=$id?>&selected="+document.list.selected.value,"게시물정리","width=260,height=220,toolbars=no,resize=no,scrollbars=no");

height=220으로 바꾸는 겁니다.



bbs/select_list_all.php에서
70라인 뒤에다가 아래의 코드를 추가합니다. "게시물에 기록"이란 단어를 찾으세요.

<input type=checkbox name=notice_bbs value=1 checked> 게시물에 기록
</tr> <!-- 여기가 70라인입니다.-->
<!--게시물 뒤로 보내는 루틴 2003.4.11-->
<tr><td height=2 bgcolor=#dfdfdf></td></tr>
<tr>
        <td align=center>
                <input type=text name=list_back_no  size=4> 뒤로 넘길 개수
        </td>        
</tr>
<!--여기까지 게시물 뒤로 보내는 루틴-->
<tr>
        <td><img src=images/m_top.gif border=0></td>


이제 좀 골치아픈 bbs/list_all.php 파일에 몇가지 추가를 해야 합니다.
134라인에 보시면 아래의 주석이 있습니다.
/**********************************************************************************
* Copy All 일때 (선택된 게시물 이동)
*********************************************************************************/

그 밑에 elseif와 for 문 사이에 아래와 같이 추가하세요.

                    elseif($exec=="copy_all"||$exec=="move_all") {

                // 게시물 뒤로 보내는 루틴 2003.4.11
                // 먼저 넘어오는 게시물만큼 계산을 하여 $list_back_no 만큼을 공지로 올려둔다.
                if($list_back_no && $list_back_no > 0) {
                        $selected_count = count($selected);
                        $t_count=mysql_fetch_row(mysql_query("select count(*) from $t_board"."_$board_name where headnum>-2000000000 order by headnum",$connect));
                        if($t_count[0] < $list_back_no) //넘길 갯수가 전체 갯수보다 많다면
                                $list_limit = $t_count[0];  //공지로 올릴 수는 전체 갯수
                        else
                                $list_limit = $list_back_no; //아니면 넘길 갯수를 공지로 올린다
                        $t_result=mysql_query("select no, headnum from $t_board"."_$board_name where headnum>-2000000000 order by headnum limit $list_limit",$connect) or error(mysql_error());
                        while($t_data=mysql_fetch_array($t_result)) {
                                mysql_query("update $t_board"."_$board_name set headnum = headnum - 2010000000 - $selected_count where no = $t_data[no]", $connect) or error(mysql_error());
                        }
                }
                // 아래 for loop 후에 복구하는 부분 있음. 공지롤 올린 것을 다시 내림.
                // 여기까지 게시물 뒤로 보내는 루틴.
                for($i=0;$i<count($selected)-1;$i++) {


이제 다시 쭈욱 내려가서 거의 맨 마지막에 가면
        }
    }
$total=mysql_fetch_array(mysql_query("select count(*) from $t_board"."_$board_name",$connect));
이런 부분이 나옵니다. 저 닫는 괄호와 $total 사이에 아래를 다시 추가해 주세요.

                        } // end of if($s_data[arrangenum]==0)
                } // end of for loop

                // 게시물 뒤로 보내는 루틴 2003.4.11
                // 먼저 넘어오는 게시물만큼 계산을 하여 $list_back_no 만큼을 공지에서 다시 내린다.
                if($list_back_no && $list_back_no > 0) {
                        $t_result=mysql_query("select no, headnum from $t_board"."_$board_name order by headnum limit $list_limit",$connect);
                        while($t_data=mysql_fetch_array($t_result)) {
                                mysql_query("update $t_board"."_$board_name set headnum = headnum + 2010000000 where no = $t_data[no]", $connect);
                        }
                        // 그리고 윗글과 아래글 연결을 다시 해준다.
                        if($list_limit != 0) {
                                $list_start = $list_limit-1;
                                $t_result=mysql_query("select no, prev_no, next_no from $t_board"."_$board_name where headnum>-2000000000 order by headnum limit $list_start,2", $connect) or error(mysql_error());
                                $ii=0;
                                while($t_data=mysql_fetch_array($t_result)) {
                                        $idx_t_data[$ii] = $t_data[no];
                                        $ii++;
                                }
                                mysql_query("update $t_board"."_$board_name set next_no = $idx_t_data[1] where no = $idx_t_data[0]");
                                mysql_query("update $t_board"."_$board_name set prev_no = $idx_t_data[0] where no = $idx_t_data[1]");
                        }
                }
                // 여기까지 게시물 뒤로 보내는 루틴.
                $total=mysql_fetch_array(mysql_query("select count(*) from $t_board"."_$board_name",$connect));


원리와 코드를 들여다 보시면 별 어려움이 없을 겁니다.


그런데 마지막에 윗글과 아래글을 연결시켜주는 곳에서 말이죠.
while($t_data[]=mysql_fetch_array($t_result))
이렇게 하고 $t_data[0][no], $t_data[1][no] 이런 식으로 2차원 배열을 사용할 수는 없나요?
될 것 같은데 해보니 잘 안되더라구요. 무슨 실수를 한건지 아예 저런 형식으론 못 쓰는 건지 궁금하네요.


 
댓글은 로그인 사용자만 작성 가능합니다. 로그인하기