欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

自定义MVC框架之工具类-分页类的封装

程序员文章站 2023-12-31 17:58:16
以前写过一个MVC框架,封装的有点low,经过一段时间的沉淀,打算重新改造下,之前这篇文章封装过一个验证码类。 这次重新改造MVC有几个很大的收获 >全部代码都是用Ubuntu+Vim编写,以前都是windows上开发,这次彻底迷上Ubuntu Linux >裸装php,用php自带的服务器解释执行 ......

以前写过一个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 ?>

 

上一篇:

下一篇: