간단한 페이징 처리

<?php
$posts = 1000;      // 전체 게시물 개수
$per_page = 20;     // 한 페이지 나타낼 게시물 개수
$cur_page = 15;     // 현재 선택한 페이지 번호, $_GET['page']
$pps = 10;          // 출력할 페이지 번호 개수

// $pps는 짝수이어야 한다.
if ($pps % 2 != 0) $pps++;

// 총 페이지 수
$npages = ($posts / $per_page) + (($posts % $per_page != 0) ? 1 : 0);

// 총 페이지 수가 1이면 적절하게 처리
if ($npages < 2) return;

$page1 = $cur_page - $pps / 2;
$page2 = $cur_page + $pps / 2;

if ($page1 < 1) {
    $page2 -= $page1;
    $page1 = 1;
}
elseif ($page2 > $npages) {
    $page1 -= ($page2 - $npages);
    $page2 = $npages;
}

if ($page1 < 1) 
    $page1 = 1;

if ($page2 > $npages)
    $page2 = $npages;

$pageURL = array();

// 처음 페이지 출력
if ($page1 > 1) {
    echo "처음 ";
}

// 이전 페이지 출력
if ($cur_page > 1) {
    printf("이전 ", $cur_page - 1);
}

for ($i = $page1; $i <= $page2; $i++) {
    $pageURL[] = ($i == $cur_page) ? $i : "[$i]";
}

echo implode(' ', $pageURL);

// 다음 페이지 출력
if ($cur_page < $npages) {
    printf("다음", $cur_page + 1);
}

// 마지막 페이지 출력
if ($page2 < $npages) {
    printf("마지막", $npages);
}
?>

'WebDevelop > PHP' 카테고리의 다른 글

PHP란 무엇인가...  (0) 2007.09.17
XML 생성 Class  (0) 2007.08.19
history.back()해도 폼값 남아 있기  (0) 2007.08.18
Return top