<?phpif(!defined('BASEPATH'))exit('No direct script access allowed');
classMypage_class {
/**
* @author :leanhunter<[email protected]>
* @create :2011-9-23
* 本分页类专为三段式CI分页缩写,即site_url('control/function/2');
*/
/**
* config
*/
public$part=2;//控制数字列表当前页前后链接数量
public$totalpage=0;//总页数
public$url='';//url地址,不含分页所在的段,形如:'control/function'
public$total=0;//总条数
public$perpage=5;//每页条数
public$nowindex=1;//当前页
public$seg=3;//页码参数取 index.php之后的段数,默认为3,即index.php/control/function/18 这种形式
public$next_page='下一页';//下一页
public$pre_page='上一页';//上一页
public$first_page='首页';//首页
public$last_page='末页';//尾页
/**
* constructor构造函数
*
* @param $params=array()
*/
publicfunction__construct($params=array())
{
if(count($params) > 0)
{
$this->initialize($params);
}
log_message('debug',"MyPage Class Initialized");
}
functioninitialize($params)
{
if(count($params) > 0)
{
$this->total=isset($params['total']) ?intval($params['total']) : 0;//总条数
$this->perpage=isset($params['perpage']) ?intval($params['perpage']) : 5;//每页条数
$this->nowindex=isset($params['nowindex']) ?intval($params['nowindex']) : 1;//当前页
$this->url=isset($params['url']) ?$params['url'] :'';//url地址,不含分页所在的段,形如:'control/function'
$this->part=isset($params['part']) ?$params['part'] : 2;//控制数字列表当前页前后链接数量
$this->seg=isset($params['seg']) ?$params['seg'] : 3;//页码参数取 index.php之后的段数,默认为3,即index.php/control/function/18 这种形式
$this->next_page=isset($params['next_page']) ?$params['next_page'] :'下一页';
$this->pre_page=isset($params['pre_page']) ?$params['pre_page'] :'上一页';
$this->first_page=isset($params['first_page']) ?$params['first_page'] :'首页';
$this->last_page=isset($params['last_page']) ?$params['last_page'] :'末页';
}
$this->totalpage=ceil($this->total /$this->perpage);//总页数
$this->_myset_url($this->url);//设置链接地址
}
/**
* 获取显示"下一页"的代码
*
* @param string $style
* @return string
*/
functionnext_page($style='pg_next')
{
if($this->nowindex <$this->totalpage){
return$this->_get_link($this->_get_url($this->nowindex + 1),$this->next_page,$style);
}
return'<span class="'.$style.'">'.$this->next_page.'</span>';
}
/**
* 获取显示“上一页”的代码
*
* @param string $style
* @return string
*/
functionpre_page($style='pg_pre')
{
if($this->nowindex > 1){
return$this->_get_link($this->_get_url($this->nowindex-1),$this->pre_page,$style);
}
return'<span class="'.$style.'">'.$this->pre_page.'</span>';
}
/**
* 获取显示“首页”的代码
*
* @param string $style
* @return string
*/
functionfirst_page($style='pg_first')
{
if($this->nowindex == 1){
return'<span class="'.$style.'">'.$this->first_page.'</span>';
}
return$this->_get_link($this->_get_url(1),$this->first_page,$style);
}
/**
* 获取显示“尾页”的代码
*
* @param string $style
* @return string
*/
functionlast_page($style='pg_last')
{
if($this->nowindex ==$this->totalpage){
return'<span class="'.$style.'">'.$this->last_page.'</span>';
}
return$this->_get_link($this->_get_url($this->totalpage),$this->last_page,$style);
}
/**
* 获取显示“当前页”的代码
*
* @param string $style
* @param string $nowindex_style
* @return string
*/
functionnowbar($style='pg_link',$nowindex_style='pg_curr')
{
$plus=$this->part;
$begin=1;
$end=$this->totalpage;
if($this->nowindex >$plus) {
$begin=$this->nowindex-$plus;
$end=$this->nowindex +$plus;
if($end>$this->totalpage) {
$begin= ($begin-$end+$this->totalpage>0) ? ($begin-$end+$this->totalpage) : 1;
$end=$this->totalpage;
}
}else{
$begin=1;
$end=$begin+ 2*$plus;
$end=$end>$this->totalpage ?$this->totalpage :$end;
}
$out='';
for($i=$begin;$i<=$end;$i++)
{
if($i!=$this->nowindex){
$out.=$this->_get_link($this->_get_url($i),$i,$style);
}else{
$out.='<span class="'.$nowindex_style.'">'.$i.'</span>';
}
}
return$out;
}
/**
* 获取显示跳转按钮的代码
*
* @return string
*/
functionselect()
{
$out='<select name="pagelect" class="pg_select">';
for($i=1;$i<=$this->totalpage;$i++)
{
if($i==$this->nowindex){
$out.='<option value="'.$i.'" selected>'.$i.'</option>';
}else{
$out.='<option value="'.$i.'">'.$i.'</option>';
}
}
$out.='</select>';
return$out;
}
/**
* 控制分页显示风格
*
* @param int $mode
* @return string
*/
functionshow($mode=1)
{
switch($mode)
{
case1://上一页 1 2 3 4 5 下一页 第x页
return$this->pre_page().$this->nowbar().$this->next_page();
break;
case2://首页 上一页 1 2 3 4 5 下一页 末页 第x页
return$this->first_page().$this->pre_page().$this->nowbar().$this->next_page().$this->last_page().' 第'.$this->select().'页';
break;
case3://上一页 1 2 3 4 5 下一页
return$this->pre_page().$this->nowbar().$this->next_page();
break;
default://上一页 1 2 3 4 5 下一页 第x页
return$this->pre_page().$this->nowbar().$this->next_page().' 第'.$this->select().'页';
break;
}
}
/*----------------private function (私有方法)-----------------------------------------------------------*/
/**
* 设置url头地址
* @param: String $url
* @return boolean
*/
publicfunction_myset_url($url)
{
$CI=&get_instance();
$CI->load->helper('url');
if(empty($url)) {//如果$url为空,要用uri_string()函数取uri段
$cururl='';
$cururl=uri_string();
$segementarray=explode("/",$cururl);
$c=0;
for($i=0;$i< sizeof($segementarray);$i++) {
if($segementarray[$i] &&$c<$this->seg-1) {//取uri_string()的seg-1段
$url=$url.'/'.$segementarray[$i];
$c++;
}
}
}
$this->url=site_url($url);
}
/**
* 为指定的页面返回地址值
*
* @param int $pagenum
* @return string $url
*/
function_get_url($pagenum=1)
{
return$this->url.'/'.$pagenum;
}
/**
* 获取链接地址
*/
function_get_link($url,$text,$style=''){
$style=$style?'class="'.$style.'"':'';
return'<a '.$style.' href="'.$url.'">'.$text.'</a>';
}
}
?>
|
把类下了放到library文件夹中,在需要分页的控制器中初始化,部分代码如下:
1
2
3
4
5
6
7
8
9
|
$page_config['perpage']=5; //每页条数
$page_config['part']=2;//当前页前后链接数量
$page_config['url']='work/managework';//url
$page_config['seg']=3;//参数取 index.php之后的段数,默认为3,即index.php/control/function/18 这种形式
$page_config['nowindex']=$this->uri->segment($page_config['seg']) ?$this->uri->segment($page_config['seg']):1;//当前页
$this->load->library('mypage_class');
$countnum=$this->Work_mdl->count_work();//得到记录总数
$page_config['total']=$countnum['count(*)'];
$this->mypage_class->initialize($page_config);
|
视图里,在需要显示分页条的地方,添加:
1
2
3
|
<divclass="page">
<?phpecho $this->mypage_class->show(1); ?>
</div>
|
我自己山寨了一下淘宝的分页的css:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
/******************** page **************************/
.page{
font-size:12px;
height:30px;
text-align:right;
padding-right:120px;
}
.pg_pre,.pg_next{
border:1pxsolid#ccc;
margin:03px;
background-image:url("../image/icon_pg.gif");
background-repeat:no-repeat;
}
.pg_pre{
padding:3px8px3px20px;
background-position:7px3px;
}
a.pg_pre{
background-position:7px-19px;
}
.pg_next{
padding:3px20px3px8px;
background-position:-22px3px;
}
a.pg_next{
background-position:-22px-19px;
}
.pg_link{
padding:3px8px;
margin:03px;
border:1pxsolid#ccc;
}
.pg_link:hover,a.pg_next:hover,a.pg_pre:hover{
border:1pxsolid#A9C9E2;
color:#137cce;
}
.pg_curr{
padding:3px8px;
margin:03px;
color:#137cce;
background-color:#E8F5FE;
border:1pxsolid#A9C9E2;
}
.pg_select{
border:1pxsolid#ccc;
padding:2px;
margin:05px;
}
|
css中用到的图片如下:
效果图示例: