주간 베스트 월간 베스트 3개월 베스트 베스트 게시물
연길시 신화서점 조선말 도서

페이지 인덱스의 구현

네로 | 2001.10.18 23:54:13 댓글: 0 조회: 531 추천: 15
분류웹 프로그래밍 https://life.moyiza.kr/itstudy/1758832
▶ 페이지 인덱스의 구현

안녕하세요~ 비혼입니다. 모처럼 강의글을 올려보네요.


메모장이나 게시판 등에서 게시물 수가 많은 경우 페이지로 나누어 출력합니다. 해당
페이지 번호를 누르면 이동하는 형태죠. 어떻게 구현하는 것일까요...?


1. 먼저 총 게시물 수를 구해야 합니다.
  예를 들어 총 게시물이 123개 있다고 가정.
  $total_article = 123;


2. 그 다음 한번에 보여줄 게시물의 수를 정해야 합니다.
  여기에선 10개씩 보여주겠다고 가정.
  $view_article = 10;


3. 이제 전체 페이지를 구해야 합니다.
  총 게시물의 수를 한번에 보여줄 게시물의 수로 나눈 수를 올림하면 됩니다.
  123 / 10 = 12.3 -> 올림하면 13 페이지가 나옵니다.

이유를 알아볼까요?

일단 123개의 게시물이 있기 때문에 제일 처음 보여줄 게시물은 123번입니다.
123번부터 10개의 값이 출력되니 1 페이지의 경우 114번까지 출력됩니다. 이를 쭉
나열해보겠습니다.

페이지  : 시작 - 끝
01 page : 123 - 114
02 page : 113 - 104
03 page : 103 -  94
04 page :  93 -  84
05 page :  83 -  74
06 page :  73 -  64
07 page :  63 -  54
08 page :  53 -  44
09 page :  43 -  34
10 page :  33 -  24
11 page :  23 -  14
12 page :  13 -   4
13 page :   3 -   1

이런 연유로 13 페이지가 나오는 것입니다. 올림값을 취하는 이유를 알겠죠?


4. 현재 페이지를 지정해야 합니다.
  보통 아무런 페이지값이 지정되지 않은 경우 기본으로 1 페이지를 지정합니다.
  if (!$page) $page = 1; // $page 값이 없을 경우 1로 지정


5. 이제부터는 사용자의 몫입니다.

제일 간단한 형태가 이전 페이지, 다음 페이지의 링크입니다. 현재 페이지가 $page
변수에 지정되어있기 때문에 이전 페이지는 $prev_page = $page - 1; 다음 페이지는
$next_page = $page + 1; 이런 식으로 구한 다음 링크를 출력하면 됩니다.

echo "<a href=program.php?page=$prev_page>이전페이지</a> ";
echo "<a href=program.php?page=$next_page>다음페이지</a> ";

그 다음 그 앞뒤에 제일 처음 페이지와 제일 마지막 페이지를 링크할 수 있습니다.

echo "<a href=program.php?page=1>처음페이지</a> ";
echo "<a href=program.php?page=$total_page>마지막페이지</a>";

그 중간에 자신의 현재 페이지를 출력할수도 있겠죠? 물론 현재 자신의 위치이기
때문에 링크는 걸 필요가 없습니다.

echo "$page ";

지금까지를 정리하면 다음과 같습니다.

echo "<a href=program.php?page=1>처음페이지</a> ";
echo "<a href=program.php?page=$prev_page>이전페이지</a> ";
echo "$page ";
echo "<a href=program.php?page=$next_page>다음페이지</a> ";
echo "<a href=program.php?page=$total_page>마지막페이지</a>";

출력하면 "처음페이지 이전페이지 현재페이지 다음페이지 마지막페이지"값이
출력됩니다.

이것만 가지고는 페이지 인덱스라 부르기엔 기능이 많이 떨어지죠?

일정 영역의 페이지 출력은 정말이지 사용자의 몫입니다. 어떻게 구성을 하느냐에
따라 꽤 쓸만한 페이지 인덱스가 탄생하기도 합니다. 그 부분은 스스로의 학습과제로
남겨놓고 이만 물러날까 합니다.

아. 그냥 물러나진 않죠.

비혼식 페이지 인덱스 코드의 간단한 소개와 설명이 있겠습니다.


▷ 비혼식 페이지 인덱스...?

코드부터 보세요.

[pageindex.php]
--------------------------------------------------------------------------------
<?

$total_article = 347;  // 전체 게시물 수라 가정
$view_article  = 10;   // 한번에 보여줄 게시물 수
if (!$page) $page = 1; // 현재 페이지 지정되지 않았을 경우 1로 지정

// 전페 페이지 구함. ceil() 올림함수
$total_page    = ceil($total_article / $view_article);

// 이전 페이지값 구함 (1보다 작을 경우 1로 지정)
$prev_page = $page - 1;
if ($prev_page < 1) $prev_page = 1;

// 다음 페이지값 구함 (전체페이지값 넘으면 전체페이지값으로 지정)
$next_page = $page + 1;
if ($next_page > $total_page) $next_page = $total_page;

// 페이지 인덱스의 시작과 종료 범위 구함
if ($page%10) $start_page = $page - $page%10 + 1;
else          $start_page = $page - 9;
$end_page = $start_page + 10;

// 이전 페이지 그룹을 지정
$prev_group = $start_page - 1;
if ($prev_group < 1) $prev_group = 1;

// 다음 페이지 그룹을 지정
$next_group = $end_page;
if ($next_group > $total_page) $next_group = $total_page;

// 처음 페이지, 이전 페이지 그룹, 이전 페이지 출력
// 만약 현재 페이지가 1이라면 링크 없이 출력
if ($page != 1)           echo "[<a href=$PHP_SELF?page=1>First</a>] ";
else                      echo "[First] ";
if ($page != 1)           echo "[<a href=$PHP_SELF?page=$prev_group><<</a>] ";
else                      echo "[<<] ";
if ($page != 1)           echo "[<a href=$PHP_SELF?page=$prev_page><</a>] ";
else                      echo "[<] ";

// 페이지 인덱스의 일정 범위 출력
for ($i=$start_page; $i<$end_page; $i++) {
  if ($i>$total_page) break;
  if ($i==$page) echo "[<b>$i</b>] ";
  else           echo "[<a href=$PHP_SELF?page=$i>$i</a>] ";
}

// 다음 페이지, 다음 페이지 그룹, 마지막 페이지 출력
if ($page != $total_page) echo "[<a href=$PHP_SELF?page=$next_page>></a>] ";
else                      echo "[>] ";
if ($page != $total_page) echo "[<a href=$PHP_SELF?page=$next_group>>></a>] ";
else                      echo "[>>] ";
if ($page != $total_page) echo "[<a href=$PHP_SELF?page=$total_page>Last</a>] ";
else                      echo "[Last] ";

?>
--------------------------------------------------------------------------------
- 미리보기 : http://dreamphp.com/study2/pageindex/pageindex.php
- 소스보기 : http://dreamphp.com/study2/pageindex/pageindex.phps


원리는 간단합니다. 현재 페이지의 값을 이용해 일정 영역의 페이지 인덱스를
출력하는 것이죠. 만약 현재 페이지가 1부터 10 사이의 값이라면 1부터 10까지의
페이지 인덱스를 출력하고, 11부터 20 사이라면 11부터 20까지의 페이지 인덱스를
출력하는 형태죠.

123이라면 121부터 130까지겠죠? ^^

현재 페이지값을 10으로 나눈 나머지가 있을 경우엔 현재 페이지에서 그 나머지값을
뺍니다. 그 값에 1을 더하면 페이지 인덱스의 시작값을 구할 수 있죠.

13 페이지의 경우 10으로 나누었을때 나머지는 3. 이를 빼주면 10. 이 값에 1을
더해주면 11이 됩니다. 11부터 출력해주면 되겠죠?

127 페이지의 경우 10으로 나누었을때 나머지는 7. 이를 빼주면 120. 이 값에 1을
더해주면 121이 됩니다. [애초에 나머지값 -1 한 값을 빼줘도 됩니다만.]

다음으로 만약 이 범위의 페이지값을 출력한다 했을때 전체페이지값을 넘어가면
출력하지 않도록 하면 됩니다. 총 37페이지까지 있을때 현재 페이지가 32라면
31부터 40까지 출력되어야 하는데 총 37페이지까지 있다 하였으니 37까지 출력된
후에 종료하도록 하는 것이죠. [같은 말만 반복해서 썼네요;;;]

이 페이지 인덱스의 범위를 구한 다음에 각 범위의 시작값과 끝값을 이용해 바로 전,
다음 그룹을 지정할 수 있습니다.

그 다음은 현재 페이지값에서 -,+ 1씩 하면 이전 페이지와 다음 페이지도 쉽게
구할 수 있구요. 1이 처음, 전체페이지가 마지막이 되겠죠? ^^;

차근차근 살펴보세요.


ps
이 페이지 이동을 적용한 메모장을 보시겠어요?
기존 강의에 다루었던 메모장을 꾸며봤습니다.

- 오리지널 : http://dreamphp.com/study2/memo/study_input.html
- 꾸민모습 : http://dreamphp.com/study2/memo/new_memo.php


※ 링크를 눌러 이동할 경우 애초에 설정한 화면과는 다르게 나오는군요.
주소를 복사해 직접 주소줄에 입력후에 이동해보세요. ^^

* 전설님에 의해서 게시물 이동되었습니다 (2004-05-30 17:07)
* 이동한 이유 :
* 원래의 위치 : 웹 공부 >> 웹 프로그래밍
* 이동후 위치 : 웹 공부 >>

* 전설님에 의해서 게시물 이동되었습니다 (2004-05-30 17:12)
* 이동한 이유 :
* 원래의 위치 : 웹 공부 >>
* 이동후 위치 : 웹 공부 >> 웹 프로그래밍
추천 (15) 선물 (0명)
첨부파일 다운로드 ( 1 )
pageindex.zip | 4.1KB / 10 Download
IP: ♡.156.♡.178
3,006 개의 글이 있습니다.
제목 글쓴이 날짜 조회
관리자
2003-09-20
11866
관리자
2003-09-20
11414
관리자
2003-09-20
20548
지구인
2010-08-27
19343
지구인
2009-09-07
13664
SOLIDH
2010-01-29
15622
엔죠라이프
2004-10-07
16718
노아
2001-10-27
554
노아
2001-10-27
525
노아
2001-10-27
462
노아
2001-10-27
2894
네로™
2001-10-26
958
네로™
2001-10-22
1748
네로™
2001-10-22
1671
네로™
2001-10-21
2929
네로™
2001-10-21
1594
네로™
2001-10-21
540
네로
2001-10-18
659
네로
2001-10-18
531
네로
2001-10-18
1672
네로
2001-10-18
1159
네로
2001-10-18
544
네로
2001-10-18
1033
네로
2001-10-18
957
네로
2001-10-18
2437
광수
2001-10-17
530
광수
2001-10-17
485
광수
2001-10-17
424
모이자 모바일