x
首页 后端[PHP&MySql] 一个PHP分页类

一个PHP分页类

发表于 2012-04-30 - 浏览:10815 评论:0 收藏 0
<?php
/*
 * ---------------------------------------------------------------------
 * 分页类
 * @author      lowxp modified
 * ---------------------------------------------------------------------
 * 调用示例
 * $this->load->model('page');
 * $this->page->set_vars(array(
 *    'url'=>' title="第{num}页" onclick="quote.submit({num})" href="javascript:;"',
 *    'goto'=>'onclick="quote.goto()"',
 *    'per'=>10
 * ));
 * $r = $this->page->query(   SQL语句  )->result_array();
 * 与 $this->db->query一样调用.
 * 在模板页面中直接 echo $page;即可
 * ----------------------------------------------------------------------
 */

class page_model{
    public $pages = array(
        'var'=>'page',#当前页参数
        'tpl'=>'
{prevMore}{links}{nextMore}
', 'link' =>'{num}',#普通分页链接 'current'=>'class="on"',#当前页链接样式 'url'=>'href="javascript:;" title="第{num}页" rel="{num}"', 'per'=>15,#每页显示数 'total'=>0,#总记录数 'nonce'=>0,#当前页(起始页为1) 'count'=>0,#总页数 'prev'=>0,#下一页页码 'next'=>0,#上一页页码 'links'=>array(), 'code'=>'当前无记录',#分页代码 'info'=>'当前:{nonce}/{count}页 共{total}条信息',#分页信息 'info'=>'共{count}页 到第 ', 'goto'=>'' ); #设置分页参数 function set_vars($a){ $this->pageOpt=$a; } #带分页查询 function query($sql){ isset($this->pageOpt)||$this->pageOpt=array(); $this->pages['nonce']= isset($_POST['page'])?max((int)$_POST['page'],1):1;#设置当前页 foreach($this->pageOpt as $k=>$v)$this->pages[$k]=$v;#设置分页参数 $limit = ($this->pages['nonce']-1)*$this->pages['per'].','.$this->pages['per']; $r = $this->db->query(substr_replace($sql,'SELECT SQL_CALC_FOUND_ROWS ',0,6).' LIMIT '.$limit); $t = $this->db->query("SELECT FOUND_ROWS() AS t")->row_array(); $this->pages['total'] = $t['t'];#设置总记录数 $this->view->assign('total',$t['t']); $this->view->assign('page',$t['t']<$this->pages['per']?'':$this->page()); $this->view->assign('page_total',$this->pages['total']); return $r; } function page(){//分页 foreach($this->pages as $k=>&$v)${'_'.$k}=$v; $_count= (int)ceil($_total / $_per); if($_count<2)return ''; $_nonce= min($_count,max($_nonce,1));//当前页区间[1,count] /*分页区间*/ $off = 3;$off2= $off*2; if($_count>$off2+1){ $first=$_nonce<$off+1?1:$_nonce-$off; $last=$_count-$_nonce<$off+1?$_count:$_nonce+$off; if($last-$first<$off2)($last-$off2>0)?($first=$last-$off2):($last=$first+$off2); }else{$first=1;$last=$_count;} /*--------*/ for($i=$first;$i<=$last;$i++)array_push($_links,$i); $links = ''; foreach($_links as $v){ $url = str_replace('{num}',$v,$v==$_nonce?$_current:$_url); $links.= str_replace(array('{num}','{url}'),array($v,$url),$_link); } $_prev = $_nonce==1?'':$_nonce-1;#上一页 $_next = $_nonce==$_count?'':$_nonce+1;#下一页 $prev = $_prev==''?'id="p-disable"':str_replace('{num}',$_prev,$_url); $next = $_next==''?'id="p-disable"':str_replace('{num}',$_next,$_url); $moreNext = $_count-$last>1?'...':''; $morePrev = $first>2?'...':''; $first= $first>1?str_replace(array('{url}','{num}'),array(str_replace('{num}',1,$_url),1),$_link).$morePrev:''; $last = $last<$_count?$moreNext.str_replace(array('{url}','{num}'),array(str_replace('{num}',$_count,$_url),$_count),$_link):''; #当前:{nonce}/{count} 共{total}条信息 $info = str_replace(array('{nonce}','{count}','{total}','{goto}'),array($_nonce,$_count,$_total,$_goto),$_info); $_code = str_replace(array('{links}','{prev}','{next}','{info}','{prevMore}','{nextMore}'),array($links,$prev,$next,$info,$first,$last),$_tpl); return $_code; } }

文章评论。。。