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

페이지네이션에서 오류(예. 2페이지를 눌러도 1페이지의 게시물이 보입니다..)

김무김모우 1년 전 조회 7,147

if (!defined('_GNUBOARD_')) exit;

 

// 인기글 추출

function latest_popular($rows=10, $subject_len=40, $term='', $options='', $page=1)

{

    global $g5;

 

    switch($term){

        case '일간':

            $term_time = date("Y-m-d H:i:s", G5_SERVER_TIME-3600*24);

            break;

        case '주간':

            $term_time = date("Y-m-d H:i:s", G5_SERVER_TIME-3600*24*7);

            break;

        default:

            $term_time = date("Y-m-d H:i:s", G5_SERVER_TIME-3600*24);

            break;

    }

 

    $list = array();

    $offset = ($page - 1) * $rows;

 

    // 전체 게시판에서 인기글 추출

    $sql_between = " a.bn_datetime between '$term_time' and '".G5_TIME_YMDHIS."' ";

    $sql_common = " from {$g5['board_new_table']} a, {$g5['board_table']} b

                    where a.bo_table = b.bo_table and b.bo_use_search = 1

                    and a.wr_id = a.wr_parent and {$sql_between} ";

    $sql_order = " order by a.bn_datetime desc ";

 

    // 게시물 수를 세기 위한 쿼리

    $sql = " select count(*) as cnt {$sql_common} ";

    $row = sql_fetch($sql);

    $total_count = $row['cnt'];

 

    if($total_count > 0){

        // 게시물 데이터를 가져오기 위한 쿼리

        $sql = " select a.*, b.bo_subject {$sql_common} {$sql_order} limit {$offset}, {$rows} ";

        $result = sql_query($sql);

 

        $sql2 = "";

        for ($i=0; $row = sql_fetch_array($result); $i++){

            $tmp_write_table = $g5['write_prefix'].$row['bo_table'];

            $bo_table = $row['bo_table'];

 

            if($i > 0)

                $sql2 .= " union ";

            $sql2 .= "(select '{$bo_table}' as bo_table, wr_id, wr_subject, wr_hit, wr_good, wr_nogood

                      from {$tmp_write_table} where wr_is_comment = 0

                      and wr_datetime between '{$term_time}' and '".G5_TIME_YMDHIS."') ";

        }

        // 조건에 따른 정렬

        if ($options === 'wr_hit desc') {

            $sql2 .= " order by wr_hit desc limit {$offset}, {$rows}";

        } else {

            $sql2 .= " order by GREATEST(wr_good, wr_nogood) desc limit {$offset}, {$rows}";

        }

        $result2 = sql_query($sql2);

 

        for ($i=0; $row2 = sql_fetch_array($result2); $i++){

            $list[$i]['href'] = G5_BBS_URL.'/board.php?bo_table='.$row2['bo_table'].'&wr_id='.$row2['wr_id'];

            $list[$i]['subject'] = $row2['wr_subject'];

        }

    }

 

    ob_start();

    ?>

 

   

 

   

   

       

    ";

                }

            ?>

           

           

  • 게시물이 없습니다.
  •        

           

   

   

 

   

    $content = ob_get_contents();

    ob_end_clean();

 

    // 페이지네이션 처리

    $total_pages = ceil($total_count / $rows);

    $pagination = '

';

 

    return $content . $pagination;

}

?>

 

인기글

 

 

 

 

 

 

" target="_blank" rel="noopener noreferrer">https://code.jquery.com/jquery-3.6.0.min.js">

 

// Ajax 요청을 처리

if(isset($_GET['ajax']) && $_GET['ajax'] == true) {

    $rows = $_GET['rows'];

    $subject_len = $_GET['subject_len'];

    $term = $_GET['term'];

    $options = $_GET['options'];

    $page = $_GET['page'];

    echo latest_popular($rows, $subject_len, $term, $options, $page);

    exit;

}

?>

 

이건 그누보드에 올라온 인기글관련 php파일을 수정한 것입니다..

한 탭에서 10개의 게시물이 넘어가면 10개당 1페이지씩 증가하도록 페이지네이션 기능을 넣었습니다

근데 문제는 페이지는 잘 증가하는데 해당 페이지를 클릭해도 1페이지의 게시물만 보입니다

(15개의 게시물이 있다면 2페이지를 누르면 11~15까지의 게시물이 나와야하는데 여전히 1~10까지의 게시물이 나타납니다)

 

그렇다고 2페이지의 페이지네이션자체가 문젠지 알아보려고 

 

 

 

 

 

이 코드에서 1을 2로 바꿔보았습니다(페이지 번호입니다)

만약 15개의 게시물이 있다면 이경우엔 1페이지를 누르든 2페이지를 누르든 2페이지에 해당하는 게시물(11~15번)만 나타납니다

ajax에서 해당 페이지를 클릭할때 해당 페이지에 해당하는 게시물들을 가져오는 부분에 오류가 있는 거같은데 도움 주실 분 있으신가요ㅜㅜ 

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

답변 2개

방법1.

원글수와 카운팅이 맞지 않아서 그럴수도 있습니다.

관리자페이지에서 해당 게시판의 설정에 들어가셔서

 

 

이렇게 카운트 조정을 한번 해보시기 바랍니다.

 

방법2.

최근글 형식의 글을 가져오려면 board_new 와 관련있는데

http://sir.kr/data/editor/2408/1982090578_1722784200.3669.png" width="438" />

이렇게 설정일이 지난 최신게시물은 자동삭제되게 됩니다.

해당 날짜를 더 늘려서 채크해보세요.

 

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

답변에 대한 댓글 3개

김무김모우
1년 전
앗 저 php는 게시판이 따로 있는것이 아니라 저 파일 자체가 index페이지나 board에 삽입되어서 나타나는 형식입니다ㅜ 그래서 관리자페이지에서 게시판설정으로 들어갈 수 없습니다ㅠㅠ
애드프로
1년 전
게시판 리스트를 말하는게 아니라 최근글(latest) 형식을 말하는거에요..

위 코드를 보면

$sql_common = " from {$g5['board_new_table']} a, {$g5['board_table']} b

where a.bo_table = b.bo_table and b.bo_use_search = 1

and a.wr_id = a.wr_parent and {$sql_between} ";

$sql_order = " order by a.bn_datetime desc ";

이렇게 board_new_table 과 board_table 을 참조하고 있습니다.

그래서 게시글 카운트 및 최신글(board_new) 의 소유 기간을 늘려보라는거에요.
김무김모우
1년 전
답변 감사드립니다! 알려주신대로 해보았는데 해결되지는 않은 거 같습니다..ㅜㅜㅜ 다른 부분에 문제가 있는 거같습니다ㅜㅠ

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

1년 전

아래의 코드를 한번 참고해 보시겠어요...

 

 

 

if (!defined('_GNUBOARD_')) exit;

// 인기글 추출 function latest_popular($rows=10, $subject_len=40, $term='', $options='', $page=1) {     global $g5;

    switch($term){         case '일간':             $term_time = date("Y-m-d H:i:s", G5_SERVER_TIME-3600*24);             break;         case '주간':             $term_time = date("Y-m-d H:i:s", G5_SERVER_TIME-3600*24*7);             break;         default:             $term_time = date("Y-m-d H:i:s", G5_SERVER_TIME-3600*24);             break;     }

    $list = array();     $offset = ($page - 1) * $rows;

    // 전체 게시판에서 인기글 추출     $sql_between = " a.bn_datetime between '$term_time' and '".G5_TIME_YMDHIS."' ";     $sql_common = " from {$g5['board_new_table']} a, {$g5['board_table']} b                     where a.bo_table = b.bo_table and b.bo_use_search = 1                     and a.wr_id = a.wr_parent and {$sql_between} ";     $sql_order = " order by a.bn_datetime desc ";

    // 게시물 수를 세기 위한 쿼리     $sql = " select count(*) as cnt {$sql_common} ";     $row = sql_fetch($sql);     $total_count = $row['cnt'];

    if($total_count > 0){         // 게시물 데이터를 가져오기 위한 쿼리         $sql = " select a.*, b.bo_subject {$sql_common} {$sql_order} limit {$offset}, {$rows} ";         $result = sql_query($sql);

        $sql2 = "";         for ($i=0; $row = sql_fetch_array($result); $i++){             $tmp_write_table = $g5['write_prefix'].$row['bo_table'];             $bo_table = $row['bo_table'];

            if($i > 0)                 $sql2 .= " union ";             $sql2 .= "(select '{$bo_table}' as bo_table, wr_id, wr_subject, wr_hit, wr_good, wr_nogood                       from {$tmp_write_table} where wr_is_comment = 0                       and wr_datetime between '{$term_time}' and '".G5_TIME_YMDHIS."') ";         }         // 조건에 따른 정렬         if ($options === 'wr_hit desc') {             $sql2 .= " order by wr_hit desc limit {$offset}, {$rows}";         } else {             $sql2 .= " order by GREATEST(wr_good, wr_nogood) desc limit {$offset}, {$rows}";         }         $result2 = sql_query($sql2);

        for ($i=0; $row2 = sql_fetch_array($result2); $i++){             $list[$i]['href'] = G5_BBS_URL.'/board.php?bo_table='.$row2['bo_table'].'&wr_id='.$row2['wr_id'];             $list[$i]['subject'] = $row2['wr_subject'];         }     }

    ob_start();     ?>    

   

   
       
                       
  •                 ";                     echo " ";                     echo "".$list[$i]['subject']."";

                    if ($list[$i]['comment_cnt'])                     echo $list[$i]['comment_cnt'];

                    echo "";                 ?>            

  •        
    ";             }         ?>                
  • 게시물이 없습니다.
  •                
   
   

   

    // 페이지네이션 처리     $total_pages = ceil($total_count / $rows);     $pagination = '

';

    return $content . $pagination; }

?>

인기글

 
 
 
 

" target="_blank" rel="noopener noreferrer">https://code.jquery.com/jquery-3.6.0.min.js">

 

 

 

 

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

답변에 대한 댓글 1개

김무김모우
1년 전
답변 감사합니다ㅠㅠ 하지만 주신 코드로 해보았는데 여전히 2페이지를 눌러도 1페이지의 게시물만 나오는 거 같습니다ㅜㅜ

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

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

로그인