php实现分页显示功能

来源:互联网 发布:网络体系结构的定义 编辑:程序博客网 时间:2024/06/05 16:59

Sql公式: select * from cz_goods_type order by type_id limit 1,2;

Offset:偏移量

Pagesize:每页显示的条数

其中offset是在变化的,和当前所在页数(current)、每页显示条数有关(pagesize)

Offset=(current-1) * pagesize

最终公式:select * from cz_goods_type order by type_id limit (current-1)*pagesize, pagesize;

 

分页步骤:

1、查询数据库获取记录

2、使用分页类输出分页信息

分页类只输出分页信息,不负责查询数据库, 分页类:

<?php//分页类,完成分页信息的输出//共有 3 条记录,每页显示 2 条记录, 当前为 1/2 [首页] [上一页] [下一页] [末页]//index.php?p=admin&c=brand&a=index&page=2class Page{//属性private $total;       //总的记录数private $pagesize;    //每页显示的记录数private $currernt;    //当前页数private $pagenum;     //总的页数private $first;       //首页超链接private $last;        //末页超链接private $prev;        //上一页超链接private $next;        //下一页超链接private $url;         //超链接的地址//构造方法/** *@param script string 超链接地址的文件名,不带任何参数 *@param params array 超链接地址的参数 */function __construct($total,$pagesize,$current,$script,$params=array()){$this->total = $total;$this->pagesize = $pagesize;$this->current = $current;$this->pagenum = ceil( $total / $pagesize );//index.php?p=admin&c=brand&a=index&page=2//new分页类 new Page(10,3,2,'index.php',array('p'=>'admin','c'=>'brand','a'=>'index'))$temp = array();foreach ($params as $k =>$v){//首先要形成 p=admin c=brand a=index 的内容,以数组的形式保存$temp[] = "$k=$v";}$str = implode("&", $temp); // p=admin&c=brand&a=index$this->url = "$script?{$str}&page="; //由于上页,下页,首页,末页的page是不同的,不能指定$this->first = $this->getFirst(); //得到首页超链接$this->last = $this->getLast();$this->prev = $this->getPrev();$this->next = $this->getNext();}//获得首页超链接private function getFirst(){//判断当前页是否为第一页if ($this->current == 1) {// 当前页是第一页return "[首页]";}else {//不是第一页return "<a href='{$this->url}1'>[首页]</a>";}}//获得末页超链接private function getLast(){//判断是否为最后一页if ($this->current == $this->pagenum ){return "[末页]";} else {return "<a href='{$this->url}{$this->pagenum}'>[末页]</a>";}}//获得上一页超链接private function getPrev(){//判断是否为第一页if ($this->current == 1){return "[上一页]";} else {return "<a href='{$this->url}".($this->current - 1)."'>[上一页]</a>";}}//获得下一页超链接private function getNext(){//判断是否为末页if ($this->current == $this->pagenum){return "[下一页]";} else {return "<a href='{$this->url}".($this->current + 1)."'>[下一页]</a>";}}//主方法,输出分页信息public function showPage(){if ($this->pagenum >= 1){return "共有 {$this->total} 条记录,每页显示 {$this->pagesize} 条记录,当前为 {$this->current}/{$this->pagenum} {$this->first} {$this->prev} {$this->next} {$this->last}";} else {return "";}}}

 

使用方法:

Model中的代码:

//分页获取商品类型数据public function getPageTypes($offset, $pagesize){$sql = "select * from {$this->table} order by type_id limit $offset, $pagesize";return $this->db->getAll($sql);}

 

Controller中使用的代码:

public function indexAction(){//1.获取所有的商品类型$typeModel = new TypeModel("goods_type");//分页输出//获取当前分页,通过url的参数(page)$current = isset($_GET['page']) ? $_GET['page'] : 1;//获取每页显示的记录数$pagesize = 2;$offset = ($current - 1) * $pagesize;$types = $typeModel->getPageTypes($offset, $pagesize); //获取总的记录数$where = "";  //此条件为空$total = $typeModel->total($where);$this->library("Page");$page = new Page($total, $pagesize, $current, 'index.php', array('p'=>'admin', 'c'=>'type', 'a'=>'index'));$pageinfo = $page->showPage();//2.展示到视图include CUR_VIEW_PATH . "goods_type_list.html";}

 

View中用的方法:

<?php echo $pageinfo;?>



原创粉丝点击