自定义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个函数,一个是查询数据的条数,第二个是取出数据库中的数据 三.在控制中,写入相应的代码,如下: 四.在界面中,写入 ...
随机推荐
- MySQL 5.6不删空用户的影响
目录 MySQL 5.6不删空用户的影响 问题 分析 测试 启动mysqld时没有加上--skip-name-resolve 启动mysqld时加上--skip-name-resolve 结论 MyS ...
- Linux - route & traceroute & ip
route route - show / manipulate the IP routing table route 命令常用命令示例 #显示路由 route route -n # 不解析名字,快速显 ...
- POJ 2725
#include <iostream> #include <string> #include <algorithm> #define MAXN 400005 usi ...
- .Net 站点跨域问题及解决方法
一.什么是站点跨域 了解跨域之前, 先了解下什么同源策略?百度百科:同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功 ...
- c++的动态绑定和静态绑定
为了支持c++的多态性,才用了动态绑定和静态绑定. 1.对象的静态类型:对象在声明时采用的类型.是在编译期确定的. 2.对象的动态类型:目前所指对象的声明.在运行期决定.对象的动态类型可以更改,但是静 ...
- gdb调试正在运行的程序
1.ps aux | grep mxx.exe 查找可执行程序的进程id 2.gdb attach pid attach可执行程序的进程pid 3.continue/c 或者continue or c ...
- IdentityServer4之Clients、Scopes、Claims与Token关联
IdentityServer4之Clients.Scopes.Claims与Token关联 参考 官方文档:client.identity_resource.api_resource:三类配置项介绍描 ...
- Error:fatal: Not a git repository (or any of the parent directories): .git
在项目目录下执行git init命令. 大功告成.
- list string 互转
List转字符串,用逗号隔开 List<string> list = new List<string>();list.Add("a");list.Add(& ...
- 【java初探】——格式化字符串
String 类的静态方法format()方法用于创建格式化字符串,format()方法有两种重载形式: format(String fromat,Object...args) 该方法使用指定的格式字 ...