반응형

게시판처럼 출력할 데이터가 많을 때, 게시물을 페이지 단위로 분할해주는 소스입니다.

소스를 참고하여 작동 원리를 먼저 이해하시고, 자신의 사이트에 알맞게 넣어 사용하세요.

적용 결과는 래와 같이 표시 됩니다. (전체 100 페이지, 페이지 번호를 10 개씩 보여줄 때)
1 2 3 4 5 6 7 8 9 10...100 [다음]
[이전] 1...11 12 13 14 15 16 17 18 19 20...100 [다음]
[이전] 1...91 92 93 94 95 96 97 98 99 100

/** 소스 & 설명 **/
// 한 화면에 출력할 페이지 번호 갯수를 설정합니다. 10개씩 보여줍니다.

$_page[page_num] = 10;
5 개로 설정하면
(이전) 11 12 13 14 15 (다음)


// 한 페이지에 출력될 게시물 수를 설정합니다. 보통 10개에서 20개 정도의 게시물을 보여줍니다.
$_page[list_num] = 50;

// 페이지 번호가 없으면 1 을 기본값으로 설정합니다.
$page = ($page) ? $page : 1;

// 게시물 수($data_num)를 페이지당 출력 수로 나눠 페이지 수를 계산합니다.
$_page[total_page] = ceil($data_num / $_page[list_num]);

// 페이지 시작 번호를 계산합니다. 변수 값은 실제 페이지 시작 번호보다 1이 적습니다.
$_page[start_page] = (int)(($page - 1) / $_page[page_num]) * $_page[page_num];

// 잘못된 페이지 번호를 경고합니다.
if ($page > $_page[total_page]) {
    echo "잘못된 페이지 번호입니다.";
}

// 첫번째 페이지 그룹을 넘어 갔을 때, 이전 버튼을 표시합니다.
if ($page > $_page[page_num]) {
    echo "<a href=?page=".$_page[start_page].">[이전]</a> ";
    echo "<a href=?page=1>1</a>...";
}

$i = 1;
while($i + $_page[start_page] <= $_page[total_page] && $i <= $_page[page_num]) {
    $_page[move_page] = $i + $_page[start_page];
    if ($page == $_page[move_page]) {
        echo $_page[move_page];
    } else {
        echo "&nbsp;<a href=?page=".$_page[move_page].">".$_page[move_page]."</a>&nbsp;";
    }
    $i++;
}

// 마지막 페이지 그룹 전까지 다음 버튼을 표시합니다.
if ($_page[total_page] > $_page[move_page]) {
    $_page[next_page] = $_page[move_page] + 1;
    echo "...<a href=?page=".$_page[total_page].">".$_page[total_page]."</a>";
    echo " <a href=?page=".$_page[next_page].">[다음]</a>";
}

반응형

관련글