페이징 처리시 글번호 문제입니다.
본문
if(isset($_GET['page'])){ $page = $_GET['page']; } else { $page = 1; }
$row1 = sql_fetch($sql_cnt);
$allPost = $row1['cnt']; //전체 게시글의 수
$onePage = 4; // 한 페이지에 보여줄 게시글의 수.
$allPage = ceil($allPost / $onePage); //전체 페이지의 수
if($page < 1 && $page > $allPage) {
?>
<script>
alert("존재하지 않는 페이지입니다.");
history.back();
</script>
<?php
exit;
}
$oneSection = 10; //한번에 보여줄 총 페이지 개수(1 ~ 10, 11 ~ 20 ...)
$currentSection = ceil($page / $oneSection); //현재 섹션
$allSection = ceil($allPage / $oneSection); //전체 섹션의 수
$firstPage = ($currentSection * $oneSection) - ($oneSection - 1); //현재 섹션의 처음 페이지
if($currentSection == $allSection) {
$lastPage = $allPage; //현재 섹션이 마지막 섹션이라면 $allPage가 마지막 페이지가 된다.
} else {
$lastPage = $currentSection * $oneSection; //현재 섹션의 마지막 페이지
}
$prevPage = (($currentSection - 1) * $oneSection); //이전 페이지, 11~20일 때 이전을 누르면 10 페이지로 이동.
$nextPage = (($currentSection + 1) * $oneSection) - ($oneSection - 1); //다음 페이지, 11~20일 때 다음을 누르면 21 페이지로 이동.
/*$date_paging = "&sfl=".$sfl."&stx=".$stx."&wr_1=".$_GET['wr_1']."&wr_2=".($_GET['start_y']."-".$_GET['start_m']."-".$_GET['start_d'])."&wr_3=".($_GET['end_y']."-".$_GET['end_m']."-".$_GET['end_d']);*/
$date_paging = "&sfl=".$sfl."&stx=".urlencode($stx)."&wr_1=".$_GET['wr_1']."&start_y=".($_GET['start_y']."&start_m=".$_GET['start_m']."&start_d=".$_GET['start_d'])."&end_y=".($_GET['end_y']."&end_m=".$_GET['end_m']."&end_d=".$_GET['end_d']);
$paging = '<ul>'; // 페이징을 저장할 변수
//첫 페이지가 아니라면 처음 버튼을 생성
if($page != 1) {
$paging .= '<li class="page page_start"><a href="./supplie_reg_list.php?page=1">처음</a></li>';
}
//첫 섹션이 아니라면 이전 버튼을 생성
if($currentSection != 1) {
$paging .= '<li class="page page_prev"><a href="./supplie_reg_list.php?page=' . $prevPage .$date_paging. '">이전</a></li>';
}
for($i = $firstPage; $i <= $lastPage; $i++) {
if($i == $page) {
$paging .= '<li class="page current">' . $i . '</li>';
} else {
$paging .= '<li class="page"><a href="./supplie_reg_list.php?page=' . $i .$date_paging. '">' . $i . '</a></li>';
}
}
//마지막 섹션이 아니라면 다음 버튼을 생성
if($currentSection != $allSection) {
$paging .= '<li class="page page_next"><a href="./supplie_reg_list.php?page=' . $nextPage .$date_paging. '">다음</a></li>';
}
//마지막 페이지가 아니라면 끝 버튼을 생성
if($page != $allPage) {
$paging .= '<li class="page page_end"><a href="./supplie_reg_list.php?page=' . $allPage .$date_paging. '">끝</a></li>';
}
$paging .= '</ul>';
/* 페이징 끝 */
$currentLimit = ($onePage * $page) - $onePage; //몇 번째의 글부터 가져오는지
$sqlLimit = ' limit ' . $currentLimit . ', ' . $onePage; //limit sql 구문
$sql = $sql . $sqlLimit; //원하는 개수만큼 가져온다. (0번째부터 20번째까지
$result = sql_query($sql);
$list_num = $allPost - ($page - 1) * $onepage;
?>
여기까지가 페이징처리되는 부분이고
<td><?=$list_num-$cnt?></td>
이렇게 리스트에 글 번호를 나타내고 있습니다.
문제는 게시글이 6개 있고 한 페이지에 5개씩 나타내고 있을 때
첫번째 페이지에 게시글 번호가
6
5
4
3
2
이런식으로 나옵니다.
여기서 2페이지로 넘어가게 되면 정상이라면 게시글 번호가 1로 나와야하는데
다시 6으로 나옵니다.
어디쪽을 수정해주어야 하나요?
답변 2
$num = $allPost - ($onePage * ($page - 1));
전체 게시물 수 - (한 페이지에 보여줄 게시물 수 * (현재 페이지 번호 - 1))
전체 게시물 수 = 10개
한 페이지에 보여줄 게시물 수 = 4개
현재 페이지 = 2페이지
라고 가정을 하면
10 - (4 * (2 - 1))
이렇게 하면 2페이지 첫 번째 게시물 수는 6이 나옵니다.
그리고 실제 리스트에서는 숫자가 줄어들어야 하니 반복문 가장 밑에 $num--; 이런 식으로 처리하시면 될 것 같네요.
연습장 꺼내서 직접 계산해 보시면서 하는 게 가장 쉽게 이해가 됩니다.
제일 좋은 방법은 남이 만들어 놓은 게시판 가져다 쓰는 겁니다.
그누보드요.
$list_num-$cnt 위 부분이 하나씩 제거하면서 처리되기때문인데요
그냥 페이지에서 맨위 1부터 하실거면 $cnt 만 하셔도 될겁니다.