테스트 사이트 - 개발 중인 베타 버전입니다

다음 페이지에 글이 없는데도 다음페이지가 떠있음 채택완료

그누초보다 9개월 전 조회 1,922

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개

채택된 답변
+20 포인트
glitter0gim
9개월 전

'페이지에 게시물이 없는데도 페이지가 뜨는 현상'를 해결하기 위해,

페이지네이션 로직에서 실제 존재하는 게시글 수에 따라 페이지 수를 조정해 봅니다.

 

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>

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

9개월 전

페이징을 위한 총 개수 확인 쿼리와, 실제 리스트를 가져오는 쿼리 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' ";
}

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인