-
- /**************************************
- 파일: class.paging.php
- php 페이지네이션 클래스 코드
- *******************************************/
- 클래스 페이징{
-
- var $sql_results;
- var $sql_query;
-
- var $display_offset;
- var $display_limit;
- var $display_limit_URI;
- var $display_currentpage;
- var $display_totalpages;
- var $alt_content_count;
-
- var $display_offset_var;
- var $display_limit_var;
-
- var $display_mid_offset;
- var $display_link_first;
- var $display_link_prev;
- var $display_link_next;
- var $display_link_last;
-
- var $page_filename;
- var $page_uri;
-
- var $content;
- var $content_type;
- var $content_count;
-
- ## CONSTRUCTOR
- 함수 페이징($offsetVar='offset',$limit=10,$midOffset=2){
- $this->display_offset = isset($_REQUEST[$offsetVar])?$_REQUEST[ $offsetVar]:0;
- $this->display_limit = is_numeric($limit)?$limit:10;
- $this->display_mid_offset = $midOffset;
- $this->display_offset_var = $offsetVar;
- $this->display_currentpage= ceil($this->display_offset / $this->display_limit);
- }
-
- ## 데이터 처리
- 함수 setContent( $content){
- if( is_array($content) )
- $this->content_type = '배열';
-
- $this->content = $content;
- $this ->private_contentDetails();
- $this->getLinks();
- }
-
- function private_contentDetails(){
- if( $this->content_type == 'array' )
- $this->content_count = count($this->content);
- }
-
- function getContent(){
- $returnAry = array();
- for (
- $i=$this->display_offset;
- $i< min( $this->content_count, $this->display_offset $this->display_limit );
- $i
- )
- array_push($returnAry,$this->content[$i] );
-
- return $returnAry;
- }
-
- ## 탐색 링크
- function getLinks(){
- $this->getNextLink('');
- $this->getFirstLink('');
- $this->getLastLink('');
- $this->getPrevLink('');
- }
-
- function getNext(){
- return $this->display_link_next;
- }
-
- function getPrev(){
- return $this->display_link_prev;
- }
-
- 함수 getFirst(){
- return $this->display_link_first;
- }
-
- function getLast(){
- return $this->display_link_last;
- }
-
- function getNextLink($caption){
- // 콘텐츠를 계산하고 있는지 아니면 대체 사용자가 제공한 개수를 계산하는지 확인
- if( $this->alt_content_count )
- $count = $this ->alt_content_count;
- else
- $count = $this->content_count;
-
- if( $this->display_offset $this->display_limit-$count >=0 ) {
-
- $this->display_link_next = $this->display_offset;
- }else{
- $this->display_link_next = min(
- $count-1,
- $this->display_offset $this->display_limit
- );
- }
- return $this->buildLink( $this->buildNewURI( $this->display_link_next), $caption ) ;
- }
-
- 함수 getPrevLink($caption){
- $this->display_link_prev = max(
- 0,
- $this->display_offset-$this-> display_limit
- );
- return $this->buildLink( $this->buildNewURI( $this->display_link_prev), $caption );
- }
-
- function getFirstLink($ caption){
- $this->display_link_first = 0;
- return $this->buildLink( $this->buildNewURI( $this->display_link_first), $caption );
- }
-
- function getLastLink($caption){
- $this->display_link_last = $this->content_count-$this->display_limit;
- return $this->buildLink( $this- >buildNewURI( $this->display_link_last), $caption );
- }
-
- ## NUMBERS
- function getPageCount(){
- if( $this->alt_content_count )
- $count = $this->alt_content_count;
- else
- $count = $this->content_count;
-
- $this->display_totalpages = ceil(
- $count / $this->display_limit
- );
- return $this->display_totalpages;
- }
-
- function getPageNumbers(){
-
- // 변수 정의
- $midOffset = $this->display_mid_offset;
- $firstLink = $this->display_link_first;
- $pageCount = $this->getPageCount();
- $thisPage = $this->display_currentpage;
- $limit = $this->display_limit;
- $displayed=$midOffset*2 1;
- $returnAry=array();
-
- // dots
- $returnAry['afterdot'] = '';
- $returnAry['beforedot'] = '';
-
-
- // 두 번이고 중앙에 있는 경우 숫자가 모든 페이지를 합친 것보다 작습니다
- if( ($midOffset*2 1) < $pageCount ){
- $min = max($firstLink ,$thisPage-$midOffset);
- $max = min($pageCount,$thisPage $midOffset 1);
- $total = $max-$min;
-
- // x 금액을 유지합니다. 페이지 수
- // 1페이지 또는 2페이지의 중간에 있지 않은 경우에도 표시됩니다
- if($total<$displayed){
-
- if($min==0){
- $max =$displayed-$total;
- }
- if($max==$pageCount){
- $min-=$displayed-$total;
- }
- }
-
- }else{
- # 숫자 집합만 출력
- $min = 0;
- $max = $pageCount;
- }
-
- // 페이지 실행, 현재 페이지를 확인하고 이름을
- for($i=$min;$i<$max; $i){
- $cp = '아니요';
- if($thisPage==$i)
- $cp = '예';
-
- if($max!=$pageCount )
- $returnAry['afterdot'] = '...';
-
- if($min>0)
- $returnAry['beforedot'] = '...';
-
- array_push($returnAry,
- array(
- 'currentPage'=>$cp,
- 'pageNumber'=>($i 1),
- 'pageLink'=> $this->buildLink( $this->buildNewURI( ($i*$limit) ), ($i 1) )
- )
- );
- }
-
- $ 반환 returnAry;
-
- }
-
- function makePageNumbers($format, $pages,$boldCurrent=true,$separator=' '){
- $retPages = '';
-
- // 실제 페이지 번호 만들기
- foreach($pages as $key => $value):
- if(is_numeric($key))
- $retPages .= ('yes'==$value ['currentPage'] && $boldCurrent)?''.$value['pageLink'] .''.$separator:$value['pageLink'].$separator;
- endforeach;
-
- $format = str_replace( array('{beforedot}',
- '{afterdot}',
- '{pages}',
- '{separator}'),
- array( $pages['beforedot'],
- $pages['afterdot'],
- $retPages),
- $format);
- return $format;
- }
-
- ## 확인
- function isFirstPage(){
- if($this->display_currentpage==0)
- return true;
- return false;
- }
- function isLastPage(){
- // 기저가 1이 아니라 0이므로 하나 추가
- if($this->display_currentpage 1==$this->getPageCount())
- return true;
- return false;
- }
-
- ## 함수
- function getPageName(){
- $fileName =Explode('/',$_SERVER['REQUEST_URI']);
- $fileName = $fileName[count($fileName)-1];
-
- if(strpos($fileName,'?')>0) {
- $fileName = 폭발('?',$fileName) ;
- $fileName = $fileName[0];
- }
-
- return $fileName;
- }
-
- function getCleanURI(){
- $URI = $_SERVER ['REQUEST_URI'];
- if(strpos($URI,'?')>0){
- $URI = 폭발('?',$URI);
- $URI = $URI[ 1];
-
- $URI = preg_replace('/b'.$this->display_offset_var.'b[=0-9&]{2,20}/','',$URI);
- //$URI = preg_replace('/b'.$this->display_limit_var.'b[=0-9&]{2,20}/','',$URI);
-
- return $URI;
- }
- false 반환;
- }
-
- function buildNewURI($offset){
- $newFile = $this->getPageName() . '?' . $this->getCleanURI();
-
- $lastChar = substr($newFile,strlen($newFile)-1,1);
- if( $lastChar != '&' && $lastChar ! = '?' )
- $newFile.='&';
-
- $newFile .= $this->display_offset_var.'='.$offset.'&';
- //$ newFile .= $this->display_limit_var.'='.$limit.'&';
-
- return $newFile;
- }
-
- function buildLink( $href, $caption, $target=NULL ){
- if( $target != NULL )
- $target = ' target="'.$target.'"';
- return ''.$caption.'';
- }
-
- 함수 encodeURI($str){
- $salt = 'falaful ';
- $str = strrev($salt.$str);
- return base64_encode($str);
- }
-
- 함수 decodeURI($str){
- $salt = 'falaful';
- $str = strrev( base64_decode($str) );
- $str = substr( $str, strlen($salt), strlen($str) );
- return $str;
- }
-
- #############
- #
- #이 함수는 이
- #클래스를 실행할 쿼리를 입력하는 데 사용됩니다. 다른 함수는
- #x개의 행을 모두 가져온 다음 잘라냅니다. 이러한 기능은
- #한도만큼만 제한됩니다. 이렇게 하면 성능이 향상됩니다.
- #이유는 3을 원할 때 1,000,000개의 행을 가져오지 않기 때문입니다.
- #
- #############
-
- 함수 runWQuery ($db, $statement, $table, $where=''){
-
- // 총 행 가져오기
- $db->query( 'SELECT COUNT(*) AS count FROM '. $ 테이블 . ' ' . $where );
- $db->movenext();
- $this->alt_content_count = $db->col['count'];
-
- / / 쿼리에 제한을 추가합니다
- $where .= ' LIMIT ' . $this->display_offset .', '.$this->display_limit;
-
- // 쿼리 저장
- $this->sql_query = $statement . ' 에서 ' . $테이블 .' '. $where;
-
- // 쿼리 인쇄
- //echo $this->sql_query;
-
- // 쿼리 실행
- $db->query( $this-> ;sql_query );
- $this->sql_results = array();
-
- // 결과 저장
- while($db->movenext()){
- array_push($this ->sql_results , $db->col);
- }
-
- return $this->runQueryActions();
- }
-
- function runQueryActions(){
- $this->setContent( $this->sql_results );
-
- $pages = $this->getPageNumbers();
-
- // 실제 페이지 번호 만들기
- $ retPages = $this->makePageNumbers( '{beforedot} {pages} {afterdot}', $pages, true, ' ' );
-
- // 새 디스플레이 가져오기
- return 배열(
- 'content'=>$this->sql_results,
- 'pages'=>$retPages
- );
- }
- }
- ?>
复제대码
|