过程化分页
一.创建分页显示出数据,然后建立分页页面
第一步:首先php部分引入配置文件和数据库连接。
<?php //引入配置文件config.php和数据库类mysql.php require 'config.php'; require 'mysql.php';
//**获取数据库数据 //实例化创建对象 $Mysql = Mysql::getMysql('ex_page'); //获取记录集fields字段,limit前十条,order用id倒序排序 $object = $Mysql->fields('id,password,create_time')->limit(0, 10)->order('id desc')->select(); ?>
第二步:HTML显示数据部分展现分页部分和CSS部分
<!doctype html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>分页类</title> <!--**********css部分--> <style type="text/css"> /*去掉ul,ol的小圆点,内边距,外边距*/ ul,ol { list-style: outside none none; margin: 0; padding: 0; } .page { clear:both; text-align: center; } .page ul { display: inline-block; padding: 10px 0; } .page li { width: 50px; height: 32px; float: left; } .page a { display: block; line-height: 32px; background-color: #eee; color: #777; } .page a.active, .page a:hover { background-color: #00bfff; font-weight: bold; color: #fff; } .page .first a { border-bottom-left-radius: 4px; border-top-left-radius: 4px; } .page .last a { border-bottom-right-radius: 4px; border-top-right-radius: 4px; } </style> </head> <body> <br><br><br><br>
<!--******外边框和里面内容部分--> <!--边框线宽度1,长度800,居中--> <table border="1" width="800" align="center"> <tr> <th>编号</th> <th>密码</th> <th>创建时间</th> </tr> <!--$object和$obj做循环--> <?php foreach ($object as $key=>$obj) :?> <tr> <td align="center"><?=$obj->id?></td> <td align="center"><?=$obj->password?></td> <td align="center"><?=$obj->create_time?></td> </tr> <?php endforeach;?> </table> <!--****分页部分--> <div class="page"> <ul> <li><a href="javascript:void(0)" class="active">1</a></li> <li><a href="javascript:void(0)">2</a></li> <li><a href="javascript:void(0)">3</a></li> <li><a href="javascript:void(0)">4</a></li> </ul> </div> </body> </html>
第三步:创建分页展示出数据建立分页页面外部1.php调用最终代码:
<?php //引入配置文件和数据库类 require 'config.php'; require 'mysql.php'; //实例化创建对象 $Mysql = Mysql::getMysql('ex_page'); //获取记录集 $object = $Mysql->fields('id,password,create_time')->limit(0, 10)->order('id desc')->select(); ?> <!doctype html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>分页类</title> <!--**********css部分--> <style type="text/css"> ul,ol { list-style: outside none none; margin: 0; padding: 0; } .page { clear:both; text-align: center; } .page ul { display: inline-block; padding: 10px 0; } .page li { width: 50px; height: 32px; float: left; } .page a { display: block; line-height: 32px; background-color: #eee; color: #777; } .page a.active, .page a:hover { background-color: #00bfff; font-weight: bold; color: #fff; } .page .first a { border-bottom-left-radius: 4px; border-top-left-radius: 4px; } .page .last a { border-bottom-right-radius: 4px; border-top-right-radius: 4px; } </style> </head> <body> <br><br><br><br> <!--******外边框和里面内容部分--> <!--边框线宽度1,长度800,居中--> <table border="1" width="800" align="center"> <tr> <th>编号</th> <th>密码</th> <th>创建时间</th> </tr> <!--$object和$obj做循环--> <?php foreach ($object as $key=>$obj) :?> <tr> <td align="center"><?=$obj->id?></td> <td align="center"><?=$obj->password?></td> <td align="center"><?=$obj->create_time?></td> </tr> <?php endforeach;?> </table> <!--****分页部分--> <div class="page"> <ul> <li><a href="javascript:void(0)" class="active">1</a></li> <li><a href="javascript:void(0)">2</a></li> <li><a href="javascript:void(0)">3</a></li> <li><a href="javascript:void(0)">4</a></li> </ul> </div> </body> </html>
1.php调用结果:

二.创建分页,第二步将过程化的分页模式实现出来
第一步:首先创建php部分面向过程化的分成方式
<?php //每页的条数 $pageSize = 10; //当前页码 $page = 1; //总页码初始为1 $pageAbsolute = 1; //先判断page是否存在 if (isset($_GET['page'])) { //将得到的页码赋值给变量 $page = $_GET['page']; //如果页面值为空或小于零或不是数字,则默认为1 if (empty($page) || $page <= 0 || !is_numeric($page)) { $page = 1; } else { $page = intval($page); } } //实例化创建对象 $Mysql = Mysql::getMysql('ex_page'); //获取数据总量 $Mysql->select(); //获取里面计算的值 $total = $Mysql->count(); //得到总页码 if ($total != 0) { $pageAbsolute = ceil($total / $pageSize); } //超过页码判断 if ($page > $pageAbsolute) { $page = $pageAbsolute; } //计算当前页码在从第几条开始 $num = ($page - 1) * $pageSize; //获取记录集 $object = $Mysql->fields('id,password,create_time')->limit($num, $pageSize)->order('id desc')->select(); ?>
第二步:页面HTML部分-页码编排方式
<!--页码编排方式部分--> <div class="page"> <ul> <?php //上一页 if ($page == 1) { echo '<li class="first"><a href="javascript:void(0)"><</a></li>'; } else { echo '<li class="first"><a href="1.php?page='.($page - 1).'"><</a></li>'; } //循环分页页码 for ($i = 1; $i <= $pageAbsolute; $i++) { if ($page == $i) { echo '<li><a href="javascript:void(0)" class="active">'.$i.'</a></li>'; } else { echo '<li><a href="1.php?page='.$i.'">'.$i.'</a></li>'; } } //下一页 if ($page == $pageAbsolute) { echo '<li class="last"><a href="javascript:void(0)">></a></li>'; } else { echo '<li class="last"><a href="1.php?page='.($page + 1).'">></a></li>'; } ?> </ul> </div>
第三步:将过程化的分页模式实现出来1.php调用最终代码:
<?php //引入配置文件和数据库类 require 'config.php'; require 'mysql.php'; //每页的条数 $pageSize = 10; //当前页码 $page = 1; //总页码初始为1 $pageAbsolute = 1; //先判断page是否存在 if (isset($_GET['page'])) { //将得到的页码赋值给变量 $page = $_GET['page']; //如果页面值为空或小于零或不是数字,则默认为1 if (empty($page) || $page <= 0 || !is_numeric($page)) { $page = 1; } else { $page = intval($page); } } //实例化创建对象 $Mysql = Mysql::getMysql('ex_page'); //获取数据总量 $Mysql->select(); //获取里面计算的值 $total = $Mysql->count(); //得到总页码 if ($total != 0) { $pageAbsolute = ceil($total / $pageSize); } //超过页码判断 if ($page > $pageAbsolute) { $page = $pageAbsolute; } //计算当前页码在从第几条开始 $num = ($page - 1) * $pageSize; //获取记录集 $object = $Mysql->fields('id,password,create_time')->limit($num, $pageSize)->order('id desc')->select(); ?> <!doctype html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>分页类</title> <!--************css部分********************--> <style type="text/css"> ul,ol { list-style: outside none none; margin: 0; padding: 0; } .page { clear:both; text-align: center; } .page ul { display: inline-block; padding: 10px 0; } .page li { width: 50px; height: 32px; float: left; } .page a { display: block; line-height: 32px; background-color: #eee; color: #777; } .page a.active, .page a:hover { background-color: #00bfff; font-weight: bold; color: #fff; } .page .first a { border-bottom-left-radius: 4px; border-top-left-radius: 4px; } .page .last a { border-bottom-right-radius: 4px; border-top-right-radius: 4px; } </style> </head> <body> <br><br><br><br> <!--****************外边框和里面内容部分********************--> <!--边框线宽度1,长度800,居中--> <table border="1" width="800" align="center"> <tr> <th>编号</th> <th>密码</th> <th>创建时间</th> </tr> <!--$object和$obj做循环--> <?php foreach ($object as $key=>$obj) :?> <tr> <td align="center"><?=$obj->id?></td> <td align="center"><?=$obj->password?></td> <td align="center"><?=$obj->create_time?></td> </tr> <?php endforeach;?> </table> <!--*****************分页部分***************************--> <div class="page"> <ul> <?php //上一页 if ($page == 1) { echo '<li class="first"><a href="javascript:void(0)"><</a></li>'; } else { echo '<li class="first"><a href="1.php?page='.($page - 1).'"><</a></li>'; } //循环分页页码 for ($i = 1; $i <= $pageAbsolute; $i++) { if ($page == $i) { echo '<li><a href="javascript:void(0)" class="active">'.$i.'</a></li>'; } else { echo '<li><a href="1.php?page='.$i.'">'.$i.'</a></li>'; } } //下一页 if ($page == $pageAbsolute) { echo '<li class="last"><a href="javascript:void(0)">></a></li>'; } else { echo '<li class="last"><a href="1.php?page='.($page + 1).'">></a></li>'; } ?> </ul> </div> </body> </html>
1.php调用结果:

创建分页类
一.创建分页类不需要对外当接口使用,并且也不需要继承
第一步:先将基础page.php分页类构建起来
<!--分页类,不需要对外当接口使用,并且也不需要继承--> <?php class Page { //*************属性部分*********** //总记录数 private $total; //每页显示条数 private $pageSize; //分页limit private $limit; //当前页面 private $page; //总页码 private $pageAbsolute; //地址栏 private $url; //************构造方法初始化************ //$total总记录数和$pageSize分页数要从mysql传进来 public function __construct($total, $pageSize) { //总记录数,如果获取不到数就显示一条 $this->total = $total ? $total : 1; //分页数量 $this->pageSize = $pageSize; //总页码 $this->pageAbsolute = ceil($this->total / $this->pageSize); //当前页面 $this->page = $this->setPage(); //分页Limit $this->limit = ($this->page - 1) * $this->pageSize; //地址栏 $this->url = $this->setUrl(); //echo $this->total; //echo $this->pageSize; //echo $this->pageAbsolute; //echo $this->page; //echo $this->limit; //echo $this->url; } //*************方法部分**************** //内部自我实例化,静态方法 public static function getObject($total, $pageSize = 10) { return new self($total, $pageSize); } //对外返回一些数据获取limit public function getLimit() { return $this->limit; } //对外返回一些数据获取pageSize public function getPageSize() { return $this->pageSize; }
//***基础分页类 //获取当前页面page private function setPage() { //默认第一页 $page = 1; //先判断page 是否存在 if (isset($_GET['page'])) { //将得到的页码赋值给变量 $page = $_GET['page']; //如果页面值为空或小于零或不是数字,则默认为1 if (empty($page) || $page <= 0 || !is_numeric($page)) { $page = 1; } else { $page = intval($page); } } //在setPage()方法增加判断得到总页码 if ($this->total != 0) { $this->pageAbsolute = ceil($this->total / $this->pageSize); } //在setPage()方法增加判断超过页码判断 if ($page > $this->pageAbsolute) { $page = $this->pageAbsolute; } //返回page return $page; } //获取地址,主要是除了page的其它参数,防止总记录数不对应 private function setUrl() { //获取路径地址 $url = $_SERVER['REQUEST_URI']; //解析地址 $parse = parse_url($url); //判断是否存在query元素是否存在 if (isset($parse['query'])) { //获取query元素变成独立数组 parse_str($parse['query'], $query); //移出数组中的page unset($query['page']); //合并成新的地址 $url = $parse['path'].'?'.http_build_query($query); } return $url; } }
第二步:逻辑页2.php测试代码
<?php //引入配置文件和数据库类 require 'config.php'; require 'mysql.php'; //引入分页类 require 'page.php'; //******测试分页数据 //实例化创建对象 $Mysql = Mysql::getMysql('ex_page'); //获取数据总量 $Mysql->select(); $total = $Mysql->count(); //实例化分页类 $Page = Page::getObject($total); //获取记录集 $object = $Mysql->fields('id,password,create_time') ->limit($Page->getLimit(), $Page->getPageSize()) ->order('id desc') ->select(); ?> <!doctype html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>分页类</title> </head> <body> <br><br><br><br> <table border="1" width="800" align="center"> <tr> <th>编号</th> <th>密码</th> <th>创建时间</th> </tr> <?php foreach ($object as $key=>$obj) :?> <tr> <td align="center"><?=$obj->id?></td> <td align="center"><?=$obj->password?></td> <td align="center"><?=$obj->create_time?></td> </tr> <?php endforeach;?> </table> <br> </body> </html>
http://192.168.3.62/Example/Page/2.php?page=11在逻辑页面中测试结果:

分页页码设置
1.添加php部分数字目录
2.添加php分页信息
3.获取URL,加上?号
4.php部分添加上下翻页设置
<?php //分页类 class Page { //总记录数 private $total; //每页显示条数 private $pageSize; //分页limit private $limit; //当前页面 private $page; //总页码 private $pageAbsolute; //地址栏 private $url; //数字分页两边的个数 private $bothNum; //构造方法初始化 public function __construct($total, $pageSize) { //总记录数 $this->total = $total ? $total : 1; //分页数量 $this->pageSize = $pageSize; //总页码 $this->pageAbsolute = ceil($this->total / $this->pageSize); //当前页面 $this->page = $this->setPage(); //分页Limit $this->limit = ($this->page - 1) * $this->pageSize; //地址栏 $this->url = $this->setUrl(); //数字分页两边的个数 $this->bothNum = 3; } //内部自我实例化,静态方法 public static function getObject($total, $pageSize = 10) { return new self($total, $pageSize); } //获取limit public function getLimit() { return $this->limit; } //获取pageSize public function getPageSize() { return $this->pageSize; } //设置当前页面page private function setPage() { //默认第一页 $page = 1; //先判断page 是否存在 if (isset($_GET['page'])) { //将得到的页码赋值给变量 $page = $_GET['page']; //如果页面值为空或小于零或不是数字,则默认为1 if (empty($page) || $page <= 0 || !is_numeric($page)) { $page = 1; } else { $page = intval($page); } } //得到总页码 if ($this->total != 0) { $this->pageAbsolute = ceil($this->total / $this->pageSize); } //超过页码判断 if ($page > $this->pageAbsolute) { $page = $this->pageAbsolute; } //返回page return $page; } //获取地址,主要是除了page的其它参数,防止总记录数不对应 private function setUrl() { //获取路径地址加上?号 $url = $_SERVER['REQUEST_URI'].'?'; //解析地址 $parse = parse_url($url); //判断是否存在query 元素是否存在 if (isset($parse['query'])) { //获取query 元素变成独立数组 parse_str($parse['query'], $query); //移出数组中的page unset($query['page']); //合并成新的地址 $url = $parse['path'].'?'.http_build_query($query); } return $url; } //数字目录 private function pageList() { //初始化变量 $pageList = ''; //起始1 按钮判断 if ($this->page != 1) { $pageList .= '<li><a href="'.$this->url.'&page=1">1</a></li>'; } //省略号判断 if (($this->page - $this->bothNum) > 1) { $pageList .= '<li><a href="javascript:void(0)">...</a></li>'; } //循环当前页左边的页面 for ($i = $this->page - $this->bothNum; $i < $this->page; $i ++) { //小于0 的不显示 if ($i <=1) continue; //显示左边列表 $pageList .= '<li><a href="'.$this->url.'&page='.$i.'">'.$i.'</a></li>'; } //输出当前页页码 $pageList .= '<li><a href="javascript:void(0)" class="active">'.$this->page.'</a></li>'; //循环当前页右边的页面 for ($i = $this->page + 1; $i <= $this->page + $this->bothNum; $i ++) { //如果大于末尾退出 if ($i > $this->pageAbsolute - 1) break; $pageList .= '<li><a href="'.$this->url.'&page='.$i.'">'.$i.'</a></li>'; } //省略号判断 if ($i <= $this->pageAbsolute - 1) { $pageList .= '<li><a href="javascript:void(0)">...</a></li>'; } //末尾数字按钮判断 if ($this->page != $this->pageAbsolute) { $pageList .= '<li><a href="'.$this->url.'&page='.$this->pageAbsolute.'">'.$this->pageAbsolute.'</a></li>'; } //返回 return $pageList; } //####上下翻页设置 //上一页 private function prev() { if ($this->page == 1) { return '<li><a href="javascript:void(0)"><</a></li>'; } return '<li><a href="'.$this->url.'&page='.($this->page - 1).'"><</a></li>'; } //下一页 private function next() { if ($this->page == $this->pageAbsolute) { return '<li><a href="javascript:void(0)">></a></li>'; } return '<li><a href="'.$this->url.'&page='.($this->page + 1).'">></a></li>'; } //上bothNum页 private function prevNum() { if (($this->page - $this->bothNum) < 1) { return '<li><a href="javascript:void(0)"><<</a></li>'; } return '<li><a href="'.$this->url.'&page='.($this->page - $this->bothNum).'"><<</a></li>'; } //下bothNum页 private function nextNum() { if (($this->page + $this->bothNum) > $this->pageAbsolute) { return '<li><a href="javascript:void(0)">>></a></li>'; } return '<li><a href="'.$this->url.'&page='.($this->page + $this->bothNum).'">>></a></li>'; } //分页信息 public function showPage() { $page = ''; $page .= $this->prev(); $page .= $this->prevNum(); $page .= $this->pageList(); $page .= $this->nextNum(); $page .= $this->next(); return $page; } }
逻辑页2.php测试:
<?php //引入配置文件和数据库类 require 'config.php'; require 'mysql.php'; //引入分页类 require 'page.php'; //实例化创建对象 $Mysql = Mysql::getMysql('ex_page'); //获取数据总量 $Mysql->select(); $total = $Mysql->count(); //实例化分页类 $Page = Page::getObject($total); //获取记录集 $object = $Mysql->fields('id,password,create_time') ->limit($Page->getLimit(), $Page->getPageSize()) ->order('id desc') ->select(); ?> <!doctype html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>分页类</title> <style type="text/css"> ul,ol { list-style: outside none none; margin: 0; padding: 0; } .page { clear:both; text-align: center; } .page ul { display: inline-block; padding: 10px 0; } .page li { width: 50px; height: 32px; float: left; } .page a { display: block; line-height: 32px; background-color: #eee; color: #777; } .page a.active, .page a:hover { background-color: #00bfff; font-weight: bold; color: #fff; } .page .first a { border-bottom-left-radius: 4px; border-top-left-radius: 4px; } .page .last a { border-bottom-right-radius: 4px; border-top-right-radius: 4px; } </style> </head> <body> <br><br><br><br> <table border="1" width="800" align="center"> <tr> <th>编号</th> <th>密码</th> <th>创建时间</th> </tr> <?php foreach ($object as $key=>$obj) :?> <tr> <td align="center"><?=$obj->id?></td> <td align="center"><?=$obj->password?></td> <td align="center"><?=$obj->create_time?></td> </tr> <?php endforeach;?> </table> <br> <div class="page"> <ul> <?=$Page->showPage()?> </ul> </div> </body> </html>
最终测试2.php结果

浙公网安备 33010602011771号