그누보드 게시물 순서 변경 버튼
* 게시물 순서를 변경하는 버튼을 만들기 ( ▲ 위로, ▼ 아래로 )
- 관리자 권한이 있을때에만 버튼 제공 한다.
1. /bbs/list_num_update.php 신규 작성
| <?php include_once('./_common.php'); // 게시판 관리자 이상 복사, 이동 가능 if ($is_admin != "board" && $is_admin != "group" && $is_admin != "super") alert_close("게시판 관리자 이상 접근이 가능합니다."); // POST 데이터 안전하게 가져오기 $chk_wr_id = isset($_POST['chk_wr_id']) ? $_POST['chk_wr_id'] : array(); $wr_id = isset($chk_wr_id[0]) ? $chk_wr_id[0] : ''; $wr_id2 = isset($chk_wr_id[1]) ? $chk_wr_id[1] : ''; $sw = isset($_POST['sw']) ? $_POST['sw'] : ''; // 카테고리(sca)와 페이지(page) 받아오기 $sca = isset($_POST['sca']) ? trim($_POST['sca']) : ''; $page = isset($_POST['page']) ? (int)$_POST['page'] : 1; if(!$page) $page = 1; // 카테고리가 지정되어 있다면 SQL 조건문 생성 $sql_sca = ""; if ($sca) { $sql_sca = " and ca_name = '".sql_real_escape_string($sca)."' "; } if($sw == "change"){ if(count($chk_wr_id) == 2){ $act = "순서변경"; $sql = " select wr_num from g5_write_{$bo_table} where wr_id='$wr_id'"; $result = sql_query($sql); $forth_wr_num_array = sql_fetch_array($result); $forth_wr_num = $forth_wr_num_array['wr_num']; $sql = " select wr_num from g5_write_{$bo_table} where wr_id='$wr_id2'"; $result = sql_query($sql); $back_wr_num_array = sql_fetch_array($result); $back_wr_num = $back_wr_num_array['wr_num']; sql_query(" update g5_write_{$bo_table} set wr_num = '$back_wr_num' where wr_id = '$wr_id'"); sql_query(" update g5_write_{$bo_table} set wr_num = '$forth_wr_num' where wr_id = '$wr_id2'"); } else { alert_close("2개의 게시물을 선택해주세요."); } } else if($sw == "prev"){ // 위로 이동 (그누보드는 wr_num이 클수록 오름차순 리스트에서 아래에 위치하거나, 보통 wr_num DESC, wr_reply ASC 정렬을 씁니다.) // 여기서는 리스트 화면에서 실제 '위'에 있는 (나보다 wr_num이 큰) 대상을 찾습니다. if(count($chk_wr_id) >= 2){ alert_close("1개의 게시물만 선택해주세요."); } // 선택한 게시물의 wr_num 가져오기 $row = sql_fetch(" select wr_num, wr_reply from g5_write_{$bo_table} where wr_id='$wr_id' "); $selected_wr_num = $row['wr_num']; // 카테고리 범위 내에서 나보다 wr_num이 큰(화면상 위에 있는) 게시물 중 가장 가까운 것 하나를 찾음 $target = sql_fetch(" select wr_id, wr_num from g5_write_{$bo_table} where wr_num > '$selected_wr_num' {$sql_sca} order by wr_num asc, wr_reply desc limit 1 "); if(isset($target['wr_id']) && $target['wr_id']) { $target_wr_id = $target['wr_id']; $target_wr_num = $target['wr_num']; // 서로 wr_num 바꿈 sql_query(" update g5_write_{$bo_table} set wr_num = '$target_wr_num' where wr_id = '$wr_id' "); sql_query(" update g5_write_{$bo_table} set wr_num = '$selected_wr_num' where wr_id = '$target_wr_id' "); } else { alert_close("가장 최근 글입니다. 이동할 수 없습니다."); } } else if ($sw == "next") { // 아래로 이동 if(count($chk_wr_id) >= 2){ alert_close("1개의 게시물만 선택해주세요."); } // 선택한 게시물의 wr_num 가져오기 $row = sql_fetch(" select wr_num, wr_reply from g5_write_{$bo_table} where wr_id='$wr_id' "); $selected_wr_num = $row['wr_num']; // 카테고리 범위 내에서 나보다 wr_num이 작은(화면상 아래에 있는) 게시물 중 가장 가까운 것 하나를 찾음 $target = sql_fetch(" select wr_id, wr_num from g5_write_{$bo_table} where wr_num < '$selected_wr_num' {$sql_sca} order by wr_num desc, wr_reply asc limit 1 "); if(isset($target['wr_id']) && $target['wr_id']) { $target_wr_id = $target['wr_id']; $target_wr_num = $target['wr_num']; // 서로 wr_num 바꿔 저장함 sql_query(" update g5_write_{$bo_table} set wr_num = '$target_wr_num' where wr_id = '$wr_id' "); sql_query(" update g5_write_{$bo_table} set wr_num = '$selected_wr_num' where wr_id = '$target_wr_id' "); } else { alert_close("더 이상 아래로 이동할 수 없습니다."); } } else { alert("값전달 오류."); } ?> <script> window.opener.location.reload(); </script> |
2. 테마의 리스트 파일 수정( /skin/board/[theme]/list.skin.php)
- 파일 제일 하단에 아래 소스코드를 붙여넣기 하세요.
| <script type="text/javascript"> <!-- function move_list_row(wr_id, sw) { var f = document.fboardlist; // 새 창(팝업) 오픈 var sub_win = window.open("", "move_win", "width=0, height=0, scrollbars=1"); // 1. wr_id를 위한 임시 input 생성 var temp_input = document.createElement("input"); temp_input.type = "hidden"; temp_input.name = "chk_wr_id[]"; temp_input.value = wr_id; f.appendChild(temp_input); // 2. sw를 위한 임시 input 생성 var temp_sw = document.createElement("input"); temp_sw.type = "hidden"; temp_sw.name = "sw"; temp_sw.value = sw; f.appendChild(temp_sw); // 3. sca(카테고리)를 위한 임시 input 생성 (현재 PHP의 sca 값을 주입) var temp_sca = document.createElement("input"); temp_sca.type = "hidden"; temp_sca.name = "sca"; temp_sca.value = "<?php echo isset($sca) ? $sca : ''; ?>"; f.appendChild(temp_sca); // 4. page(페이지 번호)를 위한 임시 input 생성 (새로고침 시 페이지 유지용) var temp_page = document.createElement("input"); temp_page.type = "hidden"; temp_page.name = "page"; temp_page.value = "<?php echo isset($page) ? $page : '1'; ?>"; f.appendChild(temp_page); f.target = "move_win"; f.action = "./list_num_update.php"; f.submit(); // 전송 후 임시 생성한 input들 삭제 f.removeChild(temp_input); f.removeChild(temp_sw); f.removeChild(temp_sca); f.removeChild(temp_page); } </script> <iframe src="" name="move_win" id="move_win" style="display: none;"></iframe> |
3. 위로, 아래로 버튼 배치 ( /skin/board/[theme]/list.skin.php) - 2번과 같은 파일
- 위치는 게시물의 체크박스 옆또는 글쓴이 옆 등 각자 알아서 놓기.
- 각 게시물에 버튼을 제공 하므로 게시물 목록출력 루프 안에 두어야 한다.
| <?php if ($is_admin == 'super' || $is_auth) { ?> <div> <span class="btn_order_move" style="display: inline-flex; justify-content: center; align-items: center; gap: 5px; width: 100%;"> <a href="javascript:move_list_row('<?php echo $list[$i]['wr_id']; ?>', 'next');" title="위로 이동" style="padding:2px 5px; background:#eee; font-size:11px; border:1px solid #ccc; color:#333;">▲ 위로</a> <a href="javascript:move_list_row('<?php echo $list[$i]['wr_id']; ?>', 'prev');" title="아래로 이동" style="padding:2px 5px; background:#eee; font-size:11px; border:1px solid #ccc; color:#333;">▼ 아래로</a> </span> </div> <?php } ?> |
'JavaScript' 카테고리의 다른 글
| 아이폰, 사파리브라우저에서 클릭 안될때 (0) | 2019.10.02 |
|---|---|
| JWPLAYER (0) | 2017.12.29 |
| jquery 시간선택기 (0) | 2017.11.22 |
| 라디오버튼 강제선택 (0) | 2017.11.03 |
| jQuery 동적 TR 생성, 삭제 (0) | 2017.10.20 |

