"PHP 게시판 페이지네이션 구현"의 두 판 사이의 차이

5번째 줄: 5번째 줄:
<?php
<?php
include 'pdo.php';
include 'pdo.php';
$page = ($_GET['page'])?$_GET['page']:1;
$page = $_GET['page'] ? intval($_GET['page']) : 1;
 
$LIST_SIZE = 6;
$MORE_PAGE = 3;


$article_count = query_one("SELECT COUNT(*) FROM board1");
$article_count = query_one("SELECT COUNT(*) FROM board1");


$list_size = 6;
$page_count = ceil( $article_count / $LIST_SIZE );
$more_page = 3;
$start_page = max($page - $MORE_PAGE, 1);
$page_count = ceil( $article_count / $list_size );
$end_page = min($page + $MORE_PAGE, $page_count);
 
$prev_page = max($start_page - $MORE_PAGE - 1, 1);
$start_page = $page - $more_page;
$next_page = min($end_page + $MORE_PAGE + 1, $page_count);
$end_page = $page + $more_page;
if( $start_page < 1 ) $start_page = 1;
if( $end_page > $page_count ) $end_page = $page_count;
 
$prev_page = $start_page - $more_page - 1;
$next_page = $end_page + $more_page + 1;
if( $prev_page < 1 ) $prev_page = 1;
if( $next_page > $page_count ) $next_page = $page_count;


$s_point = $list_size * ( $page - 1 );
$offset = ( $page - 1 ) * $LIST_SIZE;
$rows = query_rows("SELECT * FROM board1 ORDER BY id DESC LIMIT $s_point, $list_size");
$rows = query_rows("SELECT * FROM board1 ORDER BY id DESC LIMIT $offset, $LIST_SIZE");
?>
?>
<style>
<style>
.btn {
a { text-decoration: none; }
.pagenum {
display: inline-block;
display: inline-block;
width: 25px;
border: 1px solid transparent;
color: gray;
color: gray;
width: 25px;
font-weight: bold;
     text-decoration: none;
     text-decoration: none;
border: 1px solid gray;
border-color: transparent;
text-align: center;
text-align: center;
font-weight: bold;
}
.btn:hover {
color: orange;
border: 1px solid orange;
}
.btn.current {
color: orange;
text-decoration: underline;
}
.paging_area {
text-align: center;
}
}
.pagenum:hover { color: orange; border: 1px solid orange; }
.pagenum.current { color: orange; text-decoration: underline; }
.move_btn { color: gray; }
.disabled { color: silver; }
.paging_area { text-align: center; }
</style>
</style>
<table>
<table>
<tr>
<tr>
56번째 줄: 46번째 줄:
<?php foreach( $rows as $row ): ?>
<?php foreach( $rows as $row ): ?>
<tr>
<tr>
<td><?php echo $row['id']; ?></td>
<td><?= $row['id'] ?></td>
<td><?php echo $row['subject']; ?></td>
<td><?= $row['subject'] ?></td>
</tr>
</tr>
<?php endforeach ?>
<?php endforeach ?>
</table>
</table>
<div class='paging_area'>
<div class='paging_area'>
<?php if( $start_page > 1 ): ?>
<a class='move_btn' href="<?= "$PHP_SELP?page=$prev_page" ?>">« 이전</a>
<a class='pagenum' href="<?= "$PHP_SELP?page=1" ?>">1</a> ...
<?php else: ?>
<span class='move_btn disabled'>« 이전</span>
<?php endif ?>


<?php if( $start_page > 1 ): ?>
<?php for( $p = $start_page; $p <= $end_page; $p++ ): ?>
<a href="<?php echo "$PHP_SELP?page=$prev_page"; ?>">« 이전</a>
<a class='pagenum <?= ( $p == $page )?"current":"" ?>' href="<?= "$PHP_SELP?page=$p" ?>">
<a class='btn' href="<?php echo "$PHP_SELP?page=1"; ?>">1</a> ...
<?= $p ?>
<?php else: ?>
</a>
<span>« 이전</span>
<?php endfor ?>
<?php endif ?>


<?php for ($p=$start_page; $p<=$end_page; $p++): ?>
<?php if( $end_page < $page_count ): ?>
<?php if( $p == $page ): ?>
... <a class='pagenum' href="<?= "$PHP_SELP?page=$page_count" ?>"><?= $page_count ?></a>
<a class='btn current' href="<?php echo "$PHP_SELP?page=".$p; ?>"><?php echo $p; ?></a>
<a class='move_btn' href="<?= "$PHP_SELP?page=$next_page" ?>">다음 »</a>
<?php else: ?>
<?php else: ?>
<a class='btn' href="<?php echo "$PHP_SELP?page=".$p; ?>"><?php echo $p; ?></a>
<span class='move_btn disabled'>다음 »</span>
<?php endif ?>
<?php endif ?>
<?php endfor ?>
<?php if( $end_page < $page_count ): ?>
... <a class='btn' href="<?php echo "$PHP_SELP?page=$page_count"; ?>"><?php echo $page_count; ?></a>
<a href="<?php echo "$PHP_SELP?page=$next_page"; ?>">다음 »</a>
<?php else: ?>
<span>다음 »</span>
<?php endif ?>
</div>
</div>
</source>
</source>
* 예제: http://zetawiki.com/ex/php/paging/list.php


==같이 보기==
==같이 보기==

2016년 2월 3일 (수) 11:01 판

1 개요

PHP 페이징 구현
<?php
include 'pdo.php';
$page = $_GET['page'] ? intval($_GET['page']) : 1;

$LIST_SIZE = 6;
$MORE_PAGE = 3;

$article_count = query_one("SELECT COUNT(*) FROM board1");

$page_count = ceil( $article_count / $LIST_SIZE );
$start_page = max($page - $MORE_PAGE, 1);
$end_page = min($page + $MORE_PAGE, $page_count);
$prev_page = max($start_page - $MORE_PAGE - 1, 1);
$next_page = min($end_page + $MORE_PAGE + 1, $page_count);

$offset = ( $page - 1 ) * $LIST_SIZE;
$rows = query_rows("SELECT * FROM board1 ORDER BY id DESC LIMIT $offset, $LIST_SIZE");
?>
<style>
a { text-decoration: none; }
.pagenum {
	display: inline-block;
	width: 25px;
	border: 1px solid transparent;
	color: gray;
	font-weight: bold;
    text-decoration: none;
	text-align: center;
}
.pagenum:hover { color: orange; border: 1px solid orange; }
.pagenum.current { color: orange; text-decoration: underline; }
.move_btn { color: gray; }
.disabled { color: silver; }
.paging_area { text-align: center; }
</style>

<table>
	<tr>
		<th>번호</th>
		<th>제목</th>
	</tr>
	<?php foreach( $rows as $row ): ?>
	<tr>
		<td><?= $row['id'] ?></td>
		<td><?= $row['subject'] ?></td>
	</tr>
	<?php endforeach ?>
</table>

<div class='paging_area'>
	<?php if( $start_page > 1 ): ?>
	<a class='move_btn' href="<?= "$PHP_SELP?page=$prev_page" ?>">« 이전</a>
	<a class='pagenum' href="<?= "$PHP_SELP?page=1" ?>">1</a> ...
	<?php else: ?>
	<span class='move_btn disabled'>« 이전</span>
	<?php endif ?>

	<?php for( $p = $start_page; $p <= $end_page; $p++ ): ?>
	<a class='pagenum <?= ( $p == $page )?"current":"" ?>' href="<?= "$PHP_SELP?page=$p" ?>">
		<?= $p ?>
	</a>
	<?php endfor ?>

	<?php if( $end_page < $page_count ): ?>
	... <a class='pagenum' href="<?= "$PHP_SELP?page=$page_count" ?>"><?= $page_count ?></a>
	<a class='move_btn' href="<?= "$PHP_SELP?page=$next_page" ?>">다음 »</a>
	<?php else: ?>
	<span class='move_btn disabled'>다음 »</span>
	<?php endif ?>
</div>

2 같이 보기

3 참고 자료

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}