同验证码类,分页也是在个人博客,论坛等网站中不可缺少的方式,通过分页可以在一个界面展示固定条数的数据,而不至于将所有数据全部罗列到一起,实现分页的原理其实就是对数据库查询输出加了一个limit限制,接下来我们就开始准备今天分页类的逻辑 #### 逻辑准备 > 实现分页,我们需要获取准备以下属性和方法
PHP 属性{ 数据总条数 每一页显示的条数 计算出总页数 获取当前是第几页 显示上一页 显示下一页 显示首页 显示尾页 每一页的url 数据限制limit } 方法{ 构造函数 计算总页数 获取当前页 获取上一页 获取下一页 获取首页 获取尾页 获取当前页面url 获取上一页url 获取下一页url 获取首页url 获取尾页irl 生成limit记录 重新生成url地址 显示分页链接,显示分页情况 }
#### 根据上面的逻辑,下一步将文字转换为代码 首先,我们先声明一个Page类,按照逻辑进行属性声明,并且进行初始化php class Page { //记录总条数 protected $total; //每页显示几条 protected $nums; //总页数 protected $totalPages; //当前页码 protected $currentPage; //上一页页码 protected $prevPage; //下一页页码 protected $nextPage; //首页页码 protected $firstPage; //尾页页码 protected $endPage; //url protected $url; //limit,传到数据库的limit protected $limit; //构造函数,初始化 public function __construct($total, $nums) { $this->total = $total; $this->nums = $nums; $this->totalPages = $this->getTotalPages; $this->currentPage = $this->getCurrentPage; $this->getPrevPage; $this->getNextPage; $this->getFirstPage; $this->getEndPage; $this->getUrl; } }
接下来我们开始完善方法 - 计算总页数php protected funciton getTotalPages { return ceil($this->total / $this->$nums); }
- 获取当前页码php protected function getCurentPage { //判断如果存在page参数并且page大于0,返回实际值,否则返回1 if(isset($_GET['page']) && intval($_GET['page']) > 0) { $this->currentPage = intval($_GET['page']); } else { $this->currentPage = 1; } return $this->currentPage; }
- 获取上一页php protected function getPrevPage { $this->prevPage = $this->currentPage - 1; if($this->prevPage prevPage = 1; } return $this->prevPage; }
- 获取下一页php protected function getNextPage { $this->nextPage = $this->currentPage + 1; return $this->nextPage; }
- 获取首页php protected function getFirstPage { $this->firstPage = 1; return $this->firstPage; }
- 获取尾页PHP protected function getEndPage { $this->endPage = $this->totalPages; return $this->endPage; }
#### 接下来开始拼接每个页码的url - 获取当前页的urlphp protected function getCurrentUrl { return $this->url.'$page='.$this->currentPage; }
- 获取前一页的urlphp protected function getPrevUrl { return $this->url.'&page='.$this->prevPage; }
- 获取下一页的urlphp protected function getNextUrl { return $this->url.'&page='.$this->nextPage; }
- 获取首页的urlphp protected function getFirstUrl { return $this->url.'&page='.$this->firstPage; }
- 获取尾页的urlphp protected function getEndUrl { return $this->url.'&page='.$this->endPage; }
#### 生成limit记录PHP public function limit { return ($this->currentPage - 1) * $this->nums.','.$this->nums; }
#### 生成url地址php public function getUrl { //获取当前页面的文件位置 $url = $_SERVER['REQUEST_URI']; //将url参数解析成数组 $parse = parse_url($url); //获得域名地址 $path = $parse['path']; //获取参数 $query = isset($parse['query']) ? $parse['query'] : false; //如果有参数,把page这个参数先给干掉,因为我们要重新拼接 if($query) { parse_str($query,$query); //干掉page参数,保留其他参数 unset($query['page']); //http_build_query拼将参数拼接成请求 $uri = $parse['path'].'?'.http_build_query($query); } else { $uri = rtrim($parse['path'],'?').'?'; } //智能识别https和http协议和端口号 $protocal = (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) ? 'https://' : 'http://'; switch ($_SERVER['SERVER_PORT']) { case 80: case 443: $uri = $protocal.$_SERVER['SERVER_NAME'].$uri; break; default: $uri = $protocal.$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$uri; break; } $this->url = $uri; }
> 到此所有的逻辑方面都已经处理完啦,接下来的render函数用来显示分页的链接PHP public function render { return array( ['first' => $this->getFirstUrl()], ['prev' => $this->getPrevUrl()], ['current' => $this->getCurrentUrl()], ['next' => $this->getNextUrl()], ['end' => $this->getEndUrl()] ); }
### 哦也,就这么愉快的结束啦 使用方法如下PHP //new一个对象 $page = new Page(102,10); //打印出来上页/下页/首页/尾页……的url var_dump($page->render);
#### 后记 ---php $url = http://www.jiazhua.com/OOP/Page.class.php?page=1 parse_url($url):将url的文件路径和参数分开并保存到数组中 .......................................... . array (size=2) .'path' => string '/OOP/Page.class.php' (length=36) .'query' => string 'page=1' (length=6) .......................................... ... $query = "page=1&num=2&sex=男" parse_str($query,$query):将带参数的字符串解析成数组 .......................................... . array . 'page' => 1 .'num' => 2 .'sex' => '男' .......................................... ... $query = ['num'=>1,'sex'=>'男'] http_build_query($query):使用给出的关联(或下标)数组生成一个经过 URL-encode 的请求字符串。 ......................................... . string ."num=1&&sex='男'" ......................................... ... $_SERVER['SERVER_PORT'] 获取端口号 $_SERVER['SERVER_NAME'] 当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定
本文由甲爪cpa广告联盟整理编辑!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。