PHP学习之分页类
<?php
$page = new Page(2, 40);
var_dump($page->allUrl());
class Page
{
//每页显示多少条数据
protected $number;
//一共有多少条数据
protected $totalCount;
//当前页
protected $page;
//总页数
protected $totalPage;
//url
protected $url; public function __construct($number, $totalCount)
{
$this->number = $number;
$this->totalCount = $totalCount;
//得到总页数
$this->totalPage = $this->getTotalPage();
//得到当前页数
$this->page = $this->getPage();
//得到url
$this->url = $this->getUrl();
} /**
* 获取总页数
*
* @return void
*/
protected function getTotalPage()
{
return ceil($this->totalCount / $this->number);
} /**
* 获取当前页码
*
* @return void
*/
protected function getPage()
{
if (empty($_GET['page'])) {
$page = 1;
} elseif ($_GET['page'] > $this->totalPage) {
$page = $this->totalPage;
} elseif ($_GET['page'] < 1) {
$page = 1;
} else {
$page = $_GET['page'];
}
return $page;
} /**
* 获取去掉page之后的url
*
* @return void
*/
protected function getUrl()
{
//得到协议名
$scheme = $_SERVER['REQUEST_SCHEME'];
//得到主机名
$host = $_SERVER['SERVER_NAME'];
//得到端口号
$port = $_SERVER['SERVER_PORT'];
//得到路径和请求字符串
$uri = $_SERVER['REQUEST_URI'];
//中间做处理,要将page=5等这种字符串拼接url中,所以如果原来url中有page这个参数,我们首先需要先将原来的page参数给清空
$uriArray = parse_url($uri);
$path = $uriArray['path'];
if (!empty($uriArray['query'])) {
//首先将请求字符串变为关联数组
parse_str($uriArray['query'], $array);
//清除掉关联数组中的page键值对
unset($array['page']);
//将剩下的参数拼接为请求字符串
$query = http_build_query($array);
//再将请求字符串拼接到路径的后面
if ($query != '') {
$path = $path . '?' . $query;
}
}
return $scheme . '://' . $host . ':' . $port . $path;
} /**
* 设置url
*
* @param [type] $str
* @return void
*/
protected function setUrl($str)
{
if (strstr($this->url, '?')) {
$url = $this->url . '&' . $str;
} else {
$url = $this->url . '?' . $str;
}
return $url;
} /**
* 返回所有url
*
* @return void
*/
public function allUrl()
{
return [
'first' => $this->first(),
'prev' => $this->prev(),
'next' => $this->next(),
'end' => $this->end()
];
} /**
* 首页
*
* @return void
*/
public function first()
{
return $this->setUrl('page=1');
} /**
* 下一页
*
* @return void
*/
public function next()
{
//根据当前page得到下一页的页码
if ($this->page + 1 > $this->totalPage) {
$page = $this->totalPage;
} else {
$page = $this->page + 1;
}
return $this->setUrl('page=' . $page);
} /**
* 上一页
*
* @return void
*/
public function prev()
{
if ($this->page - 1 < 1) {
$page = 1;
} else {
$page = $this->page - 1;
}
return $this->setUrl('page=' . $page);
} /**
* 尾页
*
* @return void
*/
public function end()
{
return $this->setUrl('page=' . $this->totalPage);
} /**
* 偏移量,方便数据库查找
*
* @return void
*/
public function limit()
{
$offset = ($this->page - 1) * $this->number;
return $offset . ',' . $this->number;
}
}
运行结果:

PHP学习之分页类的更多相关文章
- php大力力 [019节]php分页类的学习
2015-08-26 php大力力019.php分页类的学习 [2014]兄弟连高洛峰 PHP教程14.2.1 分页需求分析 14:18 [2014]兄弟连高洛峰 PHP教程14.2.2 分页类中分页 ...
- php分页类学习
分页是目前在显示大量结果时所采用的最好的方式.有了下面这些代码的帮助,开发人员可以在多个页面中显示大量的数据.在互联网上,分页是一般用于搜索结果或是浏览全部信息(比如:一个论坛主题).几乎在每一个W ...
- Yii2中自带分页类实现分页
1.首先写控制器层 先引用pagination类 use yii\data\Pagination; 写自己的方法: function actionFenye(){ $data = Fie ...
- php 自己写的好看的分页类
自己写的一个分页类 ,不是很完整,个别没有做验证,但可以使用,分页效果见文章底部.除了链接数据库的代码没有粘贴上来,其他的都粘贴了.供学习使用- <?php /** * Created by P ...
- 自定义MVC框架之工具类-分页类的封装
以前写过一个MVC框架,封装的有点low,经过一段时间的沉淀,打算重新改造下,之前这篇文章封装过一个验证码类. 这次重新改造MVC有几个很大的收获 >全部代码都是用Ubuntu+Vim编写,以前 ...
- python---django中自带分页类使用
请先看在学习tornado时,写的自定义分页类:思路一致: python---自定义分页类 1.基础使用: 后台数据获取: from django.core.paginator import Pagi ...
- php实现的分页类
php分页类文件: <?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 pr ...
- asp.net的快捷实用分页类
KeleyiPager分页类,可以于对列表页进行分页浏览,代码是从HoverTreeCMS项目中COPY的,感觉很不错,使用简单方便,但是功能强大. 在线体验效果:http://cms.hovertr ...
- php分页类
1.需求 学会php分页类的使用 2.参考例子 CI的分页类 3.代码部分 <?php class pagination{ public $pagesize=20; public $pagein ...
随机推荐
- 装机篇:将ubuntu 14.04安装在移动硬盘中
这样做有诸多好处,最大的好处莫过于获得新鲜感. 需要注意的只有一点,要把bootloader装在整个硬盘的MBR而不是单独某个分区的DBR里. 另,我所成功的版本为14.04.1,之前使用14.04. ...
- 一组简单好看的css3渐变按钮
主要代码如下: body { background:#fff } /* Mixins */ /* bg shortcodes */ .bg-gradient1 span,.bg-gradient1:b ...
- 【Hibernate】Hibernate关联关系的映射
一.实体之间的关系 二.一对多的配置 2.1 第一步创建两个实体 2.2 第二步:配置映射文件 2.3 第三步:将映射放到核心配置文件中 三.级联 3.1 Hibernate中级联保存的效果 3.2 ...
- 阿里Java架构师打包 FatJar 方法小结
在函数计算(Aliyun FC)中发布一个 Java 函数,往往需要将函数打包成一个 all-in-one 的 zip 包或者 jar 包.Java 中这种打包 all-in-one 的技术常称之为 ...
- 【leetcode】339. Nested List Weight Sum
原题 Given a nested list of integers, return the sum of all integers in the list weighted by their dep ...
- Image Processing and Analysis_8_Edge Detection:Design of steerable filters for feature detection using canny-like criteria ——2004
此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...
- Python内存数据序列化到硬盘上哪家强
1. 闲扯一下:文件 磁盘上的数据,我们一般称为 “文件” ,一般不同的文件都有各自的后缀名,比如 .txt .docx .xlsx .jpg .mp3 .avi .这些不同类型的文件一般分为两大类: ...
- 4.Hbase Shell 命令
Hbase提供了一个shell的终端给用户交互:#$HBASE_HOME/bin/hbase shell,执行quit命令可以退出命令行 2.使用Hbase Shelll 命令操作: 名称 命令表达式 ...
- docker从入门到精通再到放弃
docker说明 docker三大功能:构建(build).运输(ship).运行(run),只需要记下这三大功能就可以了 1.docker入门 docker安装及配置 a.docker源配置 cur ...
- 【javascript】h5页面禁止返回上一页
window.history.pushState("","","#"); window.addEventListener("pop ...