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차원 배열을 사용할 수는 없나요? 될 것 같은데 해보니 잘 안되더라구요. 무슨 실수를 한건지 아예 저런 형식으론 못 쓰는 건지 궁금하네요. |