自用分页类,与大家分享一下
自己亲试的分页类,测试过, 暂时没有发现bug,如有同学发现bug,请及时留言联系我.分享的目的在于交流.
分享代码如下,方便各位复制粘贴:
<?php defined('BASEPATH') OR exit('No direct script access allowed');
class MY_page extends CI_Controller{
public function __construct(){
parent::__construct();
}
/*
* @package CodeIgniter
* @author ken
* @since Version 1.0
* @date 2015-07
*
* @path Codeigniter/application/libraries/MY_page - 文件路径
* @class MY_page - 类名
* @function page_func - 函数名
* @form_method get - 表单模式
* @parameter $page - 从页面传过来的页码
* @parameter $tbName - 表名
* @parameter $page_size - 每页显示的记录行数
* @parameter $show_page - 每页显示的页码
* @parameter $total_page - 计算可以显示多少页面
* @parameter $prev - 上一页
* @parameter $next - 下一页
* @parameter $page_offset - 计算偏移量
* @parameter $start - 起始页码
* @parameter $end - 结束页码
* @parameter $page_banner - 显示数据+分页条
*
* @test_version CodeIgniter 2 - 在 CodeIgniter2 测试过
* @test_table page - 测试表 page
* @test_data
create table page(
id int(8) primary key auto_increment,
name char(20) default null
)ENGINE InnoDB default charset=utf8;
insert into page(name) values('name1');
*@Note:
*- mysql的limit 1,2 表示的是 起始点,记录条数
*- 而CI 的limit 1,2 表示的是 记录条数,起始点
*- 页面显示的记录条数的变化应该是 (传入的页面-1)*每页显示的记录条数
*
*@调用函数的代码编写如下
$this->load->library('MY_Page');
if(@$_GET['p'] == null){
$page = 1;
}else{
$page= $_GET['p'];
}
$tbName = 'page';
$page_size = 5;
$show_page = 5;
$data['page_banner'] = $this->my_page->page_func($tbName,$page_size, $show_page, $page);
$result = $this->db->get($tbName, $page_size, (($page-1)*$page_size))->result_array();
$data['result'] = $result;
**/
#分页函数
public function page_func($tbName='', $page_size='', $show_page='', $page=''){
if($page == 0 or $page < 0){
$page = 1;
}else{
$page;
}
$total = $this->db->get($tbName)->num_rows();#获取总记录数
#$page_size = 5;#每页显示的记录行数
#$show_page = 5;#每页显示的页码
$total_page = ceil($total/$page_size);#计算可以显示多少个页面
$prev = $page - 1;#上一页
$next = $page + 1;#下一页
$page_offset = ($show_page-1)/2;#计算偏移量
$start = 1;#起始页页码
$end = $total_page;#结束页码
$page_banner = '';#显示数据 + 分页条
@$page_banner = '<a href="'.$_SERVER['PHP_SELF'].'?p=1">首页</a> ';#首页
if($prev < 1){
$prev = 1;
}
@$page_banner .= '<a href="'.$_SERVER['PHP_SELF'].'?p='.$prev.'">上一页</a> ';#上一页
#总页数大于想要显示的页数
if($total_page > $show_page){
if($page > $page_offset+1){
$page_banner .= ' ... ';
}
if($page > $page_offset){
$start = $page - $page_offset;
$end = $total_page > $page+$page_offset ? $page+$page_offset : $total_page;
}else{
$start = 1;
$end = $total_page > $show_page ? $show_page : $total_page;
}
if($page+$page_offset > $total_page){
$start = $start - ($page+$page_offset - $end);
}
}
for($i=$start; $i<=$end; $i++){
$page_banner .= '<a href="'.$_SERVER['PHP_SELF'].'?p='.$i.'">'.$i.'</a> ';
}
#尾部省略
if($total_page > $show_page and $total_page > $page+$page_offset){
$page_banner .= ' ... ';
}
if($next > $total_page){
$next = $total_page;
}
@$page_banner .= '<a href="'.$_SERVER['PHP_SELF'].'?p='.$next.'">下一页</a> ';#下一页
@$page_banner .= '<a href="'.$_SERVER['PHP_SELF'].'?p='.$total_page.'">末页</a> ';#末页
@$page_banner .= '<span>共 '.$total_page.' 页</span>';#显示页码总条数
#页码跳转
$page_banner .= '
<form action="'.$_SERVER['PHP_SELF'].'" method="get">
到第<input type="text" size="2" name="p" />页
<input type="submit" value="确定" />
</form>';
return$page_banner;
}
}
在后面查看代码时,发现了一个小bug,即$_GET['p']=0 时会报错,只要源代码
if(@$_GET['p'] == null) 改成
if(@$_GET['p'] == null or $_GET['p'] < 1)
即可解决问题.
谨在此表示抱歉. 补上视图代码: 补上视图代码:
<?php foreach($result as $vals): ?>
<?=$vals['id'];?>
<?=$vals['name'];?><br>
<?php endforeach; ?>
<?php echo br(2); ?>
<?=$page_banner;?> 感谢分享!{:1_1:}{:1_1:} 本帖最后由 Mushawir 于 2015-9-19 13:38 编辑
发现一个bug.
$page_size =10;
$show_page = 10;
这个两个值相同时出现0.5 1.5 2.5....
解决方法:
把偏移量用ceil一下。
代码:
$page_offset = ceil(($show_page-1)/2); #计算偏移量
不知道这么做对不对?
可以的
页:
[1]