Uchome分页方法

来源:互联网 发布:最短路径算法dijkstra 编辑:程序博客网 时间:2024/05/22 12:28

看到一个哥们写的UChome的分页,挺不错的拿过来借鉴一下。7dddd5eb
(引用:http://symfony.net.cn/)
昨天晚上没事可干,躺在床上抱着小黑看uchome的源代码,边调试边看,
发现uchome的分页方法很巧妙,正好手痒,就把这个方法改装成一个类,
改装完毕后,再完善一下,使之可以支持symfony。记录在这里了。

< ?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(); /***************************/?>
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子在幼儿园生殖器官受伤怎么办? 被骗了3000块钱怎么办 小说 月经来了想体检怎么办 尿检的时候遇上月经期怎么办 消防兵改革那新兵怎么办 教师资格证体检有问题怎么办 检兵合格还在上学怎么办 运动后肌肉肿了怎么办 打架用力过猛肌肉疼痛怎么办 军检只要一项不合格怎么办 体检身高差一厘米怎么办 体检身高差两公分怎么办 体检身高差10厘米怎么办 孩子的爸爸总是打游戏怎么办 拉屎屁眼疼还有血怎么办 家里冼澡要等好多冷水怎么办 孕晚期小孩头大怎么办 报考警校体检不合格退回怎么办? 入职体检视力0.1怎么办 屁扒骨折疼要怎么办 宝宝发高烧怎么办能快速退烧 屁股上长了纹路怎么办 手机充电头歪了怎么办 屁股挠烂了化脓怎么办 手机充电那坏了怎么办 孩子在学校被老师冤枉怎么办 初中学校不好我该怎么办 天气太热屁股淹了怎么办 骑车骑的屁股疼怎么办 爬山时屁股摔紫青了怎么办 宝宝不肯脱裤子拉粑粑怎么办 国家对无地农民怎么办 生完孩子骨架变大怎么办 17岁长高很慢怎么办? 出月子腿着凉了怎么办 脚着凉了脚疼怎么办 腿着凉了特别疼怎么办 孩子骨龄大2两年怎么办 和人吃饭很尴尬怎么办 头不自觉向右偏怎么办 靠墙站立腰疼怎么办