你现在的位置:首页 > PHP网站建设知识库 > UCenter Home > 正文

Uchome分页类

 

< ?php  
    /**@author
    *@package 分页类,参考uchome开发,支持symfony项目 
    */  
    class page  
    {  
        //判断项目类型,默认为普通项目,'sf'代表symfony项目使用  
        public $projectType = "";  
        public $totalCount;//记录总条数  
        public $numPerPage;//每页显示数量  
        public $currentPage;//当前页码  
        public $pageUrl;//分页链接url  
   
        function __construct()  
        {  
            /**以下配置在一个项目里是统一的,所以放在构造函数里。 
              *如果是symfony项目,可以读取app.yml。 
             **/  
            //页码长度,假如当前设置是5,则表示只显示5个页码,多了用省略号代替。  
            $this->page = 5;  
            //sunqingli.cn  
            $this->offSet = 2;  
            //偏移量,例如第9页,前面显示7、8页,www.sunqingli.cn  
            //后面显示10、11页,页码长度取决于上面的配置,前后多了的用省略号代替  
            $this->maxPages = 50;//页面显示最大页码数量,并不把实际最大页面数量呈现在网页上  
        }  
   
        /* 
         *@package 生成分页HTML主程序 
         *@param $totalCount 总信息条数 
         *@param $numPerPage 每页显示数量 
         *@param $currentPage 当前页码 
         *@param $pageUrl 分页链接 
         */  
        public function generatePage()  
        {  
            $totalCount = $this->totalCount;  
            $numPerPage = $this->numPerPage;  
            $currentPage = $this->currentPage;  
            $pageUrl = $this->pageUrl;  
            //初始化输出HTML代码  
            $outPageHTML = "";  
            //sunqingli.cn  
            $pageUrl .= strpos($pageUrl,'?')?'&':'?';  
            $realpages = 1;//初始化分页数量  
   
            //只有在总页码大于2的情况下,才输出分页HTML代码  
            if ($totalCount > $numPerPage)  
            {  
                $realpages = ceil($totalCount / $numPerPage);  
                //算出总页码数  
                $pages = ($this->maxPages < $realpages)?$this->maxPages:$realpages;  
                //如果总页码数小于页码长度,起始页码从1开始,末页就是总页码数  
                if ($this->page > $pages)  
                {  
                    $from = 1;  
                    $to = $pages;  
                }  
                else  
                {  
                    //如果总页码数大于页码长度,起始页码 = 当前页码 - 偏移量,即向前取偏移量个页码,  
                    //末页 = 起始页 + 页码长度 - 1,即向后取偏移量个页码。  
                    $from = $currentPage - $this->offSet;  
                    $to = $from + $this->page - 1;  
                    if ($from < 1)  
                    {  
                        $to = $currentPage + 1 - $from;  
                        $from = 1;  
                        if ($to - $from < $this->page)  
                        {  
                            $to = $this->page; //www.sunqingli.cn  
                        }  
                    }  
                    elseif ($to > $pages)  
                    {  
                        $from = $pages - $this->page + 1;  
                        $to = $pages;  
                    }  
                }  
   
                //开始输出分页HTML代码 www.sunqingli.cn  
                if ($currentPage - $this->offSet > 1 && $pages > $this->page)  
                {  
                    //满足条件1:如果当前页码减去偏移量大于1,例如偏移量是2,例如当前页码是5,5-2=3>1;  
                    //满足条件2:如果总页码数大于构造函数中的配置数,即可以显示省略号  
                    //构建出的HTML代码就是先显示第一页,然后显示省略号  
                    if ($this->projectType == 'sf')  
                    {  
                        $outPageHTML .= ''.link_to('1',$pageUrl.'page=1').'...';  
                    }  
                    else  
                    {  
                        $outPageHTML .= '1...';  
                    }  
                }  
                if ($currentPage > 1)  
                {  
                    //如果当前页码不是第一页,那么构造出来的HTML代码应该包含一个“上一页”的链接  
                    if ($this->projectType == 'sf')  
                    {  
                        $outPageHTML .= ''.link_to('上一页',$pageUrl.'page='.($currentPage - 1)).'';  
                    }  
                    else  
                    {  
                        $outPageHTML .= '上一页';  
                    }  
                }  
   
                //根据上面起始页数和结束页数,构建分页HTML代码  
                for($i = $from; $i < = $to; $i++)  
                {  
                    if ($this->projectType == 'sf')  
                    {  
                        $outPageHTML .= ($i == $currentPage) ? ''.$currentPage.'' :''.link_to($i,$pageUrl.'page='.$i).'';  
                    }  
                    else  
                    {  
                        $outPageHTML .= ($i == $currentPage) ? ''.$currentPage.'' :''.$i.'';  
                    }  
                }  
                //当前页不是最后一页,显示一个“下一页”链接,www.sunqingli.cn  
                //末页数小于总页数,显示省略号然后再显示最后一页的链接。  
                if ($this->projectType == 'sf')  
                {  
                    if ($currentPage < $pages)  
                    {  
                        $outPageHTML .= ''.link_to('下一页',$pageUrl.'page='.($currentPage + 1)).'';  
                    }  
   
                    if ($to < $pages)  
                    {  
                        $outPageHTML .= '...'.link_to($pages,$pageUrl.'page='.$pages).'';  
                    }  
                }  
                else  
                {  
                    if ($currentPage < $pages)  
                    {  
                        $outPageHTML .= '下一页';  
                    }  
                    //www.sunqingli.cn  
   
                    if ($to < $pages)  
                    {  
                        $outPageHTML .= '...'.$pages.'';  
                    }  
                }  
            }  
            return $outPageHTML;  
        }  
    }  
?>  
下面是使用上述类的例子:


< ?php  
/******** 例子 ********/  
$page = new page();  
   
$page->totalCount = 100;  
   
$page->numPerPage = 5;  
   
$page->currentPage = 9;  
   
$page->pageUrl = 'index.php';  
   
echo $page->generatePage();  
   
/***************************/  
?>