以前写过一个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框架之工具类-分页类的封装的更多相关文章

  1. 自定义MVC框架之工具类-模型类

    截止目前已经改造了5个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 自定义MVC框架之工具类-文件上传类 自定义MVC框架之工具类-图像处理 ...

  2. 自定义MVC框架之工具类-图像处理类

    截止目前已经改造了4个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 自定义MVC框架之工具类-文件上传类 图像处理类: 1,图片加水印处理( ...

  3. 自定义MVC框架之工具类-文件上传类

    截止目前已经改造了3个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 该文件上传类功能如下: 1,允许定制上传的文件类型,文件mime信息,文 ...

  4. Java Web自定义MVC框架详解 (转)

    转自:http://blog.csdn.net/jackfrued/article/details/42774459 最近给学生讲Java Web,希望他们能够在学完这部分内容后自己实现一个MVC框架 ...

  5. 自定义MVC框架

    我们在学习自定义MVC框架的时候常常会听到Model1 ,Model2和MVC.那么什么是Model1 什么是Model2什么又是MVC呢? 什么是Model1? Model1就是一种纯jsp开发技术 ...

  6. Struts2 自定义MVC框架

    一.Model1与Model2: Model1:就是一种纯jsp开发技术,将业务逻辑代码和视图渲染代码杂糅在一起. Model2:Model2是在Model1的基础上,将业务逻辑的代码分离开来,单独形 ...

  7. 第一章 自定义MVC框架

    第一章  自定义MVC框架1.1 MVC模式设计    组成:Model:模型,用于数据和业务的处理          View :视图,用于数据的显示          Controller:控制器 ...

  8. c#自定义ORM框架---(泛型&反射&实体类扩展属性<附带通用增、删、查、改>)

    该教材主要是运用到泛型.反射和实体类扩展属性 步骤一.建立扩展属性类 实体类扩展属性要继承Attribute基类完成 [AttributeUsage(AttributeTargets.Property ...

  9. 二十七、CI框架之自己写分页类并加载(写分页还是有难度,搞了一整天)

    一.我们写好自己的分页代码,防止library目录中,带构造函数 二.在模型中,添加2个函数,一个是查询数据的条数,第二个是取出数据库中的数据 三.在控制中,写入相应的代码,如下: 四.在界面中,写入 ...

随机推荐

  1. MySQL 5.6不删空用户的影响

    目录 MySQL 5.6不删空用户的影响 问题 分析 测试 启动mysqld时没有加上--skip-name-resolve 启动mysqld时加上--skip-name-resolve 结论 MyS ...

  2. Linux - route & traceroute & ip

    route route - show / manipulate the IP routing table route 命令常用命令示例 #显示路由 route route -n # 不解析名字,快速显 ...

  3. POJ 2725

    #include <iostream> #include <string> #include <algorithm> #define MAXN 400005 usi ...

  4. .Net 站点跨域问题及解决方法

    一.什么是站点跨域 了解跨域之前, 先了解下什么同源策略?百度百科:同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功 ...

  5. c++的动态绑定和静态绑定

    为了支持c++的多态性,才用了动态绑定和静态绑定. 1.对象的静态类型:对象在声明时采用的类型.是在编译期确定的. 2.对象的动态类型:目前所指对象的声明.在运行期决定.对象的动态类型可以更改,但是静 ...

  6. gdb调试正在运行的程序

    1.ps aux | grep mxx.exe 查找可执行程序的进程id 2.gdb attach pid attach可执行程序的进程pid 3.continue/c 或者continue or c ...

  7. IdentityServer4之Clients、Scopes、Claims与Token关联

    IdentityServer4之Clients.Scopes.Claims与Token关联 参考 官方文档:client.identity_resource.api_resource:三类配置项介绍描 ...

  8. Error:fatal: Not a git repository (or any of the parent directories): .git

    在项目目录下执行git init命令. 大功告成.

  9. list string 互转

    List转字符串,用逗号隔开 List<string> list = new List<string>();list.Add("a");list.Add(& ...

  10. 【java初探】——格式化字符串

    String 类的静态方法format()方法用于创建格式化字符串,format()方法有两种重载形式: format(String fromat,Object...args) 该方法使用指定的格式字 ...