PHP/Example2013.03.29 11:38


일단 지금 하고 있는 것이 PHP라 PHP형식으로 그냥 씁니다.



자주 쓰이는 게시판 페이징 알고리즘. 그렇다고 외울정도로 자주 쓰이는건 아니기에 게시판 만드는게 필요할때 마다 다시 생각해서 알고리즘을 짜니 시간이 오래 걸린다.


그렇기에 아예 블로그에 정리!



1. 우선 한 페이지에 게시글 목록을 띄우기위한 사전작업을 합니다.

// 페이지 설정 $linePerPage = 10; // 한페이지 줄수 - 한 페이지당 몇개의 글을 보여줄 것인가. $blockPerScreen = 5; // 한페이지 블럭수 - 위 스샷에 보이는 [1][2][3] 이런걸 몇개까지 띄워줄 것인가. $total; // 전체글수 보통 DB Query로 알아온다. $totalPage = ceil ($total / $linePerPage); // 총페이지수(올림함수) $totalBlock = ceil ($totalPage / $blockPerScreen); // 총블럭수(올림함수) //현재 페이지를 띄워주기 위한 설정 if (!$page) $page = 1; // 현재페이지 - 외부에서 넘겨받은 값 $block = ceil ($page / $blockPerScreen); // 현재블럭 $startRow_Num = ($page - 1) * $linePerPage; // 게시판 글 시작 순서

주석이 자세하니 대충 감이 오실 겁니다.

전체 글 수와, 한페이지 줄수, 블럭수 를 이용해 총 페이지와 블럭을 구합니다.


11번째 줄은 현재 페이지 번호 입니다. 보통 숫자를 누르거나 위 스샷에서 보이는 < 라던가 << 눌렀을때 페이지 번호를 넘겨주죠.

아예 게시판 첨 접속한다 하면 넘겨주는 페이지번호가 없으니 1로 잡습니다.


그리고 현재의 블록을 구하고, 중요한 startRow_Num 을 구해야 합니다.

즉 각 페이지 마다 첫번째 줄에 갖다놓을 DB 행번호 입니다.


이 번호를 첫글로 해서 위의 소스에서는 10개씩 데이터베이스에서 가져옵니다.

(총 100개의 행이 있다면 그중에서 30번째 행부터 10개를 가져오기 위한 시작 번호)


이부분은 데이터베이스마다 SELECT을 작성하는게 다릅니다.

MY-SQL은 쉬우니 넘어가고... 오라클은 이곳을 참조하세요.


이렇게 가져온 데이터를 화면에 그냥 뿌려주면 됩니다.



2. 페이지 이동 작업하기

위의 보이는 스샷을 표현하는 방법입니다.

// 페이지의 이동 $firstPage = (($block - 1) * $blockPerScreen) + 1; // 첫번째 페이지번호 $lastPage = min ($totalPage, $block * $blockPerScreen); // 마지막 페이지번호 $prev = $page - 1; // 이전페이지 '<' 표시 $next = $page + 1; // 다음페이지 '>' 표시 // 페이지 블럭의 이동 $prevBlock = $block - 1; // 이전블럭 $nextBlock = $block + 1; // 다음블럭 $prevBlockpage = $prevBlock * $blockPerScreen; // '<<' 눌렀을때의 페이지번호 이전 블럭에서의 마지막 페이지 번호이다. $nextBlockpage = $nextBlock * $blockPerScreen - ($blockPerScreen - 1); // '>>' 눌렀을때의 페이지번호 다음 블럭에서의 첫 페이지 번호이다.

[1][2][3][4] 등등은 사실 쉽습니다.
그냥 각 페이지 번호를 넘겨주는 링크만 걸어주면 됩니다. 
www.dkanrjskdmdkdkd.com/page?page=4

뭐 이런식으로 GET방식 링크를 걸어줘도 되고요. 개발자 하기 나릅입니다.
위 코드에서 $first_page, $last_page는 [1][2][3][4] 를 fot문 돌려서 보여주기 위한 변수입니다.
위 두개의 코드대로면은 페이지 블록 이동에 따라


[1][2][3][4][5], [6][7][8][9][10] 등으로 표시가 되겠지요.


약간 계산이 필요한건 '<' '>' 와 '<<' '>>' 입니다.

'<' '>' 는 그냥 현재 페이지에서 -1을 하거나 +1을 한 페이지를 링크로 만들면 되니 쉽습니다.


페이지 블럭 이동을 위한 '<<' '>>' 의 페이지 번호로 사용되는건

$prevBlockpage 와, $nestBlockpage 입니다.


블럭 이동후 보여지는 페이지를 어떤 페이지로 할거냐에 따라 계산이 약간씩 바뀝니다.

여기서는 이전 블럭으로 넘어가면 그 블럭의 마지막 페이지를 보여주려 하고,

다음 블럭으로 넘어가면 그 블럭의 첫 페이지를 보여주고자 위 처럼 작성하였습니다.


Posted by 하품 - yawn 하품 - yawn

댓글을 달아 주세요

  1. 비밀댓글입니다

    2017.11.15 15:34 [ ADDR : EDIT/ DEL : REPLY ]