웹마스터 팁

음...생각보다 페이지의 출력 방식 때문에 고생하시는 분들이 좀 있는 것 같아서 티나보드에서 사용하는 페이지수의 출력 부분을 알려드릴게요~

(이것두 알고리즘이라 해야하나?)
음..암튼 나름대로 제가 머리굴려서 구현한 페이지부분 입니다.
아주 세세하게 설명을 하면 너무 길어 질것 같아서 간력히 하겠습니다.
어렵다 싶으신 분들은 소스를 보시면서 대충 이렇구나 하시고 이해하시면 될거여요.
어디까지나 페이지수를 구하는 방법과 출력 방법일 뿐 입니다.
결과값을 가지고 페이지에 맞는 게시물의 출력 방식은 알아서 해주셔야겠죠.
그리고 코드정리가 좀 귀찬아서 티나보드 소스를 그대로 가져 왔으니까 html 태그는 무시하고 봐주세요.

[1]...[9][10][11][12][13][14][15][16]...[42]

이런식으로 출력됩니다.

아래의 코드중 실제로 게시판에서 가공되어 사용되는 변수(결과값)는 $page 달랑하나 입니다.
나머지는 페이지수를 구하고 페이지를 그룹에 맞추어 출력해 줍니다.
30개의 페이지가 있다면
1 부터 30 까지 한화면에 출력해서는 안되겠죠.

--------------------------------------------------------------------------------------------

if($total_arti) {
if($page_num==1) echo "<font size=1 color=#333333>[1]</font></td>";
  elseif($page_num>1) { $base_page=$start_page; $start_page=$start_page;
if($start_page>7) { $priv_page=$start_page-1; $start_base_page=$start_page-8;
                      echo "<a href=?code=administration&id=$id&page=0$get_query><font size=1 color=#333333>[1]</font></a>
                            <a href=?code=administration&id=$id&page=$priv_page&start_page=$start_base_page$get_query>....</a> ";
                   }
    for($i=0;$i<8;$i++) {
     $print_page=$start_page+1; $now_page=$page+1;
      if($now_page==$print_page) echo "<font size=1><b>[".$print_page."]</font></b>";
      else echo "<a href=?code=administration&id=$id&page=$start_page&start_page=$base_page$get_query><font size=1 color=#333333>[".$print_page."]</font></a>"; $start_page++;
      if($page_num==$print_page) break; }
$more_page=$page_num-$print_page;
if($more_page>0) {
  $last_page=$page_num-1;
   if($last_base_page=(int)$page_num%8) $last_base_page=$page_num-$last_base_page;
   else $last_base_page=$page_num-8;
  }
}
}

--------------------------------------------------------------------------------------------
**페이지당 출력 수를 20이라 가정합니다. **

//$total_arti => 전체게시물 숫자
if($total_arti) {
//게시물이 하나라도 있다면 실행됩니다. 이말은 게시물이 없다면 총 페이지 숫자가 뜨지 않는다는 이야기도 돼죠.

if($page_num==1) echo "<font size=1 color=#333333>[1]</font></td>";
//전체게시물이 관리자가 정한 게시물 출력수에 못미치면 페이지근 당근 1이 되죠. 고로 '[1]'을 출력합니다.

  elseif($page_num>1) { $base_page=$start_page; $start_page=$start_page;
//전체 게시물이 관리자가 정한 게시물수를 초과한다면 페이지는 한페이지 이상이 됩니다.
//$start_page => 한번에 보여질 페이지번호의 목록에서 첫페이지번호 ex) [1]...[9][10][11][12][13][14][15][16] <= 하나의 그룹
//화면상에 보여지는 첫번째 페이지는 [9]이지만 프로그램에서는 [8]로 해석합니다.
//출력되는값                     : [1][2][3]
//프로그램에서 해석되는 값 : [0][1][2]

if($start_page>7) { $priv_page=$start_page-1; $start_base_page=$start_page-8;
                      echo "<a href=?code=administration&id=$id&page=0$get_query><font size=1 color=#333333>[1]</font></a>
                            <a href=?code=administration&id=$id&page=$priv_page&start_page=$start_base_page$get_query>....</a> ";
                   }
//'...'과 [1]은 페이지가 8을 넘었다면 출력됩니다.
//사용자가 [1]을 클릭하면 처음 페이지로 이동하고,
//사용자가 '...'을 클릭하면 현재 페이지 목록이 어디이건간에 페이지는 이전의 그룹으로 이동합니다.

    for($i=0;$i<8;$i++) {
//for($i=0;$i<8;$i++) 변수에 정의하지 않고 저는 8로 사용하였지만 변수로 정의하셔서 원하실때마다 바꾸어 주셔도 좋겠죠.
//물론 번호가 몇번이든간에 [number]식으로 8번을 출력합니다.

     $print_page=$start_page+1; $now_page=$page+1;
//왜 1씩을 더하는지 아시죠? 해석되는 페이지의 값은 출력 값보다 1이 낮습니다.
//$now_page => 현재 사용자가 위치한 페이지와 동시에 get쿼리로 넘겨받은 값입니다.
//이 값이 있어야 사용자가 위치한 페이지와 페이지에 맞는 게시물을 뿌려줄수가 있겠죠.

      if($now_page==$print_page) echo "<font size=1><b>[".$print_page."]</font></b>";
//현재 위치한 페이지가 출력될 페이지수와 일치한다면 링크를 걸지 않고 일반텍스트로 출력합니다.

      else echo "<a href=?code=administration&id=$id&page=$start_page&start_page=$base_page$get_query><font size=1 color=#333333>[".$print_page."]</font></a>"; $start_page++;
//그렇지 않다면 페이지마다 링크를 걸게됩니다.


      if($page_num==$print_page) break; }
//$page_num => 전체 페이지수 입니다.
//전체 페이지수는 출력될 전체 게시물/출력될 페이지수 입니다.
//나눠서 나머지값이 있다면 +1을 하고 딱 떨어진다면 그 값을 그대로 사용합니다.
//$page_num(총페이지수)가 $print_page 수와 일치하면 루프가 종료됩니다.

$more_page=$page_num-$print_page;
//$more_page => 현재 위치한 페이지를 기준으로 페이지가 더 있는지 값을 구합니다.

if($more_page>0) {
  $last_page=$page_num-1;
   if($last_base_page=(int)$page_num%8) $last_base_page=$page_num-$last_base_page;
   else $last_base_page=$page_num-8;
//페이지가 더있다면 전체페이지를 관리자가 정한 페이지수를 나눠서 나머지 값이 있는지를 구하고 나머지 값이 있다면 $last_base_page는 총페이지 수에서 1혹은 0을 뺍니다.
//$last_page => 마지막 페이지의 출력번호입니다. 총페이지 수에서 1을 빼줍니다.
//$last_base_page의 결과값을 정수로 선언해 주어야 3.45464처럼 애메한 페이지가 나오지 않습니다.
//총페이지가 더블이라면 해보진 않았지만 웃기겠네요
//화면상에 총 3.42343의 페이지가 존재합니다. 하고 출려되면 이상하겠죠?
  }
}
}

위에서도 언급했지만 게시판에서 사용되는 결과값은 $page 뿐입니다.
게시판에서는 다음처럼 응용하셔도 될거여요.
실제로 티나보드에서도 $page의 결과값을 다음처럼 해당 페이지($page)만큼 값을 구하고 그 값만큼 sql에서 뽑아온 $result를 루프시켜 해당 게시물이 나올때까지 pointer를 이동시킵니다.

if($page) {
$null_roop=$page*$페이지당 출력수;
for($i=0;$i<$null_roop;$i++) $null=mysql_fetch_array($result); }

문장력이 없어 제가 봐도 참 이해하기 힘드네요...그래도 조그마한 도움이 되셨기를...
제목 글쓴이 날짜
주소끝에 /zbxe 안적어도 홈페이지에 바로 들어오게 하는법?? [10] 박태훈922 2008.02.07
LI UL OL 이 페이지에서 적용이 안될경우 [1] 찐빵아저씨 2008.01.30
홈페이지에 예쁜 날씨 배너를 달아보자!!!! [3] file blue7376.myid.net 2008.01.28
제로보드XE 외부페이지에 javascrip 삽입하기 [3] BlueGATE 2008.01.22
홈페이지에 간단하게 뮤직플레이어와 악세사리 설치하기 file 푸른커튼 2008.01.12
홈페이지 전반에서 오른쪽 클릭 금지하기 [12] 팬더사촌 2008.01.08
관리자 페이지 않나오게 하기 [1] Diver 2008.01.04
외부로그인-특정 페이지에 로그인창만 나타나게 하고 로그인하면 메인페이지로 이동하기 [11] 레드맨 2008.01.02
홈페이지에 최근글 넣고 새창으로 띄우기 happyblog 2008.01.02
내 홈페이지에 구글 검색용 애드센스 달기 file RulruRalra 2008.01.01
로그아웃 페이지가 심심한듯 보여서 이미지를 넣어봤습니다. [9] file moonsoo 2008.01.01
외부프로그램(페이지)에서 zbxe 로그인 정보 연동하기 [33] file 도데군 2007.12.23
IE Toy 사용시 ''페이지'', ''외부페이지'' 차단되네요... [2] 폭풍의 전야 2007.12.22
IP대역에 따라 다른 페이지 보여주기 [1] 지연아빠 2007.12.20
페이지가 갑자기 하얀화면으로 나올경우에는 이렇게 해보십시오. [9] file 하나로45 2007.12.13
외부페이지에서 위젯사용하지 않고 로그인 정보 다루기. [5] [1] 길치객 2007.12.12
외부페이지 사용법 [8] 길치객 2007.12.11
권한없는 모듈을 만났을때 로그인 페이지 띄우기.. [10] 똑디 2007.12.11
외부페이지에서 매개변수 사용가능하도록 하는 방법 [12] 라르게덴 2007.12.05
[동영상 강좌2] zbxe 페이지 생성과 기능 설명 [45] file 필반 2007.12.03