RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR

페이지 수를 계산할려면 일단 페이지가 어떻게 보여져야 하는지 패턴을 찾아야 합니다...^^

 

그리고 이래저래 여러가지 계산이 필요합니다....ㅡㅡ;;;

 

제일 쉬운 방법으로 구현 하는 방법은...

 

먼저 한 페이지 당 몇 개의 게시물을 보여줄 것인지를 지정해야 합니다.

 

만약 게시물에 순번이 매겨져 있고 한페이지 당 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>";
/////////////////////////////////////////////////////////////////////

 

이올린에 북마크하기
2007/04/24 14:51 2007/04/24 14:51
http://jiny.kr/trackback/17
전체 (406)
지니소식 (4)
자료실 (4)
정보|뉴스 (5)
SmartPhone (1)
Languages (206)
Server (153)
Database (27)
Design (4)
Gallery (0)
분류하기귀찬.. (2)
«   2012/02   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      
  1. 창의력과 상상력을 넘어서  2009
    Tomcat 6.0 기본 환경 설정
  2. 닥공  2009
    서블릿 tomcat 6.0 실행시 에러
  1. 2010/07 (1)
  2. 2010/05 (1)
  3. 2010/02 (3)
  4. 2010/01 (3)
  5. 2009/05 (2)
Statistics Graph