thinkPHPページングと組み合わせて自分のページングクラスに書く

26026 ワード

 
   
<?php 

// +----------------------------------------------------------------------

// |     ThinkPHP        

// +----------------------------------------------------------------------

// |      :1、         。 2、            ,    (  )。

// +----------------------------------------------------------------------

// | Author: zbseoag <[email protected]>

// +----------------------------------------------------------------------

// $Id: page.class.php  2013-05-26 00:08:49



 session_start(); //          ,      ,    session



class Page{



    public $page; //   

    public $nextPage; //   

    public $prevPage; //   

    public $pageMax; //   

    public $startPage; //     

    public $endPage;  //      

    public $style; //  :$style = mid

    public $parameter;//          

    public $varPage;//      

    public $url = null;  //  url  

    

    protected $config = array(

        'header'=>'   ','prev'=>'   ','next'=>'   ','first'=>'  ','last'=>'  ',

        'theme' => '%records% %header% %page%/%pageMax%    %firstPage%%prevPage%%linkPage%%nextPage%%lastPage%'

    );

     

    /**

     +----------------------------------------------------------

     *     

     +----------------------------------------------------------

     * @param  $records        

     * @param  $pageSize         

     * @param  $pageVal          

     * @param  $parameter     

     +----------------------------------------------------------

    */

     

    function __construct($records, $pageSize, $pageVal = 'p', $parameter = null){

         

        $this->records = $records;

        $this->pageMax = ceil($records/$pageSize);

        $this->page= max(intval($_GET[$pageVal]), 1); //   1

        $this->page = min($this->page, $this->pageMax); //     

        $this->nextPage = $this->page + 1;

        $this->prevPage = $this->page - 1;

        $this->varPage = $pageVal; //       

        $this->parameter = $parameter; //   url   

    }

     

    /**

     +----------------------------------------------------------

     *     

     +----------------------------------------------------------

     * @param  $name        

     * @param  $value       

     +----------------------------------------------------------

     */

    function setConfig($name, $value){

        if(isset($this->config[$name])){

            $this->config[$name] = $value;

        }

    }

     

    /**

     +----------------------------------------------------------

     *       

     +----------------------------------------------------------

     * @param  $length      

     +----------------------------------------------------------

     * @param  $hide        、   ,  :      ,      

     +----------------------------------------------------------

     */

    function show($length, $hide = false){



        if(0 == $this->records) return '';

        empty($this->url)? $this->url = $_SERVER['REQUEST_URI'] : null;

        $url = $this->url.(strpos($this->url,'?')?'':'?').$this->parameter;

        $parse = parse_url($url);

         

        if(isset($parse['query'])){

            parse_str($parse['query'],$params);

            unset($params[$this->varPage]);

            $url = $parse['path'].'?'.http_build_query($params);

        }



        if('mid' == $this->style){ //     

            if($length % 2 != 0 ){

                $midder = ceil($length / 2);

                $big_repair = $midder - 1 ;//         ,     1,    1

            }else{

                $big_repair = $midder = $length / 2;

            }

            $sml_repair = $midder- 1;  //     

            $this->startPage = ($this->page  + $midder) > $this->pageMax ? $this->pageMax  - $length : $this->page - $sml_repair;

            $this->endPage = ($this->page < $midder)? $length : $this->page + $big_repair;

        }else{ //      

            $this->startPage = ($this->page >= $length)? $_SESSION['startPage'] : 1;

            $this->endPage  = $this->startPage + $length - 1;

             

            $this->lastPage =  isset($_SESSION['lastPage'])? $_SESSION['lastPage'] : 1; //     

            $_SESSION['lastPage'] = $this->page;  //     

             

            if($this->lastPage < $this->page){ //   

                if($this->page >= $this->endPage){

                    $this->startPage = $_SESSION['startPage'] = $this->page;

                    $this->endPage = $this->startPage + $length -1;

                }

            }elseif($this->lastPage == $this->page){//  

                if($this->page == $this->endPage){

                    $this->startPage = $_SESSION['startPage'] = $this->page;

                    $this->endPage = $this->startPage + $length -1;

                }else{

                    $this->startPage = $_SESSION['startPage'] = $this->page - $length + 1;

                    $this->endPage = $this->startPage + $length -1;

                }

            }else{//   

                if($this->page == $this->startPage ){

                    $this->startPage = $_SESSION['startPage'] = $this->page - $length + 1;

                    $this->endPage = $this->startPage + $length -1;

                }

            }

            //echo '    :'. $this->startPage.'<br/>';

            //echo '    :'. $this->lastPage.'<br/>';

        }

        //    

        $this->startPage = min($this->pageMax - $length + 1, $this->startPage); //  

        $this->startPage = max($this->startPage, 1);//      (    ,    )

         

        $this->endPage = $this->startPage + $length -1;

        $this->endPage = min($this->pageMax, $this->endPage); //     

         

        $_SESSION['startPage'] = $this->startPage; //    ,    

         

        //echo '    :'. $this->startPage.'<br/>';

        //echo '    :'. $this->lastPage.'<br/>';

         

        if($this->page <= 1){//       

            $firstPage = '<span>'.$this->config['first'].'</span>';

            $prevPage = '<span>'.$this->config['prev'].'</span>';

        }else{

            $firstPage = "<span><a href='$url&$this->varPage=1'>".$this->config['first'].'</a>';

            $prevPage = "<span><a href='$url&$this->varPage=$this->prevPage'>".$this->config['prev'].'</a>';

        }

        

        if($this->page >= $this->pageMax){ //       

            $nextPage = '<span>'.$this->config['next'].'</span>';

            $lastPage = '<span>'.$this->config['last'].'</span>';

        }else{

            $lastPage = "<a href='$url&$this->varPage=$this->pageMax'>".$this->config['last'].'</a>';

            $nextPage = "<a href='$url&$this->varPage=$this->nextPage'>".$this->config['next'].'</a>';

        }

        

        if($hide){ //       

            ($this->nextPage >= $this->pageMax)? $nextPage = '' : null;

            ($this->prevPage < 1)? $prevPage = '' : null;

        }



        for($i = $this->startPage; $i <= $this->endPage; $i++){

            if ($this->page == $i)

                $linkPage .= "<a class='current' href='$url&$this->varPage=$i'>$i</a>";

            else

                $linkPage .= "<a href='$url&$this->varPage=$i'>$i</a>";

        }

        $search = array('%records%','%header%','%page%','%pageMax%','%firstPage%','%prevPage%','%linkPage%','%nextPage%','%lastPage%');

        $replace = array($this->records,$this->config['header'],$this->page,$this->pageMax,$firstPage,$prevPage,$linkPage,$nextPage,$lastPage);

        $pageStr = str_replace($search, $replace, $this->config['theme']);



        return $pageStr;

    }

     

}

$page = new Page(340, 10);

$theme = '%records% %header% %page%/%pageMax%    %firstPage%%prevPage%%linkPage%%nextPage%%lastPage%';

$page->setConfig('theme',$theme); //      ,  :      ,     %lastPage%,        

$page->setConfig('last','  '); //       : 'header'='   ','prev'='   ','next'='   ','first'='  ','last'='  '

$page->url = 'http://localhost/test.php';

echo $page->show(10);



?>

 <style>

a,span{ margin:2px 5px;}

.current{ color:red;}

</style>