본문 바로가기
IT/PHP

php 페이징

by Jeami 2013. 8. 21.
반응형



php 페이징



공부하는 중에 제가 참고하기 위해 저장해두는 소스입니다. 공개로 해놓긴 하지만, 가능하면 그대로 사용하지 마시고 변수명을 비롯하여 수정하여 사용하시기 바랍니다. 

강사님 이름을 몰라서 출처를 따로 표시하지 못하는 점 양해해주시기 바라며, 주석에 대한 부분은 제가 더 적어 놓았습니다.(제가 공부하기 위해서..^^;)

(이 소스는 게시판 리스트.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()함수는 소수점 아래 올림하여 결과값을 출력합니다.

  • $total_page = ceil($total_record / $page_per_record); //전체 페이지 갯수
  • $total_block = ceil($total_page / $block_per_page); //전체 블록 갯수
  • $now_block = ceil($now_page / $block_per_page); //현재 페이지가 속해 있는 블록 번호
  • $start_record = (($now_page-1) * $page_per_record) + 1; //가져올 레코드 시작 번호
  • $start_page = (($now_block-1) * $block_per_page) + 1; //가져올 페이지 시작 번호



  • 아래와 같이 페이지 번호까지 출력해주면 끝입니다.
    • 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블록 이상인 경우 마지막으로 링크 출력; }

    본 소스 출처 : http://sexy.pe.kr/tc/30



    반응형

    '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

    loading