이번에는 게시판에 페이징 기능을 넣어보겠다.
페이징 기능을 추가하려면 몇가지 변수와 로직을 추가해야한다.
지금까지 다룬 것은 페이지네이션 바를 구성하고 번호에 해당하는 페이지를 보여준다.
각 페이지는 5개의 포스트로 구성되어 있다.


마지막 페이지를 확인해보면 5개의 포스트를 채우지 못하여 2개의 포스트만 출력하는걸 알 수 있다.
전과 후로 한칸 씩 이동하는것은 다음 포스트에서 다룬다.
해당 코드를 살펴보자.
$count_sql = "SELECT COUNT(*) FROM posts";
우선 DB내부에 칼럼 수를 확인해주어야한다. 칼럼 수를 이용해서 페이징을 할 것이므로 쿼리를 만들어준다.
$row_c = $connect_statment->fetch(PDO::FETCH_ASSOC);
$count = $row_c['COUNT(*)'];
COUNT를 사용하여 값은 변수에 담으면 Array의 형태로 저장된다. Array내부를 확인해보면 칼럼의 수가 COUNT(*)으로
저장되어있다. 이를 불러와 따로 변수에 담아주어야한다.
$page = isset($_GET["page"])? $_GET["page"] : 1;
페이징을 위해서 변수를 선언해줘야한다. 해당 구문이 없으면 페이지네이션이 나중에 나오기때문에
page라는 GET응답이 없으므로 오류가 생긴다. 이를 방지하기 위해 $_GET["page"]가 없을 경우 page에 값을 부여해준다.
$start = 0;
$page_num = 5;
$pagination = ceil($count / $page_num);
mysql의 limit을 사용하여 한 페이지마다 표시할 페이지의 수를 정해야한다.
pagenation 변수는 위에서 구한 칼럼(포스트)의 수와 한 페이의 수를 나눠서 반올림해준다.
만약 11개의 포스트가 존재한다면 5로 나누어 소수점은 반올림하여 3개의 페이지를 만들어준다.
2개의 페이지는 5개의 포스트를 출력하고 마지막 페이지는 남은 1개의 포스트를 출력한다.
$start = ($page - 1) * $page_num;
$sql = "SELECT * FROM posts limit $start , $page_num";
start 변수는 페이지마다 5씩 늘어나야한다. 따라서 현 페이지에 값에서 1을 빼주고(page의 기본값은 1이므로) 최대 포스트 수를 곱해준다. 첫 페이지의 경우 0~4까지 표시한다. 페이지마다 값이 5씩 증가한다. sql 쿼리에서 limit을 이용하여
페이지마다 몇개의 포스트를 표시할것인지 정해준다.이를 완료하면 기본적인 구성이 완료된다.
다음으로 페이지네이션을 구성해줘야한다.
<nav aria-label="Page navigation example">
<ul class="pagination">
<li class="page-item">
<a class="page-link" href="#" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
<?php for($page = 1; $page <= $pagination; $page++) : ?>
<li class="page-item"><a class="page-link" href="<?= 'test.php?page='.$page ?>"><?=$page?></a></li>
<?php endfor ?>
<li class="page-item">
<a class="page-link" href="#" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>
bootstrap을 이용해 구성해준다. php에서 for문은 endfor를 이용해 중간에 다른 php 구문을 삽입할 수 있다.
이를 이용하여 페이지네이션을 구성해준다. 현제 test페이지에서 구성중이므로 test.php?page로 이동시켜야한다.
해당 구문을 완성하면 기초적인 페이징이 완료된다.