Uchome分页方法


Uchome分页方法



< ?php
    /**@author he luan
    *@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();
 
/***************************/
?>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值