以前写过一个MVC框架,封装的有点low,经过一段时间的沉淀,打算重新改造下,之前这篇文章封装过一个验证码类。

这次重新改造MVC有几个很大的收获

>全部代码都是用Ubuntu+Vim编写,以前都是windows上开发,这次彻底迷上Ubuntu Linux

>裸装php,用php自带的服务器解释执行php,缺哪个扩展就装哪个,最后通过整个MVC框架的开发,把Lamp所有的常用配置与细节搞懂

>通过扩展安装,学习扩展开发与php底层源码分析

总之,终于感觉层次又提升了不少。

分页类代码:

  1. <?php
  2.  
  3. class Page {
  4. //每页显示的条目
  5. protected $pageSize;
  6. //总记录数
  7. protected $totalRecord;
  8. //当前页
  9. protected $p;
  10. //总页数
  11. protected $totalPage;
  12. protected $url;
  13.  
  14. public function __construct( $_pageSize, $_totalRecord ){
  15. $this->pageSize = $_pageSize;
  16. $this->totalRecord = $_totalRecord;
  17. $this->totalPage = ceil( $this->totalRecord / $this->pageSize );
  18. $this->p = $this->getCurPage();
  19. $this->url = $this->getUrl();
  20. }
  21.  
  22. public function setUrl( $p ){
  23. if( strstr( $this->url, '?' ) ) {
  24. //url中有参数
  25. $url = $this->url . '&p=' . $p;
  26. }else {
  27. //url中没有参数
  28. $url = $this->url . '?p=' . $p;
  29. }
  30. return $url;
  31. }
  32.  
  33. //首页
  34. public function firstPage(){
  35. return $this->setUrl( 1 );
  36. }
  37.  
  38. //末页
  39. public function lastPage(){
  40. return $this->setUrl( $this->totalPage );
  41. }
  42.  
  43. //上一页
  44. public function prevPage(){
  45. if( $this->p - 1 <= 0 ) {
  46. $prevPage = $this->p;
  47. }else {
  48. $prevPage = $this->p - 1;
  49. }
  50. return $this->setUrl( $prevPage );
  51. }
  52.  
  53. //下一页
  54. public function nextPage(){
  55. if( $this->p + 1 > $this->totalPage ) {
  56. $nextPage = $this->p;
  57. }else {
  58. $nextPage = $this->p + 1;
  59. }
  60. return $this->setUrl( $nextPage );
  61. }
  62.  
  63. //得到当前的页码
  64. public function getCurPage(){
  65. $curPage = intval( $_GET['p'] );
  66. if ( empty( $curPage ) ) {
  67. $curPage = 1;
  68. }else if ( $curPage > $this->totalPage ) {
  69. $curPage = $this->totalPage;
  70. }else if ( $curPage < 0 ){
  71. $curPage = 1;
  72. }
  73. return $curPage;
  74. }
  75.  
  76. //拼接url
  77. public function getUrl(){
  78. $protocol = strtolower( array_shift( explode( '/', $_SERVER['SERVER_PROTOCOL'] ) ) );
  79. $host = $_SERVER['SERVER_NAME'];
  80. $port = $_SERVER['SERVER_PORT'];
  81. $uri = $_SERVER['REQUEST_URI'];
  82. $uriArr = parse_url( $uri );
  83. $path = $uriArr['path'];
  84. if( !empty( $uriArr['query'] ) ) {
  85. //url中的query字符转数组
  86. parse_str( $uriArr['query'], $args );
  87. //清除原来的分页参数p
  88. if( isset( $args['p'] ) ){
  89. unset( $args['p'] );
  90. }
  91. //参数重新拼接成字符串
  92. $queryString = http_build_query( $args );
  93. //字符串如果不止一个p参数,把那些参数拼接在path的后面
  94. if ( !empty( $queryString ) ){
  95. $path .= '?' . $queryString;
  96. }
  97. }
  98. return $protocol . '://' . $host . ':' . $port . $path;
  99. }
  100.  
  101. public function render(){
  102. return [
  103. 'first' => $this->firstPage(),
  104. 'last' => $this->lastPage(),
  105. 'prev' => $this->prevPage(),
  106. 'next' => $this->nextPage()
  107. ];
  108. }
  109.  
  110. public function limit(){
  111. $offset = ( $this->p - 1 ) * $this->pageSize;
  112. return $offset . ',' . $this->pageSize;
  113. }
  114. }
  115.  
  116. $page = new Page( 5, 11 );
  117. //echo $page->getCurPage();
  118. //echo $page->getUrl();
  119. print_r( $page->render() );
  120.  
  121. ?>

自定义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. JavaScript基础(3)-JS中的面向对象、定时器、BOM、位置信息

    一.创建对象的几种常用方式. 1.使用Object或对象字面量创建对象: a.使用Object()内置的构造函数来创建对象,例如: var student = new Object(); // 创建一 ...

  2. spring cloud学习(六) 配置中心-自动更新

    上一篇学习了spring cloud config的基本使用,但发现有个问题,就是每次更改配置后,都需要重启服务才能更新配置,这样肯定是不行的.在上网查资料了解后,spring cloud支持通过AM ...

  3. 一次对路边饮用水RFID供应机的跑路玩法

    "如何成为一个合格的硬件白帽子? 答案: 一个有聪明大脑的你 要有归纳类比和善于用GOOGLE的能力(百度?放弃吧) 善于翻阅和查询相关开发文档和强大的跑路能力." WARNING ...

  4. linux 时间相关

    CentOS7 正确修改时区方法 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

  5. Java零基础教程(二)基础语法

    Java 基础语法 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如 ...

  6. MATLAB入门(一)数组

     特殊变量: 数组的创建: %% 数组的生成(带:不在命令行显示结果) x= rand() ; %随机生成3*3的矩阵,矩阵数的值在[,] x(:,::); %取所有行,(从第1列开始:步长为2:到第 ...

  7. opencv2函数学习之flip:实现图像翻转

    在opencv2中,flip函数用来进行图片的翻转,包括水平翻转,垂直翻转,以及水平垂直翻转. void flip(const Mat& src, Mat& dst, int flip ...

  8. configure: error: You need a C++ compiler for C++ support.[系统缺少c++环境]

    一.错误configure: error: You need a C++ compiler for C++ support.二.安装c++ compiler情况1.当您的服务器能链接网络时候[联网安装 ...

  9. 执行shell脚本的四种方式(转)

    原文网址:https://www.jb51.net/article/53924.htm 这篇文章主要介绍了Linux中执行shell脚本的4种方法,即总结在Linux中运行shell脚本的4种方法. ...

  10. JavaSE-序列化和反序列化

    什么是序列化,什么时候要进行序列化? 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,将数据分解成字节流,以便存储在文件中或在网络上传输. 我们在对java对象进行IO流操作 ...