自定义MVC框架之工具类-分页类的封装
以前写过一个MVC框架,封装的有点low,经过一段时间的沉淀,打算重新改造下,之前这篇文章封装过一个验证码类。
这次重新改造MVC有几个很大的收获
>全部代码都是用Ubuntu+Vim编写,以前都是windows上开发,这次彻底迷上Ubuntu Linux
>裸装php,用php自带的服务器解释执行php,缺哪个扩展就装哪个,最后通过整个MVC框架的开发,把Lamp所有的常用配置与细节搞懂
>通过扩展安装,学习扩展开发与php底层源码分析
总之,终于感觉层次又提升了不少。
分页类代码:
<?php class Page {
//每页显示的条目
protected $pageSize;
//总记录数
protected $totalRecord;
//当前页
protected $p;
//总页数
protected $totalPage;
protected $url; public function __construct( $_pageSize, $_totalRecord ){
$this->pageSize = $_pageSize;
$this->totalRecord = $_totalRecord;
$this->totalPage = ceil( $this->totalRecord / $this->pageSize );
$this->p = $this->getCurPage();
$this->url = $this->getUrl();
} public function setUrl( $p ){
if( strstr( $this->url, '?' ) ) {
//url中有参数
$url = $this->url . '&p=' . $p;
}else {
//url中没有参数
$url = $this->url . '?p=' . $p;
}
return $url;
} //首页
public function firstPage(){
return $this->setUrl( 1 );
} //末页
public function lastPage(){
return $this->setUrl( $this->totalPage );
} //上一页
public function prevPage(){
if( $this->p - 1 <= 0 ) {
$prevPage = $this->p;
}else {
$prevPage = $this->p - 1;
}
return $this->setUrl( $prevPage );
} //下一页
public function nextPage(){
if( $this->p + 1 > $this->totalPage ) {
$nextPage = $this->p;
}else {
$nextPage = $this->p + 1;
}
return $this->setUrl( $nextPage );
} //得到当前的页码
public function getCurPage(){
$curPage = intval( $_GET['p'] );
if ( empty( $curPage ) ) {
$curPage = 1;
}else if ( $curPage > $this->totalPage ) {
$curPage = $this->totalPage;
}else if ( $curPage < 0 ){
$curPage = 1;
}
return $curPage;
} //拼接url
public function getUrl(){
$protocol = strtolower( array_shift( explode( '/', $_SERVER['SERVER_PROTOCOL'] ) ) );
$host = $_SERVER['SERVER_NAME'];
$port = $_SERVER['SERVER_PORT'];
$uri = $_SERVER['REQUEST_URI'];
$uriArr = parse_url( $uri );
$path = $uriArr['path'];
if( !empty( $uriArr['query'] ) ) {
//url中的query字符转数组
parse_str( $uriArr['query'], $args );
//清除原来的分页参数p
if( isset( $args['p'] ) ){
unset( $args['p'] );
}
//参数重新拼接成字符串
$queryString = http_build_query( $args );
//字符串如果不止一个p参数,把那些参数拼接在path的后面
if ( !empty( $queryString ) ){
$path .= '?' . $queryString;
}
}
return $protocol . '://' . $host . ':' . $port . $path;
} public function render(){
return [
'first' => $this->firstPage(),
'last' => $this->lastPage(),
'prev' => $this->prevPage(),
'next' => $this->nextPage()
];
} public function limit(){
$offset = ( $this->p - 1 ) * $this->pageSize;
return $offset . ',' . $this->pageSize;
}
} $page = new Page( 5, 11 );
//echo $page->getCurPage();
//echo $page->getUrl();
print_r( $page->render() ); ?>
自定义MVC框架之工具类-分页类的封装的更多相关文章
- 自定义MVC框架之工具类-模型类
截止目前已经改造了5个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 自定义MVC框架之工具类-文件上传类 自定义MVC框架之工具类-图像处理 ...
- 自定义MVC框架之工具类-图像处理类
截止目前已经改造了4个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 自定义MVC框架之工具类-文件上传类 图像处理类: 1,图片加水印处理( ...
- 自定义MVC框架之工具类-文件上传类
截止目前已经改造了3个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 该文件上传类功能如下: 1,允许定制上传的文件类型,文件mime信息,文 ...
- Java Web自定义MVC框架详解 (转)
转自:http://blog.csdn.net/jackfrued/article/details/42774459 最近给学生讲Java Web,希望他们能够在学完这部分内容后自己实现一个MVC框架 ...
- 自定义MVC框架
我们在学习自定义MVC框架的时候常常会听到Model1 ,Model2和MVC.那么什么是Model1 什么是Model2什么又是MVC呢? 什么是Model1? Model1就是一种纯jsp开发技术 ...
- Struts2 自定义MVC框架
一.Model1与Model2: Model1:就是一种纯jsp开发技术,将业务逻辑代码和视图渲染代码杂糅在一起. Model2:Model2是在Model1的基础上,将业务逻辑的代码分离开来,单独形 ...
- 第一章 自定义MVC框架
第一章 自定义MVC框架1.1 MVC模式设计 组成:Model:模型,用于数据和业务的处理 View :视图,用于数据的显示 Controller:控制器 ...
- c#自定义ORM框架---(泛型&反射&实体类扩展属性<附带通用增、删、查、改>)
该教材主要是运用到泛型.反射和实体类扩展属性 步骤一.建立扩展属性类 实体类扩展属性要继承Attribute基类完成 [AttributeUsage(AttributeTargets.Property ...
- 二十七、CI框架之自己写分页类并加载(写分页还是有难度,搞了一整天)
一.我们写好自己的分页代码,防止library目录中,带构造函数 二.在模型中,添加2个函数,一个是查询数据的条数,第二个是取出数据库中的数据 三.在控制中,写入相应的代码,如下: 四.在界面中,写入 ...
随机推荐
- 伪装为 吃鸡账号获取器 的QQ木马分析
本文作者:i春秋作家坏猫叔叔 0×01 起因随着吃鸡热潮的来临,各种各样的吃鸡辅助和账号交易也在互联网的灰色地带迅速繁殖滋生.其中有真有假,也不乏心怀鬼胎的“放马人”.吃过晚饭后在一个论坛看到了这样一 ...
- Testing - 软件测试知识梳理 - 软件可靠性测试
软件可靠性的基本概念 错误,缺陷,故障和失效 错误:指的是软件在生命周期中各个阶段的状态和行为与人们的期待不一致的偏差,不单单是软件系统本身,中间产品的偏差也算是软件错误 缺陷:指的是软件中一切不好的 ...
- github 最新项目快报
http://www.open-open.com/github/view/github2016-10-17.html
- Spark中的常用算子
更多有用的例子和算子讲解参见: http://homepage.cs.latrobe.edu.au/zhe/ZhenHeSparkRDDAPIExamples.html map是对每个元素操作, ma ...
- (转)Linux top命令的用法详细详解
原文:https://yq.aliyun.com/articles/399004?spm=a2c4e.11153940.blogcont399002.9.3a19f00aHOA3SH# 摘要: 首先介 ...
- (转)面向对象(深入)|python描述器详解
原文:https://zhuanlan.zhihu.com/p/32764345 https://www.cnblogs.com/aademeng/articles/7262645.html----- ...
- PHP:WampServer下如何安装多个版本的PHP、mysql、apache
作为Web开发人员,在机器上安装不同版本的php,apache和mysql有时是很有必要的. 今天,我在调试一套PHP程序的时候,该程序中使用的某些函数在低版本中无法使用,所以只能在搞个高版本的php ...
- 编写自己的SpringBoot-starter
前言 我们都知道可以使用SpringBoot快速的开发基于Spring框架的项目.由于围绕SpringBoot存在很多开箱即用的Starter依赖,使得我们在开发业务代码时能够非常方便的.不需要过多关 ...
- Intellij IDEA Spring Boot 项目Debug模式启动缓慢问题
问题 Intellij IDEA Spring Boot 项目Debug模式启动缓慢 环境 os: windows10 idea :2018.1 解决方法 去除所有断点就正常了,很诡异,原因未知.
- rubymine debug需要安装依赖
for ruby2.x gem install ruby-debug-ide --pre gem install debase --pregem install debugger2 --pre