+ -
当前位置:首页 → 问答吧 → 我写的一个分页类

我写的一个分页类

时间:2007-01-30

来源:互联网

<?php
        /**
         * @autor xiake QQ:75239222  Mail:[email protected]
         * 2007-1-29
         * PHP versions 4 and 5
         */

        define( 'PER_PAGE_NUM', 10 );  //定义第二种分页模式,每页显示多少页码数
        
        class Page
        {
                var $currpage;    //当前页码
                var $pagesize;    //每页显示记录数
                var $secpage;     //当前页码段数(第二种分页模式)
                var $rscount;     //记录总数
                var $pagecount;   //页码总数
                var $secpagenum;  //页码段总数(第二种分页模式)
               
                var $url ;              //页码链接
               
               
                /**
                 * @var currpage 传递页码的变量
                 * @var pagesize 每页显示记录数
                 * @var rscount  总记录数
                 * @var secpage  当页码段数, 如果用第一种分页模式,这个参数不用管它
                 */
                function Page( $currpage, $pagesize, $rscount, $secpage='' )
                {                        
                        $this->currpage = $currpage ? intval($currpage) : 1 ;
                        $this->pagesize = $pagesize = intval($pagesize);
                        $this->secpage = intval($secpage);
                        $this->rscount = intval($rscount);
                        
                        $this->pagecount = ceil($this->rscount / $pagesize);
                        $this->secpagenum = ceil($this->pagecount / PER_PAGE_NUM);
                        $this->url = $_SERVER['REQUEST_URI'];
                }
               
                /**
                 * 普通分页模式
                 * example  共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页]
                 */
                function navigation1()
                {
                        $str = '';
                        $str .= '共'.$this->rscount.'条记录,';
                        $str .= '每页显示'.$this->pagesize.'条,';
                        $str .= '当前第<font color=red>'.$this->currpage.'</font>/'.$this->pagecount.'页';
                        
                        if( $this->currpage > 1 ) {
                                $firstUrl = strpos($this->url, 'currpage=') !== false ? preg_replace("/currpage=\d*/", "currpage=1", $this->url) : $this->url.'&currpage=1';
                                $prevUrl = strpos($this->url, 'currpage=') !== false ? preg_replace("/currpage=\d*/", "currpage=".($this->currpage-1), $this->url) : $this->url.'&currpage='.($this->currpage-1);
                                $str .= ' <a href="'.$firstUrl.'">[首页]</a> ';
                                $str .= ' <a href="'.$prevUrl.'">[上页]</a> ';
                        }
                        else {
                                $str .= ' [首页] ';
                                $str .= ' [上页] ';
                        }
                        if( $this->currpage < $this->pagecount ) {
                                $nextUrl = strpos($this->url, 'currpage=') !== false ? preg_replace("/currpage=\d*/", "currpage=".($this->currpage+1), $this->url) : $this->url.'&currpage='.($this->currpage+1);
                                $lastUrl = strpos($this->url, 'currpage=') !== false ? preg_replace("/currpage=\d*/", "currpage=".$this->pagecount, $this->url) : $this->url.'&currpage='.$this->pagecount;
                                $str .= ' <a href="'.$nextUrl.'">[下页]</a> ';
                                $str .= ' <a href="'.$lastUrl.'">[尾页]</a> ';
                        }
                        else {
                                $str .= ' [下页] ';
                                $str .= ' [尾页] ';
                        }
                        //var_dump($str);
                        return $str;
                }
               
                /**
                 * 页码列表模式
                 * example     上页 11 12 13 14 15 16 17 18 19 20 21 下页
                 */
                function navigation2()
                {
                        
                        if( $this->secpagenum > 0 ) {
                                
                                $str = '';
                                if( $this->secpage > 1 ) {
                                        $prev = true;
                                }
                                else {
                                        $prev = false;
                                }
                                
                                if( $this->secpage < $this->secpagenum ) {
                                        $next = true;
                                }
                                else {
                                        $next = false;
                                }
                                
                                if( $prev ) {
                                        $prevUrl = strpos( $this->url, 'secpage=' ) !== false ? preg_replace( array("/secpage=\d*/", "/currpage=\d*/", "/&{2,}/"), array("secpage=".($this->secpage-1), "", "&"), $this->url ) : $this->url.'&secpage='.($this->secpage-1);
                                        $str .= ' <a href='.$prevUrl.'>上页</a> ';
                                }        
                                       
                                //这段开始的页码
                                $secPageStart = ($this->secpage - 1)*PER_PAGE_NUM + 1;
                                $secPageEnd = $secPageStart + PER_PAGE_NUM;
                                $secPageEnd = ($secPageEnd > $this->pagecount) ? $this->pagecount : $secPageEnd;
                                
                                for( $i=$secPageStart ; $i<$secPageEnd ; $i++ ) {
                                        if( strpos( $this->url, 'currpage=' ) !== false )
                                                $url = preg_replace( "/currpage=\d*/", "currpage=".$i, $this->url );
                                        else
                                                $url = $this->url.'&currpage='.$i;
                                       
                                        if( $this->currpage != $i )               
                                                $str .= ' <a href='.$url.'>'.$i.'</a> ';
                                        else
                                                $str .= ' <font color=red>'.$i.'</font> ';        
                                }
                                if( $next ) {
                                        $nextUrl = strpos( $this->url, 'secpage=' ) !== false ? preg_replace( array("/secpage=\d*/", "/currpage=\d*/", "/&{2,}/"), array("secpage=".($this->secpage+1), "", "&"), $this->url ) : $this->url.'&secpage='.($this->secpage+1);
                                        $str .= ' <a href='.$nextUrl.'>下页</> ';
                                }        

                                return $str;
                        }
                        return false;
                }
        }
        
?>



写的比较简单,可以在上面扩展

[ 本帖最后由 xiake 于 2007-1-29 17:14 编辑 ]

作者: xiake   发布时间: 2007-01-29

看上去还不错

作者: leehui1983   发布时间: 2007-01-29

谢谢
学PHP不久,感觉PHP在OO方面很灵活

作者: xiake   发布时间: 2007-01-29

  帮顶!

作者: 特蓝克斯   发布时间: 2007-02-01