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 ...
随机推荐
- 跨平台打开一个URL的方法
unit u_urlOpen; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System ...
- 利用CodeBlocks结合freeglut快速搭建OpenGL开发环境
利用CodeBlocks结合freeglut快速搭建OpenGL开发环境 2018-12-19 10:15:48 再次超越梦想 阅读数 180更多 分类专栏: 我的开发日记 版权声明:本文为博主原 ...
- [Python] Codecombat 攻略 Sarven 沙漠 (1-43关)截止至36关
首页:https://cn.codecombat.com/play语言:Python 第二界面:Sarven沙漠(43关)时间:4-11小时内容:算术运算,计数器,while循环,break(跳出循环 ...
- C#在代码中编写输出debug信息-类Debug的使用
文章:C# 的两种debug 方法 文章:C#跟踪和调试程序-Debug类使用 很全面的文章,可以仔细学习使用下. 文章:C#调试类 没有仔细看. 关键字:Debug类和Trace类有什么区别? 微软 ...
- 马的遍历(BFS
https://www.luogu.org/problemnew/show/P1443 模板BFS...... #include<iostream> #include<cstdio& ...
- python 2.7安装pygame报错解决办法pygame-1.9.4-cp27-cp27m-win_amd64.whl is not a supported wheel on this platform.
python下载python安装包 https://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame 下载完后进入cmd命令行执行安装,报错: pygame-1.9 ...
- WPF使用转换器(Converter)
1.作用:可以将源数据和目标数据之间进行特定的转化, 2.定义转换器,需要继承接口IValueConverter [ValueConversion(typeof(int), typeof(string ...
- js 正则表达式将 p标签替换 span标签
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- JS基本数据类型和引用数据类型区别
1.栈(stack)和堆(heap) stack为自动分配的内存空间,它由系统自动释放:而heap则是动态分配的内存,大小也不一定会自动释放 2.数据类型 JS分两种数据类型: 基本数据类型:Numb ...
- ADO.Net数据库连接字符串、DbProviderFactory
一.ADO.Net数据库连接字符串 1.OdbcConnection(System.Data.Odbc) (1)SQL Sever 标准安全:" Driver={SQL Server}; S ...