다음 페이지에 글이 없는데도 다음페이지가 떠있음

다음 페이지에 글이 없는데도 다음페이지가 떠있음

QA

다음 페이지에 글이 없는데도 다음페이지가 떠있음

본문

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' ";
}

답변을 작성하시기 전에 로그인 해주세요.
전체 188
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT