본문 바로가기
웹 개발 이야기/php

[PHP] pagination

by Gommin 2023. 3. 16.

// 그누보드 기반으로 제작되었으므로 필요 시, DB 관련 코드를 변경해야 함.
// 그누보드의 페이지 기능을 이용해도 되지만, 게시판이 아닐경우 사용하기 복잡하기 때문에 아래 코드를 사용함.

$tbname = 'g5_company_list';
$n_limit = 15;
$pg = $_GET['pg'];
$bo_table = $_GET['bo_table'];
$stx = $_GET['stx'];

$qstr = "bo_table=".$_GET['bo_table'];
if($_GET['stx']){ $qstr .= "&stx=".$_GET['stx']; }
$qstr .= "&pg=";

$sql_where = '';
if($stx){ $sql_where .= "where comp_name like '%{$stx}%' "; }

$sql_order = "order by comp_name ";

$sql_cnt = "select count(*) as cnt from {$tbname} ";
$row_cnt = sql_fetch($sql_cnt.$sql_where);
$total_count = $row_cnt['cnt'];
$n_page = ceil($total_count / $n_limit);
if($pg=="") $pg = 1;
$n_from = ($pg - 1) * $n_limit;

$sql = "select * from {$tbname} ";
$sql .= $sql_where;
$sql .= $sql_order;
$sql .= "limit ".$n_from.", ".$n_limit;
$result = sql_query($sql);
$cnt = sql_num_rows($result);

if($n_page>1) {
  echo page_listing($pg, $n_page, $_SERVER['PHP_SELF']."?".$qstr);
}

function page_listing($cur_page, $total_page, $url, $link_id="") {
    $retValue = '<div class="pg_wrap">';

    if($cur_page > 1) {
        if($cur_page > 5){ $retValue .= '<a href="'.$url.'1'.$link_id.'"><div class="pg_page pg_page2 pg_start"></div></a>'; }
        $retValue .= '<a href="'.$url.($cur_page-1).$link_id.'"><div class="pg_page pg_page2 pg_prev"></div></a>';
    }

    $start_page = ( ( (int)( ($cur_page - 1 ) / 5 ) ) * 5 ) + 1;
    $end_page = $start_page + 5;
    if($end_page >= $total_page){ $end_page = $total_page; }

    if($total_page > 1){
        for ($k=$start_page;$k<=$end_page;$k++){
            if($cur_page != $k){
                $retValue .= '<a href="'.$url.$k.$link_id.'"><div class="pg_page pg_page2">'.$k.'</div></a>';
            }else{
                // 현재 페이지일 때
                $retValue .= '<a href="'.$url.$k.$link_id.'"><div class="pg_page pg_page2 pg_current">'.$k.'</div></a>';
            }
        }
    }

    if($cur_page < $total_page && $total_page > 1) {
        $retValue .= '<a href="'.$url.($cur_page+1).$link_id.'"><div class="pg_page pg_page2 pg_next"></div></a>';
        if($cur_page<$total_page-5){
            $retValue .= '<a href="'.$url.$total_page.$link_id.'"><div class="pg_page pg_page2 pg_end"></div></a>';
        }
    }

    $retValue .= "</div>";

    return $retValue;
}

 

댓글