/**
* 페이징 함수
*
* @author Woo,Yeon-geun <cjdma@cjdma.com>
*
* @param int $total;
* @param int $now;
* @param int $page;
* @param int $scale;
* @param int $block_scale;
*
* @return int $prev 이전 페이지
* @return int $page 현재 페이지
* @return int $next 다음페이지
* @return int $first 시작할 때의 글번호
* @return array $range 출력하려는 페이지들
*/
function OBS_pubPaging($param)
{
$total = $param['total'];
$now = $param['now'];
// 현재페이지 (없으면 1)
$page = $param['page'] ? $param['page'] : 1;
// 한 페이지에 출력하는 row수
$scale = $param['scale'] ? $param['scale'] : 20;
// 한 페이지에 화면에 출력하는 페이지수 ([prev] 1.2.3.4.5 [next] <- 이 때는 block_scale '5')
$block_scale = $param['block_scale'] ? $param['block_scale'] : 10;
// $now(현재글번호)가 들어올 경우 $now값을 가지고 몇번째 페이지인지 알아내기 (공식 : floor(($now - 1) / $scale) * $scale)
if($now) {
$page = $now ? floor(($now - 1) / $scale) : $page;
}
// 전체 페이지 수
$pages = ceil($total / $scale);
// 현재페이지에서의 첫글번호, 끝글번호
$begin_page = $block_scale * ($page - 1);
$end_page = $block_scale * $page;
// 첫번째블럭번호, 마지막블럭번호 (5,6,7,8,9 <- 여기서 $begin=5, $end=9)
$begin = floor($page / $block_scale) * $block_scale;
$end = $begin + $block_scale;
// 출력될 때의 글번호 10,9,8,7... <- 여기서 first는 '10'
$first = $total - ($scale * ($page - 1));
// 내부적으로 시작값이 '0'인 변수를 '1'로 맞추기...
$begin++;
// 블럭내 끝 record($end)가 전체값($total)을 넘을 수 없으므로...
if($end > $pages) { $end = $pages; }
if($end == 0) { $end = 1; }
// prev 5.6.7.8.9 next - 이 경우에 array(5,6,7,8,9)
$range = range($begin, $end);
// prev(이전페이지)출력 - $page가 1이 아닐 때
if($page != 1)
{ $prev = $page - 1; }
// next(다음페이지)출력 - $page가 $end가 아닐 때
if($page != $pages && $end != 1)
{ $next = $page + 1; }
$return['prev'] = $prev;
$return['page'] = $page;
$return['next'] = $next;
$return['range'] = $range;
$return['first'] = $first;
return $return;
} // function
-------------------------------------------------------------------------------
사용예...
[ 로직부분 ]
$url = 'OpenBBS.com/bbs_list.php';
$total = 98; // 전체 글 수
$page = 1; // 현재 페이지
$scale = 10; // 한페이지에 나타낼 글의 수
$block_scale = // 하단에 나타낼 페이지 수 ( prev 1.2.3.4.5 next ) <- 이럴 경우 $block_scale은 5
// 변수들을 하나로 묶어서
$param = compact('url', 'total', 'page', 'scale', 'block_scale');
// 페이징 함수에 넣는거죠~ ^^
$pub['paging'] = @OBS_pubPaging($param);
// 리턴된 값은 파씽~
$smarty->assign('pub', $pub);
[ 화면 ]
<!-- 페이징 : B -->
<div id="paging">
{if $pub.paging.prev}
<a href="{$url.bbs_list}&page={$pub.paging.prev}">prev</a>
{/if}
{foreach from=$pub.paging.range key=key item=value}
{if $value != $pub.paging.page}
[<a href="{$url.bbs_list}&page={$value}">{$value}</a>]
{else}
[{$value}]
{/if}
{/foreach}
{if $pub.paging.next}
<a href="{$url.bbs_list}&page={$pub.paging.next}">next</a>
{/if}
</div>
<!-- 페이징 : E -->
'인터넷정보' 카테고리의 다른 글
PHP를 이용한 메모리 DB (0) | 2007.10.11 |
---|---|
런타임으로 자바스크립트 화일 열기 (0) | 2007.10.11 |
마우스 오버시 테이블 한줄 색깔 바꾸기 (0) | 2007.10.11 |
간단한 php 달력 (0) | 2007.10.11 |
php로 pop3 데몬을 만들기 (0) | 2007.10.11 |
select 박스 제어하기 (0) | 2007.10.11 |
이미지 없이 모서리 없는 둥근 테이블 만들기 (0) | 2007.10.11 |
fsockopen으로 제작한 http확장클래스 (0) | 2007.10.11 |
3 of 9 바코드 그리기 (0) | 2007.10.11 |
HTML 4.01 엔티티(Entities) (0) | 2007.10.11 |