php로 게시판 만들기 해봤다.
페이징 부분을 구현하는데 많이 애를 먹었다.
나중에 되면 기억에서 사라질 것 같아 자세히 기록해놔야겠다.
<, >
: 페이지 하나씩 이동하기<<, >>
: 블록 단위로 이동하기<<
: 1번 페이지에서는 이 모양 없어지고, 첫번째 블럭에서는 누르면 1번페이지로 이동<
: 1페이지에서는 이 모양은 비활성화>>
: 마지막 페이지에서는 이 모양 사라지고, 마지막 블럭에서는 누르면 마지막 페이지로 이동>
: 마지막 페이지에서는 이 모양 비활성화이렇게 페이징 부분을 구현하고 싶었다.
하다가 너무 힘들어서 블록 넘어가는건 빼고 싶었는데 오기가 생겨서 마침내 해냈다.
다들 유기적으로 연결되어있어서 딱하나만 설명하기 어려울꺼같다.
변수 설정하는게 매우 중요했다.
변수명을 2개씩 적는건 자기한테 직관적으로 더 잘 다가오는 변수명을 쓰면된다.
: $num
/ $total_count
이렇게 변수를 줄 수 있는데 $total_count
변수명을 썼다.
$t_sql = 'select count(*) from boards';
$t_result = mysqli_query($dbcon, $t_sql);
$row = mysqli_fetch_row($t_result);
$total_count = $row[0];
$list_num = 10; // 한 페이지당 데이터 개수
$page_num = 5; // 한 블럭 당 페이지 수
: $page
지금 내가 있는 페이지의 위치를 알려주는 변수다.
대신 처음 내가 공지사항을 눌러서 들어가면 무조건 1페이지를 보여줘야한다. 그래서 삼항 연산자를 이용해서
$page = isset($_GET['page']) ? $_GET['page'] : 1;
// get으로 값을 가져오는데
// 페이지가 있으면 그 페이지를 보여주고
// 페이지가 없으면 무조건 1페이지를 보여주게 했다.
$total_page = ceil($total_count / $list_num);
$total_block = ceil($total_page / $page_num);
$total_page
: 전체 데이터 수 / 한 페이지 당 데이터 개수 => 80개의 글 / 10개 글 = 8 하고 나온 값에서 무조건 올림을 해줘야한다. $total_block
: 전체 페이지 / 한 블록당 페이지 수$now_block = ceil($page / $page_num);
: 현재 페이지 / 한 페이지 당 데이터 개수
내가 만약 1,2,3,4,5 페이지 중에 위치해 있으면 -> 1
내가 만약 6,7,8,9,10 페이지 중에 위치해 있으면 -> 2
$s_pageNum = ($now_block - 1) * $page_num + 1;
if ($s_pageNum <= 0) {
$s_pageNum = 1;
}
$e_pageNum = $now_block * $page_num;
if ($e_pageNum > $total_page) {
$e_pageNum = $total_page;
}
$e_pageNum
은 절대로 전체 페이지 수인 8페이지를 넘을 수 없는 것이다.$start = ($page-1) * $list_num;
$sql = "select * from boards order by idx desc limit $start, $list_num";
$result = mysqli_query($dbcon, $sql);
desc
를 주고, 0번 부터 10개 글, 10번 부터 10개의 글 이런식으로 쿼리문을 작성해줬다.$print_num = $total_count - $list_num*($page-1);