php实现分页显示功能

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=2
class 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;?>



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值