/*
思路
1.把地址栏的URL获取
2.分析URL中的query部分--就是?后面传参数的部分
3.query部分分析成数组
4.把数组中的page单元,+1,-1,形成2个新的数组
5.再把新数组拼接成query部分,合成上一页,下一页连接地址 */
//分页类
class Page {
public $total; //全部条数,从数据库取出
public $prePage = 10; //每页的条数 protected $curr= 1; //默认当前页码 public function __construct($total,$prePage='') {
$this->total = $total; //把总条目信息放在total属性
if ($prePage > 0) {
$this->prePage = $prePage; //把每页数量放在perPage属性
} //计算当前页码
if (isset($_GET['page']) && ($_GET['page'] + 0) > 0) {
$this->curr = $_GET['page'] + 0;
}
} //主体函数
public function showPage() {
if ($this->total <=0) {
return ''; //如果总条目<=0 直接返回空字符串
} $cnt = ceil($this->total / $this->prePage); //算总页数,进一取整 //根据当前页,算上一页,下一页
/*
分析url,有几种情况?
xx.php
xx.php?id=5
xx.php?page=3
xx.php?id=5&page=3
*/ //最终生成的URL里边必然有page=N
$url = $_SERVER['REQUEST_URI'];
$parse = parse_url($url); //把URL分析结果放在数组里
//print_r($parse);
//保证参数里边有page
if (!isset($parse['query'])) {
$parse['query'] = 'page=' .$this->curr;
}
//把query字符串分析成数组,再次确保有page选项
parse_str($parse['query'],$parms); if (!array_key_exists('page', $parms)) {
$parms['page'] = $this->curr;
} //上边四种情况都测试一遍,page参数都能生成
//print_r($parms); //判断除了page之外,还有没有其他参数 if (count($parms) == 1) {
$url = $parse['path'] . '?';
} else {
unset($parms['page']);
$url = $parse['path'] . '?' . http_build_query($parms) . '&';
} //echo $url
$prev = $this->curr - 1;
$next = $this->curr + 1; //首页
$indexLink = '<a href="' . $url .'page=' . 1 . '">首页</a>'; //上一页
if ($prev < 1) {
$prevLink = '';
}else {
$prevLink = '<a href="' . $url .'page=' . $prev . '">上一页</a>';
} //下一页
if ($next > $cnt) {
$nextLink = '';
}else {
$nextLink = '<a href="' . $url .'page=' . $next . '">下一页</a>';
}
//尾页
$lastLink = '<a href="' . $url .'page=' . $cnt . '">尾页</a>'; //echo $indexLink.'  '.$prevLink.'  '.$nextLink .'  '.$lastLink;
//上一页,1 2 3 4 5 下一页 $start = $this->curr - (5-1)/2; //计算左侧开始的页码
$end = $this->curr + (5-1)/2; //计算右侧开始的页码 //如果左侧的页面,已经小于1,则把小于1 的部分补到右侧
if ($start < 1) {
$end += (1 - $start);
$start = 1; //修改start = 1 if ($end > $cnt) {
$end = $cnt;
}
} //把右侧超出的部分,补到左边
if ($end > $cnt) {
$start -= ($end - $cnt);
$end = $cnt; if ($start < 1) {
$start = 1;
}
} //循环出页码数
$pageStr = '';
for ($i=$start; $i <= $end ; $i++) { if ($i == $this->curr) {
$pageStr .= $i;
continue;
} $pageStr .= '<a href="' . $url . 'page=' . $i . '">' . $i . '</a>';
}
return $indexLink.$prevLink.$pageStr.$nextLink.$lastLink;
} } $page = new Page(30,3);
echo $page->showPage();

												

php之分页类代码的更多相关文章

  1. php分页类代码带分页样式效果(转)

    php分页类代码,有漂亮的分页样式风格 时间:2016-03-16 09:16:03来源:网络 导读:不错的php分页类代码,将类文件与分页样式嵌入,实现php查询结果的精美分页,对研究php分页原理 ...

  2. 一个简单的php分页类代码(转载)

    入门级php分页类 原文地址:http://www.xfcodes.com/php/fenye/3608.htm 时间:2015-12-16 20:52:00来源:网络 php分页类. 复制代码代码如 ...

  3. php分页类代码和使用

    在这要说的一点就是如果你做的分页是有搜索条件的,那么就可以用下面的代码,然后调用之后在new Page()里面把连接加进去就可以了.例如: $href="http://www.***.cn/ ...

  4. PHP分页类代码

    今天为大家献上一段代码,这是一段php分页代码: <?php//创建分页类class Page {    private $_all_num;                           ...

  5. CI框架分页类代码

    model层  ;     $page = $);     ;      }else{         $start = $page;       }     $data['results'] = $ ...

  6. 简单易用的分页类实例代码PHP

    <?php /*********************************************** * @类名: page * @参数: $myde_total - 总记录数 * $m ...

  7. CI框架分页类

    分页类1.分页类参数说明 'base_url' => 指向你的分页所在的控制器类/方法的完整的 URL, 'total_rows' => 数据的总行数, 'per_page' => ...

  8. php+mysql分页类的入门实例

    php+mysql分页类的简单代码 时间:2016-02-25 06:16:26来源:网络 导读:php+mysql分页类的简单代码,二个php分页类代码,对商品进行分页展示,当前页面数,每个页面展示 ...

  9. thinkphp简洁、美观、靠谱的分页类

    我们要实现如下图分页效果 这个分页类是在thinkphp框架内置的分页类的基础上修改而来:原分页类的一些设计,在实际运用中感觉不是很方便: 1.只有一页内容时不显示分页: 2.原分页类在当前页是第一页 ...

随机推荐

  1. Java 操作 EXCEL

    今天帮朋友写了一段用来处理EXCEL内容的程序,在这里记录下自己的学习过程.主要是对EXCEL表格中的内容做分类和统计,使用计算机来做这种重复的机械性地工作再好不过了.首先,我们需要下载一个java操 ...

  2. 开启gdb调试功能

    设置/etc/yum.repos.d/CentOS-Debuginfo.repo,修改[debug项下的enabled的值为1];

  3. memcache基本讲解

    Memcached技术 介绍: memcached是一种缓存技术, 他可以把你的数据放入内存,从而通过内存访问提速,因为内存最快的, memcached技术的主要目的提速, 在memachec 中维护 ...

  4. win8 64位 mysql安装 Configuration file my.ini error code -1

    问题如题,解决方法: 1.由于目录中纯在中文,所以导致代码错误.故而把目录设置成全英文的. 2.下载64位mysql安装,安装32位mysql也会出现此问题.

  5. ajax jsonp跨域处理问题

    客户端 html $.ajax({ type : "get", async:false, dataType : "jsonp", jsonp: "js ...

  6. BZOJ 1878 SDOI 2009 HH项链 树状数组 + 脱机处理

    标题效果:一些珠子项链.珠具有不同的颜色.我们问了很多次有多少种不同的颜色有过一段范围. 思考:这个问题让我学会聪明的离线实践.按左端点排序问题.加工出来的位置每种颜色首次出现.每一种颜色的下一次出现 ...

  7. CMake 简单介绍 图

    http://tech.uc.cn/?p=914     CMake特点 CMake需要用户用CMake规范的语法编写CMake脚本,该语法简单易用,入门极其顺手 原生支持 C/C++/Fortran ...

  8. 高级性能调试手段(oprofile+gprofile)+内核追踪手段:LTT

    http://blog.csdn.net/wlsfling/article/details/5876134http://www.lenky.info/archives/2012/03/1371http ...

  9. 廖雪锋笔记2:list,tuble

    list:元素值不固定,元素类型不固定 apend(xx) insert(INDEX,xx) pop(index) 索引元素: [0] [1] [2] [-1] [-2] LIST,TUBLE变量值是 ...

  10. block代码块介绍

    关于block的简单介绍 什么是block? Block是C语言的一个语法特性,同时也是C语言的运行时特性,它很像C中的函数指针,因为你可以像使用函数指针一样的去使用block对象:它也很像C++中的 ...