공부하는 중에 제가 참고하기 위해 저장해두는 소스입니다. 공개로 해놓긴 하지만, 가능하면 그대로 사용하지 마시고 변수명을 비롯하여 수정하여 사용하시기 바랍니다.
강사님 이름을 몰라서 출처를 따로 표시하지 못하는 점 양해해주시기 바라며, 주석에 대한 부분은 제가 더 적어 놓았습니다.(제가 공부하기 위해서..^^;)
(이 소스는 게시판 리스트.php 파일에 붙여넣기해서 사용해야 하기 때문에 지금의 소스 그대로는 어떤 결과값도 확인할 수 없습니다.)
<!-- page 표시하는 테이블 -->
<table border=0>
<tr>
<td width=600 height=20 align=center><font color=gray>
<?php
// 게시판 하단 페이지가 시작되는 부분 코드 " 11, 21, 31 ~" 이렇게 시작됩니다.
// floor()함수는 나눈값을 무조건 내림 합니다. 즉, 계산 결과 소수점 뒷부분은 1~9 어느 수가 나와도 무시해버리죠.
// start_page 에서 사용하는 함수입니다.
$start_page = floor(($current_page-1) / $page_list_size) * page_list_size + 1 ;
// 페이지 리스트 마지막 페이지 계산 코드
$end_page = $start_page + $page_list_size - 1 ;
// 페이지 리스트 마지막 페이지 숫자를 결정하는 코드입니다.
if($total_page < $end_page) $end_page = $total_page;
if($start_page >= $page_list_size){
$prev_list = ($start_page-2)*$page_size;
echo "<a href = $PHP_SELF?num=$prev_list$link>◀</a>"; //$PHP_SELF : 현재 자신의 페이지 이름값을 리턴하므로 여기서는 page_list
}
for($i=$start_page; $i <=$end_page; $i++){
$page = ($i-1)*$page_size; //리스트페이지의 값을 num값으로 변환 시킨다
if($num != $page){
echo "<a href = $PHP_SELF?num=$page$link> $i </a> "; //현재 페이지가 아닐 경우만 링크표시
}else{
echo "<b> $i </b>";
}
}
if($total_page > $end_page){
$next_list = $end_page * $page_size;
echo "<a href = $PHP_SELF?num=$next_list$link>▶</a><br>";
}
?>
</font>
</table>
위의 코드와 상관없이 페이징에 필요한 각 항목에 대한 php 변수를 정의해보겠습니다.
- $page_per_record = 10; //화면에 표시할 자료 갯수(페이지당 레코드수)
- $block_per_page = 5; //화면에 표시할 페이지 번호 갯수(블록당 페이지수)
- $now_page = 7; //현재 선택된 페이지 번호(GET,POST등 외부로 부터 넘어온다.)
- $total_record = 122; //전체 레코드수는 DB를 통해 얻어온다.
먼저 구할 것은 "시작페이지 번호", "시작레코드 번호" 입니다. 여기서 사용되는 ceil()함수는 소수점 아래 올림하여 결과값을 출력합니다.
- DB문: "SELECT * FROM table_name WHERE 조건절 LIMIT $start_record, $page_per_record"
- $end_page = ( ($start_page+$block_per_page) <= $total_page )? ($start_page+$block_per_page) : $total_page;
- 페이지번호: "for($i = $start_page; $i <= $end_page; $i++)"
- if( $now_page > 1 ) { //이전페이지 링크 출력; }
- if( $now_page < $total_page ) { //다음페이지 링크 출력; }
- if( $now_block > 1 ) { //이전 블록 링크 출력; }
- if( $now_block < $total_block ) { //다음 블록 링크 출력; }
- if( $now_block > 2 ) { //앞 블록이 2블록 이상 차이날경우 처음으로 링크 출력; }
- if( $now_block < ($total_block-1) ) { //남은 블록이 2블록 이상인 경우 마지막으로 링크 출력; }
'IT > PHP' 카테고리의 다른 글
php 회원가입 4-2 (0) | 2013.08.22 |
---|---|
php 회원가입 4-1 (0) | 2013.08.22 |
php 배열기초 및 2차원 배열 (0) | 2013.08.21 |
PHP 사용하는 이유 / PHP 장점 (0) | 2013.08.08 |
php 한글깨짐 방지 (0) | 2013.08.02 |