0
 33   4   1
  View Articles

Name  
   손병목  (2002-11-24 00:03:21, Hit : 31059, Vote : 2363)
Homepage  
   http://www.itmembers.net
Subject  
   게시판 글 목록 보기 기능(5) list.php 설명(下)

맘 같아서는 이 강좌, 얼릉 끝내고 싶지만, 잘 안되네요.
자유게시판에 보면 PHP 강좌를 기다리시는 분도 계시던데, 정말 죄송합니다.
제 시간이 허락하는 대로 최대한 빠르게 진행을 하겠습니다. (그리고 관심을 가지고 보아주셔서 정말 감사합니다.)


오늘은 게시판 목록 보기 마지막 시간이네요.
list.php 소스 93행부터 끝까지 설명드리겠습니다.

먼저 아래 111행을 주의깊게 봐주세요.
list.php?page=1으로 링크하도록 프로그래밍되어 있습니다.
page라는 변수에 1을 대입한 다음 list.php를 실행하라는 의미겠죠. 이렇게 되면 list.php 파일이 실행될 때 page 변수, 즉 $page에 1을 대입하게 됩니다.

현재 주소 표시줄을 한번 보세요. http://www.itmembers.net/board/view.php?id=php&page=1&sn1=&divpage=1...... 이런 식으로 되어 있죠?\
id는 php, page는 1, sn1은 없고, divpage는 1.... 이런 식으로 변수 값을 가지고 view.php를 실행한다는 뜻입니다. 여러 개의 변수(파라미터)들을 사용할 때는 가운데 & 기호를 써서 분리합니다.

아래 소스는 결국 page 변수에 어떤 값을 넘겨주느냐를 결정하기 위한 프로그램입니다.
111행에는 page에 1을 대입하고 112행에서는 page에 $prev를 대입했습니다. 118행에서는 $go_page를, 140행에서는 $next를 대입했습니다.
그러면 결국 $prev, $go_page, $next 등이 무엇을 의미하는지만 알면 아래 소스를 가볍게 이해할 수 있겠죠?

  1. <?
  2. //여기서부터 각종 페이지 링크
  3. //먼저, 한 화면에 보이는 블록($page_num 기본값 이상일 때 블록으로 나뉘어짐 )
  4. $total_block=ceil($total_page/$page_num);
  5. $block=ceil($page/$page_num); //현재 블록
  6.  
  7. $first=($block-1)*$page_num; // 페이지 블록이 시작하는 첫 페이지
  8. $last=$block*$page_num; //페이지 블록의 끝 페이지
  9.  
  10. if($block >= $total_block) {
  11.         $last=$total_page;
  12. }
  13.  
  14. echo "
  15.                 &nbs p;       <p align=center>";
  16. //[처음][*개앞]
  17. if($block > 1) {
  18.         $prev=$first-1;
  19.         echo "<a href='list.php?page=1'>[처음 ]</a>&nbsp; ";
  20.         echo "<a href='list.php?page=$prev'>[$page_num 개 앞]</a>";
  21. }
  22.  
  23. //[이전]
  24. if($page > 1) {
  25.         $go_page=$page-1;
  26.         echo "  <a href='list.php?page=$go_page'>[이전 ]</a>&nbsp;       ";
  27. }
  28.  
  29. //페이지 링크
  30. for ($page_link=$first+1;$page_link<=$last;$page_link++) {
  31.         if($page_link==$page) {
  32.                 echo "<font color=green><b>$page_link</b></font>";
  33.         }
  34.         else {
  35.                 echo "<a href='list.php?page=$page_link'>[$page_link]</a>";
  36.         }
  37. }
  38.  
  39. //[다음]
  40. if($total_page > $page) {
  41.         $go_page=$page+1;
  42.         echo "&nbsp;<a href='list.php?page=$go_page'>[다음]</a>";
  43. }
  44.  
  45. //[*개뒤][마지막]
  46. if($block < $total_block) {
  47.         $next=$last+1;
  48.         echo "<a href='list.php?page=$next'>[$page_num 개 뒤]</a>&nbsp;";
  49.         echo "<a href='list.php?page=$total_page'>[마지막]</a></p>";
  50. }
  51.  
  52. ?>
  53.         </td>
  54.     </tr>
  55.     <tr>
  56.         <td width=100% colspan=5>
  57.             <p align=center><a href='write.php'>[글쓰기]</a></p>
  58.         </td>
  59.     </tr>
  60. </table>
  61. </body>
  62. </html>

96행은 게시판의 전체 블록 수를 구하는 방법입니다. 전체 페이지 수에서 한 화면에 보여 줄 페이지 수를 나눈 값의 올림 수를 구한 것입니다.
블록이 뭔지 이해가 잘 안되시면 아래 도표를 보면 좀 이해가 되실 겁니다.

예를 들어, 전체 글의 수가 225개라고 가정합시다. 그러면 첫 화면에는 이렇게 보여야 됩니다.

[1][2][3][4][5][6][7][8][9][10][다음][10개 뒤][마지막]

한 페이지에 10개의 페이지만 바로갈 수 있게 되어 있습니다. 이렇게 10개를 하나의 블록이라고 할 수 있습니다. 그러면 다음 블록으로 넘어가려면 어떻게 해야될까요? [10개 뒤]를 누르면 다음 블록으로 넘어간다고 가정합시다.
[10개 뒤]를 클릭하면 아래와 같이 되겠죠.

[처음][이전][10개 앞][11][2][13][14][15][16][17][18][19][20][다음][10개 뒤][마지막]

여기서 다시 [10개 뒤]를 누르면, 아래와 같이 나와야 되겠죠.

[처음][이전][10개 앞][21][22][23][다음]

도표로 정리하면 이렇게 되겠죠.

블록 번호

처음 페이지

마지막 페이지

1

1

10

2

11

20

3

21

23

99와 100행에서는 블록의 처음과 마지막 페이지 번호를 구하는 식입니다.
그런데 실제 계산해 보면 제1블록일 때 $block의 값이 0이 됩니다. 그리고 제2블록일 때 10이, 제3블록일 때 20이 됩니다. 위의 도표와 다르죠.
그러나 122행에서 실제 사용될 때는 +1을 해서 사용하게 됩니다. 그러면 위의 도표와 맞아 떨어집니다.

기타 나머지 부분도 소스를 보면서 하나하나 이해해야 합니다. 제가 이리저리 아무리 길게 설명해도 스스로 이해하지 못하면 아무런 소용이 없습니다.
실제 프로그램을 실행시켜가면서 위의 소스를 반복해서 보다가 보면 조금씩 이해가 될 겁니다.

당장 이해가 안된다고 포기하지 마세요~~~ (그래도 이해가 안되면 그냥 베껴서 쓰면 되죠 뭐...^^)

이상, 동주아빠 손병목이었습니다.


Prev
   게시판 글 내용 보기 기능(1) view.php 디자인

손병목
Next
   게시판 글 목록 보기 기능(4) list.php 설명(中)

손병목


Copyright 1999-2023 Zeroboard / skin by Zetyx