/*
思路
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. 在Ubuntu中设置中文输入法

    在Ubuntu中设置中文输入法 */--> pre { background-color: #2f4f4f;line-height: 1.6; FONT: 10.5pt Consola,&quo ...

  2. UNION、EXCEPT和INTERSECT操作查询结果

    对查询结果进行合并.剔除.取重操作可以通过UNION.EXCEPT和INTERSECT实现 任意一种操作都要满足以下两个条件: 1.字段的数量和顺序一致 2.对应字段的数据类型相兼容 一.UNION ...

  3. Java 集合框架 LinkedHashSet 和 LinkedHashMap 源码剖析

    总体介绍 如果你已看过前面关于HashSet和HashMap,以及TreeSet和TreeMap的讲解,一定能够想到本文将要讲解的LinkedHashSet和LinkedHashMap其实也是一回事. ...

  4. 配置java软件

    到官网下载了jdk和jre的安装包 配置时发现javac显示 "javac不是内部或外部命令,等等一些的问题" 上百度搜索后,发现是win10系统配置path的时候需要写绝对路径而 ...

  5. iOS-实现映客首页TabBar和滑动隐藏NavBar和TabBar

    之前在做直播的时候,参照了映客App,发现其首页的效果还挺不错,在网上找了一下相关仿映客App代码和博客,大部分都是说如何播放直播流和推流,对于UI这块甚少,所以我自己花了点时间研究了一下映客的首页U ...

  6. C#与C++函数调用

    在 上篇文章重点讲解数据类型的转换,在此基础上再讲解函数调用. 1.函数调用 c++中函数 INF_NET_API INF_RESULT WINAPI INF_NET_GetList(long lLo ...

  7. C++一些注意点之操作符重载

    重载操作符需要注意 (1)重载操作符必须具有一个类类型操作数.不能重载内建类型的操作符. operator +(int,int);//这个是错误的,都为内建类型 operator +(int,clas ...

  8. Handler具体解释系列(四)——利用Handler在主线程与子线程之间互发消息

    MainActivity例如以下: package cc.c; import android.app.Activity; import android.os.Bundle; import androi ...

  9. nginx 笔记

    nginx 这个轻量级.高性能的 web server 主要可以干两件事情: 〉直接作为http server(代替apache,对PHP需要FastCGI处理器支持): 〉另外一个功能就是作为反向代 ...

  10. wpf提示背景,资源样式

    查找资源时多用element.TryFindResource() <TextBox FontSize="17" Height="26" Margin=&q ...