페이징- 다중 정렬 : 오름, 내림, 보통마스터 > php

본문 바로가기
사이트 내 전체검색

php

페이징- 다중 정렬 : 오름, 내림, 보통마스터

페이지 정보

작성자 서방님 댓글 0건 조회 127회 작성일 12-01-31 11:16

본문

저는 대부분의 소스들은 단순히 함수로만 제작하여 쓰고 있지만,
페이징기법처럼 여러가지 함수를 동시에 사용해야 될 경우에는 아래처럼
클래스를 도입하고 있습니다.

이 클래스의 장점이라고 한다면, 정렬 기능이 잘 되어 있다는 것입니다.
흔히들 타이틀을 눌렀을때, 오름, 내림차순으로 정렬 되는 기능을 구현하는 내용은
CSS환경에서는 대체로 구현이 잘되어 있지만, 웹에서는 많이 찾아 보기 힘든
내용인것 같습니다.

아래는 사용예제입니다.

<?
/////////////////////////== 데이타처리 페이지이며, 선언부에 올려줍니다.
// 페이지 초기값 생성
$nowpg = ($nowpg) ? $nowpg 1;

// 인스턴트 생성
$sql = new ListManager();

// 옵션
// 한화면에 보여줄 줄수 및 한 화면에 보여줄 페이지 및 이전, 다음, 처음, 끝 태그 셋팅
$sql->page_setting(1510"<img src='./img/btn_page_first.gif' border='0' align='absmiddle'>"" &nbsp;이전""다음&nbsp; ""<img src='./img/btn_page_last.gif' border='0' align='absmiddle'>");

// 옵션
// 정렬하겠다고 맘 먹었다면 사용해 주세요.
// 차례대로 버튼 눌렀을때 색, 안눌렀을때 색, 내림차순, 오른차순 모양입니다.
$sql->sort_setting("#FF0000""#6699CC""△""▽")

// 데이타 검색시 사용되는 예는 아래와 같으며, 기본적으로 아래 항목만 쓰이게 됩니다.
//
// $boardtable : 테이블명 (조인시 tablea, tableb 와 같은식으로 나열)
// $nowpg : 상수값 (변수 바꾸지 마세용)
// BF_delete='N' : 기본조건 (검색을 안한 상태에서의 조건절을 입력해 줍니다.)
// $findquery : 검색시 사용 (조건에 따라 변하는 조건을 입력해 주세요. 예) BF_name like '%검색어%')
// BF_index desc : 정렬 방식 (다중으로 가능합니다. 예) BF_index desc, BF_no asc)
$sql->ListDatabase($boardtable$nowpg"*""BF_delete='N'"$findquery"BF_index desc");

// 검색된 값을 배열로 받아오는 처리과정 (2차원배열로 받아짐, 받아오는형식- $rows[인덱스][DB필드명])
$rows $sql->data();

// 옵션 : 출력시 바로 뿌려줘도 됨
// 이전, 다음, 처음, 끝, 페이지 정보를 가지고 있음 (개인으로 쓸 경우 아래에서 메소드를 직접 호출 예) $sql->pg_next())
$page $sql->page();

// 옵션 : 출력시 바로 뿌려줘도 됨
// 기본조건으로 찾은 검색 라인수
$total intval($sql->total());

// 옵션 : 출력시 바로 뿌려줘도 됨
// 검색조건으로 찾은 검색 라인수
$find intval($sql->find());

// 옵션
// 만일 현재 페이지가 1보다 크게 가 있는데 데이타가 없다면 1페이지로 돌려 줘야 겠죠?
if($nowpg != && count($rows)==0) {
    
$nowpg $sql->page_all;
    
tomove(url_clear("$_SERVER[REQUEST_URI]&nowpg=$nowpg"));
}

/////////////////////////== 출력페이지
?>
<table>
<tr>
    <td>NO</td>
    <!-- 차례대로 타이틀명, 정렬할 필드, 초기정렬타입 입니다. -->
    <td><?=$sql->sortting("이름별정렬""BF_name""asc")?></td>
    <td><?=$sql->sortting("등록시간별정렬""BF_insert_time""desc")?></td>
    <td></td>
</tr>

<? for($i=0$count=count($rows); $i<$count$i++) { ?>
<tr>
    <!-- _facing 필드를 주게 되면, 정해진 규칙에 의해 인덱스 순서로 정렬해 준다. -->
    <td><?=$rows[$i][_facing]?></td>
    <td><?=$rows[$i][BF_name]?></td>
    <td><?=$rows[$i][BF_insert_time]?></td>
</tr>
<tr align="center">
    <td colspan="2"><?=$page?></td>
</tr>

<? } if($count == 0) { ?>
    <tr align="center">
        <td colspan="2"><font color="red">데이타가 검색되지 않았습니다.</font></td>
    </tr>
<? ?>

</table>



<?
/************************************************************************************
아래부터는 실제로 사용할수 있게 하는 소스입니다
*************************************************************************************/
class ListManager {
    var 
$ords=''$url=''$urlqry=''$href_first=''$href_next=''$query_str='';
    var 
$nowpg=1$line_num=10$page_num=10$find=''$total=0$page_first=0$page_last=0$page_all;
    var 
$button_first='[처음]'$button_pre='[이전]'$button_next='[다음]'$button_last='[끝]';
    var 
$onbg='#FF0000'$offbg='#6699CC'$str_asc='△'$str_desc='▽';

    function 
ListDatabase($tbname$nowpg$flds="*"$whrs=""$fndqry=""$ords=""$grps="") {
        global 
$_SERVER$_GET;
        
        
$geturlkey = &$_GET[sortfldkey];
        
$geturlarrow = &$_GET[sortfldarrow];
        
$arykey explode(","$geturlkey);
        
$aryarrow explode(","$geturlarrow);
        
$cnt=0; while($cnt<count($arykey)) {
            if(
$arykey[$cnt] && $aryarrow[$cnt]) {
                
$ords_tmp[] = "$arykey[$cnt] $aryarrow[$cnt]";
            }
            
$cnt++;
        }
        if(
$ords$ords_tmp[] = $ords;
        if(
count($ords_tmp)) { $ords implode(","$ords_tmp); }
        if(
$ords$ords "order by $ords";

        
$cnt_fld="count(*)";
        
$this->nowpg $nowpg;
        
$this->ords $ords;
        
$this->url $_SERVER[PHP_SELF];
        
$this->urlqry $_SERVER[QUERY_STRING];

        if(
$whrs) { $whrs "where $whrs"; }
        if(
$grps) {
            
$cnt_fld "count(distinct $grps)";
            
$grps "group by $grps";
        }
        if(
$fndqry) { $fndqry "and $fndqry"; }
        if(
$this->urlqry) { $this->urlqry "$this->urlqry&"; }

        if(
$this->nowpg <= 0) { $this->nowpg 1; }

        
//검색된카운트
        
$query "select $cnt_fld cnt from $tbname $whrs $fndqry";
        
$res query($query);
        
$row mysql_fetch_row($res);
        
$this->find $row[0];

        
//전체카운트
        
$query "select $cnt_fld cnt from $tbname $whrs";
        
$res query($query);
        
$row mysql_fetch_row($res);
        
$this->total $row[0];

        
//현재스텝
        
$sp_now ceil($this->nowpg $this->page_num);
        
//전체스텝
        
$sp_all ceil($this->find / ($this->page_num*$this->line_num));
        
//전체페이지
        
$this->page_all ceil($this->find $this->line_num);
        
//현재스텝의 첫페이지
        
$this->page_first + ($sp_now-1) * $this->page_num;
        
//현재스텝의 끝페이지
        
$this->page_last  $this->page_first $this->page_num 1; if($this->page_last $this->page_all$this->page_last $this->page_all;

        
//처음버튼
        
if($this->nowpg 1) { $this->href_first $this->urlqry "nowpg=1"; }
        
//이전버튼
        
if($sp_now 1) { $this->href_pre $this->urlqry "nowpg=" . ($this->page_first $this->page_num); }
        
//다음버튼
        
if($sp_now $this->line_num $this->page_num $this->find) { $this->href_next $this->urlqry "nowpg=" . ($this->page_last 1); }
        
//마지막버튼
        
if($this->page_all != $this->nowpg) { $this->href_last $this->urlqry "nowpg=$this->page_all"; }

        
//데이타 검색
        
$limit_first = ($this->nowpg 1) * $this->line_num;

        
$this->query_str "select $flds from $tbname $whrs $fndqry $grps $this->ords limit $limit_first, $this->line_num";
        
$query = &$this->query_str;
        
$res query($query);
        
$i 0;
        while(
$row mysql_fetch_assoc($res)) {
            
$row["_facing"] = $this->total - ($limit_first 1) - ($i 1);
            
$this->view[] = $row;
            
$i++;
        }
    }

    
//페이지설정 셋팅
    
function page_setting($line=10$page=10$first="[처음]"$pre="[이전]"$next="[다음]"$last="[끝]") {
        
$this->line_num   $line;
        
$this->page_num   $page;
        
$this->button_first $first;
        
$this->button_pre   $pre;
        
$this->button_next  $next;
        
$this->button_last  $last;
    }

    
//정렬설정 셋팅
    
function sort_setting($onbg="#FF0000"$offbg="#6699CC"$str_asc="△"$str_desc="▽") {
        
$this->onbg $onbg;
        
$this->offbg   $offbg;
        
$this->str_asc  $str_asc;
        
$this->str_desc  $str_desc;
    }

    
//정렬
    
function sortting($subject$sortfld$base_arrow="asc") {
        global 
$_SERVER$_GET;

        
$geturlkey = &$_GET[sortfldkey];
        
$geturlarrow = &$_GET[sortfldarrow];
        
$geturlflag = &$_GET[sortfldflag];

        
$arykey explode(","$geturlkey);
        
$aryarrow explode(","$geturlarrow);
        
$arrflag explode(","$geturlflag);

        
$arrow_ary_img = array("asc"=>$this->str_asc"desc"=>$this->str_desc);
        
$arrow_ary_rep = array("asc"=>"desc""desc"=>"asc");

        
//초기값호출
        
$cnt=0; while($cnt<count($arykey)) {
            if(
$sortfld == $arykey[$cnt]) {
                
$tmp_urlkey $arykey[$cnt];
                
$tmp_urlarrow $arrow_ary_rep[$aryarrow[$cnt]];
                
$tmp_urlflag $arrflag[$cnt];
                
$arrow $arrow_ary_img[$aryarrow[$cnt]];
            }
            else if(
$arykey[$cnt] && $aryarrow[$cnt]) {
                
$urlkey[$arykey[$cnt]] = $arykey[$cnt];
                
$urlarrow[$arykey[$cnt]] = $aryarrow[$cnt];
                
$urlflag[$arykey[$cnt]] = $arrflag[$cnt];
            }
            
$cnt++;
        }
        
$urlkey[$sortfld] = $tmp_urlkey;
        
$urlarrow[$sortfld] = $tmp_urlarrow;
        
$urlflag[$sortfld] = $tmp_urlflag;

        
//초기값셋팅
        
if(!$urlkey[$sortfld] && $urlflag[$sortfld] != 2) {
            
$urlkey[$sortfld] = $sortfld;
            
$urlarrow[$sortfld] = $base_arrow;
            
$urlflag[$sortfld] = 0;
        }

        switch(
$urlflag[$sortfld]) {
            case 
1:
                
$urlflag[$sortfld]++;
                break;

            case 
2:
                unset(
$urlkey[$sortfld]);
                unset(
$urlarrow[$sortfld]);
                unset(
$urlflag[$sortfld]);
                break;

            default :
                
$urlflag[$sortfld]++;
                unset(
$arrow);
                break;
        }

        if(
count($urlkey)) { $sortfldkey implode(","$urlkey); }
        if(
count($urlarrow)) { $sortfldarrow implode(","$urlarrow); }
        if(
count($urlflag)) { $sortfldflag implode(","$urlflag); }

<script language="JavaScript"> </script>-->

댓글목록

등록된 댓글이 없습니다.

Total 612건 35 페이지
게시물 검색

회원로그인

접속자집계

오늘
283
어제
225
최대
1,347
전체
155,042
Latest Crypto Fear & Greed Index

그누보드5
Copyright © 서방님.kr All rights reserved.