다음 페이지에 글이 없는데도 다음페이지가 떠있음
본문
bbs/list.php 에서
if ($is_search_bbs) {
$sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_order} limit {$from_record}, $page_rows ";
} else {
$sql = " select * from {$write_table} where wr_is_comment = 0 ";
// job_list 게시판에서 wr_26이 'on'인 게시글만 출력
if ($bo_table == "job_list") {
$sql .= " AND wr_26 = 'on' ";
}
if (!empty($notice_array)) {
$sql .= " and wr_id not in (".implode(', ', $notice_array).") ";
}
$sql .= " {$sql_order} limit {$from_record}, $page_rows ";
}
이렇게해서 성공적으로 되었는데
1) 관리자페이지에서 페이지당 목록수 20개로 해놓음
2) 성공적으로 보여지지만 2페이지에 글이없는데도 pg_wrap에 2페이지가 나와있음
3) 페이지가 정상적으로 작동하게 하고 싶음
!-->답변 2
'페이지에 게시물이 없는데도 페이지가 뜨는 현상'를 해결하기 위해,
페이지네이션 로직에서 실제 존재하는 게시글 수에 따라 페이지 수를 조정해 봅니다.
bbs/list.php에서 페이지를 계산하는 부분을 수정하여,
wr_x 값이 'a'인 게시글의 개수를 기준으로 총 페이지 수를 결정.
기존에는 카운트가 전체 게시글 수를 기준으로 설정되어 있을 가능성이 커서,
다음과 같이 wr_x = 'a'인 경우를 고려하여 총 게시글 수를 다시 계산,
존재하지 않는 페이지를 표시하지 않도록 토탈 페이지 조정,
게시글 목록 조회 SQL에서도 wr_x 필터링 적용.
※ 방안 ※
bbs/list.php의
if ($is_search_bbs) {$sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_order} limit {$from_record}, $page_rows ";
} else {
$sql = " select * from {$write_table} where wr_is_comment = 0 ";
// job_list 게시판에서 wr_26이 'on'인 게시글만 출력
if ($bo_table == "job_list") {
$sql .= " AND wr_26 = 'on' ";
}
if (!empty($notice_array)) {
$sql .= " and wr_id not in (".implode(', ', $notice_array).") ";
}
$sql .= " {$sql_order} limit {$from_record}, $page_rows ";
}
이 부분을 다음으로 수정
if ($is_search_bbs) {
$sql = " SELECT DISTINCT wr_parent FROM {$write_table} WHERE {$sql_search} {$sql_order} LIMIT {$from_record}, $page_rows ";
} else {
$sql_search = "";
// ✅ job_list 게시판에서 wr_26이 'on'인 게시글 개수만 카운트하여 total_count 수정 (빈 페이지 방지)
if ($bo_table == "job_list") {
$total_count = sql_fetch("SELECT COUNT(*) AS cnt FROM {$write_table} WHERE wr_is_comment = 0 AND wr_26 = 'on'")['cnt'];
} else {
$total_count = $board['bo_count_write']; // 기존 코드 유지
}
// ✅ 빈 페이지 방지: 존재하지 않는 페이지를 표시하지 않도록 total_page 조정
$total_page = ceil($total_count / $page_rows);
if ($page < 1) {
$page = 1;
}
if ($page > $total_page) {
$page = $total_page; // ✅ 빈 페이지 방지 (수정)
}
// ✅ 게시글 목록 조회 SQL에서도 wr_26 필터링 적용
$sql = " SELECT * FROM {$write_table} WHERE wr_is_comment = 0 ";
if ($bo_table == "job_list") {
$sql .= " AND wr_26 = 'on' "; // ✅ job_list 게시판에서는 wr_26 필터 적용
}
if (!empty($notice_array)) {
$sql .= " AND wr_id NOT IN (" . implode(', ', $notice_array) . ") ";
}
$sql .= " {$sql_order} LIMIT {$from_record}, $page_rows ";
}
페이징을 위한 총 개수 확인 쿼리와, 실제 리스트를 가져오는 쿼리 2번이 수행되기 때문에..
페이징을 위한 총 개수 확인 쿼리에서도 where 조건이 들어가야 됩니다.
1) 39라인 근처
if ($sca || $stx || $stx === '0') {
(수정) -> if ($sca || $stx || $stx === '0' || $bo_table == 'job_list') {
2) 50라인 근처
$sql_search .= " and (wr_num between {$spt} and ({$spt} + {$config['cf_search_part']})) ";
다음 라인에 추가
if ($bo_table == "job_list") {
$sql_search .= " AND wr_26 = 'on' ";
}