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(); /***************************/?>
- Uchome分页方法
- Uchome分页方法
- 第十四章:【UCHome二次开发】uchome通用方法
- uchome 通用方法汇总
- uchome二次开发必须知道的通用方法
- Uchome 所用程序通用方法汇总function_common.php
- UChome 发送及进入消息 出错 处理方法
- uchome 不用每次都更新缓存的方法
- 模仿UCHOME
- uchome模板
- UCHOME二次开发
- 关于uchome
- uchome 笔记
- 分页方法
- 分页方法
- 分页方法
- 分页方法
- 分页方法
- QT_渐变填充
- httpclient 4 POST 自动重定向
- C editing with Vim HOWTO
- 职业生涯—一个人的生活
- 用C#创建Windows服务(Windows Services)
- Uchome分页方法
- uchome 基本文件及功能介绍
- java中awt和swing是的关系以及区别
- uchome 名称对照表
- 网络运营总结
- AJAX中UpdatePanel控件属性的相关介绍
- 工具使用技巧收集
- php 上传文件
- 查看 linux flash 分区大小,mtd,nor,nand,partition