|
本帖最后由 kinwyb 于 2013-5-30 11:19 编辑
直接写的一个简单的分页模型
主要功能是传入一个查询数组,进行分页返回一个分页后的数组,返回的数组包括,上一页,下一页,总数据条数,分页页数,当前页的内容。
PHP复制代码
class Page_model extends CI_model
{
//private私有只能在类内部使用,不能直接在外部调用
private $nowpage; //当前页面
private $uppage; //上一页
private $downpage; //下一页
private $pagearray; //分页数组
private $row; //数据记录条数
private $pagerow; //每页条数
private $pageall=1; //总页数
private $pro; //页码条数
private $out=array("where","like");
private $get;
function __construct ()
{
parent ::__construct ();
$this->load->database();
}
/**
* 分页开始方法
* @param unknown_type $sql SQL语句
* @param unknown_type $nowpage 当前页
* @param unknown_type $pagerow 每页条数
*/
public function pagestart ($sql,$nowpage=1,$pagerow=10,$pro=5)
{
$this->pro=$pro;
$nowpage>1? $this->nowpage=$nowpage:$this->nowpage=1;
$this->pagerow=$pagerow;
if(empty($sql['get']))
return false;
else
{
$this->get=$sql['get'];
unset($sql['get']);
}
foreach($sql as $key => $value)
{
if($key =='join')
foreach($sql[$key] as $value)
call_user_func_array(array($this->db,$key),$value);
elseif(is_array($value) AND !in_array($key,$this->out))
call_user_func_array(array($this->db,$key),$value);
else
$this->db->$key($value);
}
$this->row=$this->db->get($this->get)->num_rows();
$this->_page_num ();
$this->_pagenow ($sql);
$this->pagearray['allrow']=$this->row;
return $this->pagearray;
}
/**_page_func()函数用于输出分页页数
* @param $rows数据条数
* @param $page_l每页数据条数
* @return $_page_num页数
*/
private function _page_num ()
{
//数据页数
/*ceil -- 进一法取整
float ceil ( float value )
返回不小于 value 的下一个整数,value 如果有小数部分则进一位。
*/
if($this->row>0)
$this->pageall=ceil($this->row/$this->pagerow);
if($this->nowpage>$this->pageall)
$this->nowpage=$this->pageall;
}
/**
* 分页主方法
*/
private function _pagenow ($sql)
{
$start=($this->nowpage-1)*$this->pagerow;
$this->db->limit($this->pagerow,$start);
foreach($sql as $key => $value)
{
if($key =='join')
foreach($sql[$key] as $value)
call_user_func_array(array($this->db,$key),$value);
elseif(is_array($value) AND !in_array($key,$this->out))
call_user_func_array(array($this->db,$key),$value);
else
$this->db->$key($value);
}
$this->pagearray['row']=$this->db->get($this->get)->result_array();
$i=$this->nowpage;
if($i-2<1)//把当前页放在中间,当前页之前显示2条
$i=1;
else
$i=$i-2;
if(($i+$this->pro)>$this->pageall)
$top=$this->pageall;
else
$top=$this->pro+$i;
//循环出输出页数
for(;$i<=$top;$i++)
$this->pagearray['page'][]=$i;
//获取上一页
if(($this->nowpage-1)<1)
$this->pagearray['uppage']=1;
else
$this->pagearray['uppage']=$this->nowpage-1;
//获取下一页
if(($this->nowpage+1)>$this->pageall)
$this->pagearray['downpage']=$this->pageall;
else
$this->pagearray['downpage']=$this->nowpage+1;
//获取首页
$this->pagearray['first']=1;
//获取末页
$this->pagearray['last']=$this->pageall;
$this->pagearray['nowpage']=$this->nowpage;
}
}
复制代码
使用方法
PHP复制代码
$this->load->model('page_model',"page");
$sql=array(
"select"=>"allarc.id,title,update,writer,name,addtable",
"order_by"=>"id",
"where"=>array("id",1),
"join"=>array("join1"=>array("arctype","typeid=arctype.id"),),
"get"=>'allarc',
);
$result=$this->page->pagestart($sql,$page);
复制代码
|
|