Page.class.php 
<?php
/**
* 分页类
*
* 调用方式:
* $p=new Page(总条数,显示页数,当前页码,每页显示条数,[链接]);
* print_r($p->getPages()); //生成一个页码数组(键为页码,值为链接)
* echo $p->showPages(1); //生成一个页码样式(可添加自定义样式)
*
*/

/*
总条数,需要显示的页数,当前页,每页显示的条数,连接
生成一个一维数组,键为页码 值为连接
返回一个生成好样式的页码(并且可以根据自己需要添加样式)
默认样式 共45条记录,每页显示10条,当前第1/4页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]
*/
class Page{
protected $count; //总条数
protected $showPages; //需要显示的页数
protected $countPages; //总页数
protected $currPage; //当前页
protected $subPages; //每页显示条数
protected $href; //连接
protected $page_arr=array(); //保存生成的页码 键页码 值为连接

/**
* __construct 构造函数(获取分页所需参数)
* @param int $count 总条数
* @param int $showPages 显示页数
* @param int $currPage 当前页数
* @param int $subPages 每页显示数量
* @param string $href 连接(不设置则获取当前URL)
*/
public function __construct($count,$showPages,$currPage,$subPages,$href=''){
$this->count=$count;
$this->showPages=$showPages;
$this->currPage=$currPage;
$this->subPages=$subPages;

//如果链接没有设置则获取当前连接
if(empty($href)){
$this->href=htmlentities($_SERVER['PHP_SELF']);
}else{
$this->href=$href;
}
$this->construct_Pages();
}

/**
* getPages 返回页码数组
* @return array 一维数组 键为页码 值为链接
*/
public function getPages(){
return $this->page_arr;
}

/**
* showPages 返回生成好的页码
* @param int $style 样式
* @return string 生成好的页码
*/
public function showPages($style=1){
$func='pageStyle'.$style;
return $this->$func();
}

/**
* pageStyle1 分页样式(可参照这个添加自定义样式 例如pageStyle2())
* 样式 共45条记录,每页显示10条,当前第1/4页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]
* @return string
*/
protected function pageStyle1(){
/* 构造普通模式的分页
共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]
*/
$pageStr='共'.$this->count.'条记录,每页显示'.$this->subPages.'条';
$pageStr.='当前第'.$this->currPage.'/'.$this->countPages.'页 ';

$_GET['page'] = 1;
$pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'">首页</a>] </span>';
//如果当前页不是第一页就显示上页
if($this->currPage>1){
$_GET['page'] = $this->currPage-1;
$pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'">上页</a>] </span>';
}

foreach ($this->page_arr as $k => $v) {
$_GET['page'] = $k;
$pageStr.='<span>[<a href="'.$v.'">'.$k.'</a>] </span>';
}

//如果当前页小于总页数就显示下一页
if($this->currPage<$this->countPages){
$_GET['page'] = $this->currPage+1;
$pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'">下页</a>] </span>';
}

$_GET['page'] = $this->countPages;
$pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'">尾页</a>] </span>';

return $pageStr;
}

/**
* construct_Pages 生成页码数组
* 键为页码,值为链接
* $this->page_arr=Array(
* [1] => index.php?page=1
* [2] => index.php?page=2
* [3] => index.php?page=3
* ......)
*/
protected function construct_Pages(){
//计算总页数
$this->countPages=ceil($this->count/$this->subPages);
//根据当前页计算前后页数
$leftPage_num=floor($this->showPages/2);
$rightPage_num=$this->showPages-$leftPage_num;

//左边显示数为当前页减左边该显示的数 例如总显示7页 当前页是5 左边最小为5-3 右边为5+3
$left=$this->currPage-$leftPage_num;
$left=max($left,1); //左边最小不能小于1
$right=$left+$this->showPages-1; //左边加显示页数减1就是右边显示数
$right=min($right,$this->countPages); //右边最大不能大于总页数
$left=max($right-$this->showPages+1,1); //确定右边再计算左边,必须二次计算

for ($i=$left; $i <= $right; $i++) {
$_GET['page'] = $i;
$this->page_arr[$i]=$this->href.'?'.http_build_query($_GET);
}
}
}
?>
demo.php 
<?php
/**
* demo
*/
header("content-type:text/html;charset=utf8");
include('Page.class.php'); //引入类

//$p=new Page(总条数,显示页数,当前页码,每页显示条数,[链接]);
//连接不设置则为当前链接
$page=isset($_GET['page']) ? $_GET['page'] : 1;
$p=new Page(100,4,$page,8);

//生成一个页码数组(键为页码,值为链接)
echo "<pre>";
print_r($p->getPages());

//样式 共45条记录,每页显示10条,当前第1/4页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]
echo $p->showPages(1);

————————————————
原文链接:https://blog.csdn.net/netuser1937/article/details/54863281

PHP通用分页类的更多相关文章

  1. PHP通用分页类page.php[仿google分页]

    <?php /** ** 通用php分页类.(仿Google样式) ** 只需提供记录总数与每页显示数两个参数.(已附详细使用说明..) ** 无需指定URL,链接由程序生成.方便用于检索结果分 ...

  2. PHP通用分页(Pager)类

    三种不同展示方式 附上style~ 1. 效果图1 2.效果图2    3. 效果图3 4. 分页类主体 <?php /** * PHP通用分页类 * show(2) 1 ... 62 63 6 ...

  3. php大力力 [019节]php分页类的学习

    2015-08-26 php大力力019.php分页类的学习 [2014]兄弟连高洛峰 PHP教程14.2.1 分页需求分析 14:18 [2014]兄弟连高洛峰 PHP教程14.2.2 分页类中分页 ...

  4. Spring Boot mybatis HashMap +layui 通用分页

    背景: mybatis 常用数据查询的方法都是先建实体类,再建Mapper,最后写Service,如果只是单纯的去查询数据显示,这样操作太麻烦.本文就以mybatis +layui创建通用分页类,简化 ...

  5. ibernate学习笔记5---实体类或属性名与数据库关键字冲突、hql命名参数、hql实现通用分页

    一.实体类或属性名与数据库关键字冲突问题1.实体类名与数据库中的关键字冲突比如:实体表User与oracle中的系统表冲突解决方式1:在xml中添加table属性,指定表名,使其不与name默认相等 ...

  6. 简单实用的分页类-python

    django自带的分页虽然挺好,但是就想自己弄个通用的 自己写了个分页的类,用的是python,   其他语言改下语法就能用了. #定义好类.class pagemanage: def __init_ ...

  7. 利用EF和C#泛型实现通用分页查询

    利用EF和C#泛型实现通用分页查询       Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (ORM) 解决方案,是微软的ORM框架.此框架将数据库中的 ...

  8. C#简单的通用分页

    通用分页技术分析 需要返回不同的类型的数据--采用泛型实现该操作 需要提供不同的方法 上一页 上一页 第一页 最后一页 跳转到指定页 Demo 代码 using System; using Syste ...

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

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

随机推荐

  1. vue 合成图片

    目的:将二维码图片和背景图片合成变成一张图片 方法一: 引入依赖 cnpm install qrcanvas --save cnpm install html2canvas --save 具体代码: ...

  2. Vue躬行记(6)——内容分发

    Vue提供了一种内容分发技术,可将父组件中的内容传递给子组件的模板,实现方式参照了Web组件规范草案. 一.插槽 Vue内置了一个<slot>元素,能作为插槽(slot)存在,而插槽内可包 ...

  3. windows下同时装了Python3和Python2,如何区分使用?

    1.前言 想学习Python3,但是暂时又离不开Python2.在Windows上如何让它们共存呢? 目前国内网站经常会让大家把其中一个python.exe改个名字,这样区分开两个可执行文件的名字,但 ...

  4. 最新JetBrains PyCharm 使用教程--安装教程(一)

    安装过程 ​ ​ ​ ​ ​ ​ ​ Pycharm  激活码 license server选项里边输入:http://intellij.mandroid.cn/ ​

  5. Git连接GitHub仓库详解

    [Annotation]本文将从标题八开始,因为前七个标题是关于Git的基本操作,如果对Git的基本操作不了解的话,可以点击下方链接先看一下Git怎么使用. 关于Git的详细使用 八:创建SSH Ke ...

  6. Zabbix日志监控插件

    #!/usr/bin/env python # coding:utf-8 import re import os import sys import logging logging.basicConf ...

  7. SSM整合相关试题

    1.下列关于Spring自动装配的说法中,错误的是() A 在Spring配置文件中,可以通过<bean>元素的autowire属性指定自动装配方式 B autowire属性值可以设置为n ...

  8. 可保图片不变形的object-fit

    Object-fit 我们有时候浏览一些网站的时候,偶尔会遇到这种情况:  明显它喵的形变了,尤其是这种这么业余的失误,还是出现在一个专门做图片的网站上. 产生这种现象的原因是:图片写了固定的宽高,这 ...

  9. PHP 面试踩过的坑

    1.get,post 的区别 **显示有区别 ** get方法是将字符串拼接在地址栏后面可以看见 而post方法看不见 **传递的大小有区别 ** 具体大小和浏览器有关系,ie浏览器是2k其他浏览器的 ...

  10. 设计模式(Java语言)- 简单工厂模式

    简单工厂模式有称为静态工厂模式,属于设计模式中的创建型模式.简单工厂模式通过对外提供一个静态方法来统一为类创建实例.简单工厂模式的目的是实现类与类之间解耦,其次是客户端不需要知道这个对象是如何被穿创建 ...