페이지 수를 계산할려면 일단 페이지가 어떻게 보여져야 하는지 패턴을 찾아야 합니다...^^
그리고 이래저래 여러가지 계산이 필요합니다....ㅡㅡ;;;
제일 쉬운 방법으로 구현 하는 방법은...
먼저 한 페이지 당 몇 개의 게시물을 보여줄 것인지를 지정해야 합니다.
만약 게시물에 순번이 매겨져 있고 한페이지 당 10개($PerPage=10)의 게시물을 보여준다고 가정한다면...
제 1페이지는 1~10번글
제 2페이지는 11~20번글
제 3페이지는 21~30번글
.............
제 n페이지는 (n*10) -(PerPage-1)~n*PerPage번글이 될 것입니다.
자 그러면 한페이지에 정확히 어떻게 뿌려줄 수 있는가?
MySQL에서는 LIMIT라는 것이 지원되기 때문에 별도로 페이지 별로 계산해서 넘겨야 하는 번거러움을 줄일 수 있습니다.
SELECT * FROM table_name ORDER BY list_no LIMIT ($page-1), $PerPage;
여기서 list_no는 게시물의 순번이라 가정하고 $page는 넘어온 페이지라고 가정합니다.
즉 http://www.test.com/test_board/index.php?page=1
이런 식으로 넘어 왔다고 가정할 때 입니다.
따라서 $page는 주소에서 안 넘어 올 수 있기 때문에...
IF (!$page) $page = 1; 이라고 쿼리 날리기 전에 넣어 주시면 됩니다...
그럼 페이지 목록은 어떻게 할 것인가가 남은 데...
이것도 마찬가지로 목록을 몇개 보여 줄건지 지정을 해야합니다.
목록을 보여주는 것이 만약 10개($PageList)라면...
1~100번 글까지 있다면 페이지 목록은 [1]...[10]
101~200번 글까지 있다면 페이지 목록은 [11]...[20]
201~300번 글까지 있다면 페이지 목록은 [21]...[30]
이런 식이 될 것입니다....
따라서
SELECT COUNT(list_no) FROM table_name;
이렇게 쿼리를 날리면 전체 목록 수를 구할 수 있습니다.
여기서 만약 list_no의 갯수가 53개가 나왔다고 가정하면...
[1][2][3][4][5][6] 까지 나와야 할 것이며...
만약 list_no의 갯수가 132개가 나왔다면...
[1][2][3][4][5][6][7][8][9][10][11][12][13][14]까지 나와야 하는데...
1페이지에서 10페이지까지는 [1]~[10]
11페이지에서 마지막 페이지까지는 [11]~[14]가 나와야 할 것입니다...
넘어온 페이지가 $page이고 list_no의 총 갯수를 $TotalList라 하면...
$page = $HTTP_GET_VARS[page];
IF (!$page) $page = 1; // 페이지 값이 넘어 오지 않았을 경우 1로 초기화
$PageList = 10; // 페이지 표시 개수(임의로 지정하세요)
$PerPage = 12; // 1페이지에 표시되는 게시물 수(임의로 지정하세요)
$Sql = mysql_query("SELECT COUNT(list_no) FROM table_name",$DB_CONNECT);
$TotalList = @mysql_result($Sql,0,0);
// 위의 $Sql, $TotalList부분은 님의 테이블에 맞게 변형시켜주시고
// 테스트를 위해 $Sql, $TotalList를 주석처리하시고
// $TotalList = 246; 처럼 임의로 넣어보시면 결과를 확인할 수 있을 겁니다.^^
$Start = (int)($page/$PageList); // 시작할 페이지 계산
$Start = $Start + 1;
IF ($page % $PageList == 0) $Start = $Start - 1;
// 넘어온 페이지가 $PageList로 나누어 떨어질 경우,
// 즉 [10][20][30]...일때 $StartList를 한자리 낮은 리스트임을 알려줌.
// (말이 좀 어렵네요...ㅡㅡ;; 주석 처리하고 실행해 보면 알아요^^)
$StartList = $Start * $PageList - ($PageList - 1);
// 시작할 페이지
$EndList = $Start * $PageList; // 끝날 페이지 계산
// 마칠 페이지
// 마칠페이지가 정확한지 확인 ///////////////////////////////////////
IF ($EndList * $PerPage > $TotalList) {
$EndList = $TotalList / $PerPage + 1;
IF ($TotalList % $PerPage == 0) $EndList = $EndList - 1;
}
/////////////////////////////////////////////////////////////////////
// 넘어온 페이지가 존재하지 않을 때 첫페이지로 돌림 /////////////////
IF ($page >$EndList) {
$StartList = 1;
$EndList = $PageList;
}
// 이전 page 목록 //////////////////////////////////////////////////////
$BackList = $StartList - 1;
IF ($BackList >= 1)
echo "<A HREF='$HTTP_SERVER_VARS[PHP_SELF]?page=$BackList'>[이전 ${PageList}page]</A>";
// 페이지 리스트 //////////////////////////////////////////////////////
FOR ($List = $StartList; $List<= $EndList; $List++) {
echo "<A HREF='$HTTP_SERVER_VARS[PHP_SELF]?page=$List'>[$List]</A>";
}
// 다음 page 목록 //////////////////////////////////////////////////////
$NextList = $EndList + 1;
IF ($TotalList >$EndList * $PerPage)
echo "<A HREF='$HTTP_SERVER_VARS[PHP_SELF]?page=$NextList'>[다음 ${PageList}page]</A>";
/////////////////////////////////////////////////////////////////////


0