다음 페이지에 글이 없는데도 다음페이지가 떠있음 채택완료
bbs/list.php 에서
</p>
<p>if ($is_search_bbs) {</p>
<p> $sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_order} limit {$from_record}, $page_rows ";</p>
<p>} else {</p>
<p> $sql = " select * from {$write_table} where wr_is_comment = 0 ";</p>
<p> </p>
<p> // job_list 게시판에서 wr_26이 'on'인 게시글만 출력</p>
<p> if ($bo_table == "job_list") {</p>
<p> $sql .= " AND wr_26 = 'on' ";</p>
<p> }</p>
<p> </p>
<p> if (!empty($notice_array)) {</p>
<p> $sql .= " and wr_id not in (".implode(', ', $notice_array).") ";</p>
<p> }</p>
<p> </p>
<p> $sql .= " {$sql_order} limit {$from_record}, $page_rows ";</p>
<p>}</p>
<p>
이렇게해서 성공적으로 되었는데
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 ";
}
이 부분을 다음으로 수정
</p>
<p>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 = "";</p>
<p> // ✅ 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']; // 기존 코드 유지
}</p>
<p> // ✅ 빈 페이지 방지: 존재하지 않는 페이지를 표시하지 않도록 total_page 조정
$total_page = ceil($total_count / $page_rows);
if ($page < 1) {
$page = 1;
}
if ($page > $total_page) {
$page = $total_page; // ✅ 빈 페이지 방지 (수정)
}</p>
<p> // ✅ 게시글 목록 조회 SQL에서도 wr_26 필터링 적용
$sql = " SELECT * FROM {$write_table} WHERE wr_is_comment = 0 ";</p>
<p> if ($bo_table == "job_list") {
$sql .= " AND wr_26 = 'on' "; // ✅ job_list 게시판에서는 wr_26 필터 적용
}</p>
<p> if (!empty($notice_array)) {
$sql .= " AND wr_id NOT IN (" . implode(', ', $notice_array) . ") ";
}</p>
<p> $sql .= " {$sql_order} LIMIT {$from_record}, $page_rows ";
}</p>
<p>
댓글을 작성하려면 로그인이 필요합니다.
페이징을 위한 총 개수 확인 쿼리와, 실제 리스트를 가져오는 쿼리 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' ";
}
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인