一、每次动态显示11条其他隐藏
调用pages()函数分页样式如下图:
调用pages1()函数分页样式如下图:
调用pages()函数结合mysql数据库查询,完成分页下数据信息显示
前提说明:分页的核心原理是mysql查询语句中使用limit子语句和自定义的pages()函数,我的这个实例中通过mysql获取总条数和数据信息只做参考,重点是掌握pages()函数,因为mysql这部分,根据跟人代码的前后场景可能不同,我的这里使用了面向对象的形式。你可以自己在这里链接mysql数据库,让后自己写select查询等等,最终吧自己获取的$total,$page,$pagesize三个值传递到pages()函数即可,获取分页样式
//列表分页
$total = $this->db->count(); //信息总条数为:14条
$pagesize = 1; //每页显示条数:1条
$page = max(intval($_GET['page']), 1); //当前页码
$offset = $pagesize*($page-1); //每页开头信息的位置,偏移量
$house_data = $this->db->select('','*',"$offset, $pagesize"); //根据分页显示每页对应的数据信息
$datas = array();
foreach($house as $hk=>$hv){
foreach($house_data as $hdk=>$hdv){
if($hv['id']==$hdv['id']){
$datas[$hk]['house_name']=$hv['house_name'];
$datas[$hk]['thumb']=$hv['thumb'];
$datas[$hk]['address']=$hv['address'];
$datas[$hk]['estate']=$hv['estate'];
$datas[$hk]['style']=$hv['style'];
$datas[$hk]['price']=$hv['price'];
$datas[$hk]['yuntar']=$hdv['yuntar'];
}
}
}
$pages = pages($total, $page, $pagesize); //这里调用pages()函数,显示分页的样式
//$pages1 = pages1($total, $page, $pagesize); 或者这里也可以调用pages1()显示分页样式
在下面我定义了pages()和pages1()两个函数,都可以实现分页样式显示,只是内部代码逻辑有所差别,这里把2个函数都罗列出来,提供大家参考
定义pages()函数
/**
* $num 总条数:我的测试条数是14条
* $curr_page 当前分页
* $perpage 每页显示条数默认20条
* setpages 默认每页显示6个页码链接比如:上一页 1..[ 3 4 5 6 7 8 9 10 11]..14 下一页
*/
function pages($num, $curr_page, $perpage = 20,$setpages = 10){
if($num > $perpage) {
$page = $setpages; //显示页码数量
$offset = ceil($setpages/2-1); //计算偏移量
$pages = ceil($num / $perpage); //总页数
$from = $curr_page - $offset; //通过 当前页-偏移量=获取分页区间的起始页码
$to = $curr_page + $offset; //通过 当前页+偏移量=获取分页区间的结束页码
if($page >= $pages) { //如果按照区块显示的页数比总页数多或者相等时,就循环显示出所有页码
$from = 2;
$to = $pages-1;
} else {
if($from <= 1) { //页码区间起始位小于等于1时
$from = 2;
$to = $page-1;
} elseif($to >= $pages) { //页码区间末位大于等于总页数时
$from = $pages-($page-2);
$to = $pages-1;
}
$more = 1;
}
$multipage .= ''.$num.L('page_item').'';
if($curr_page>0) {
$prvpage = ($curr_page-1)>0 ? ($curr_page-1) : 1;
$multipage .= ' 上一页';
if($curr_page==1) {
$multipage .= ' 1';
} elseif($curr_page>6 && $more) {
$multipage .= ' 1..';
} else {
$multipage .= ' 1';
}
}
//动态显示页码区间
for($i = $from; $i <= $to; $i++) {
if($i != $curr_page) {
$multipage .= ' '.$i.'';
} else {
$multipage .= ' '.$i.'';
}
}
$nextpage = ($curr_page+1)
if($curr_page
if($curr_page
$multipage .= ' ..'.$pages.' 下一页';
} else {
$multipage .= ' '.$pages.' 下一页';
}
} elseif($curr_page==$pages) {
$multipage .= ' '.$pages.' 下一页';
} else {
$multipage .= ' '.$pages.' 下一页';
}
}
return $multipage;
}
定义pages1()函数
/**
* $num 总条数:我的测试条数是14条
* $curr_page 当前分页
* $perpage 每页显示条数默认20条
*/
function pages1($num, $curr_page, $perpage = 20){
$multipage = ''; //定义变量返回分页字符串
if($num>$perpage){
$pages = ceil($num/$perpage); //计算总分页数
$from = $curr_page - 4;
$to = $curr_page + 4;
if($curr_page>=1 && $curr_page<=6){
for($i=1;$i<=9;$i++){
$multipage .= ' '.$i.''; //
}
$multipage .= '..'.$num.''; //
}
if($curr_page>6 && $curr_page<=$num-4){
$multipage .= ' 1..'; //
for($i=$from;$i<=$to;$i++){
$multipage .= ' '.$i.''; //
}
}
if($curr_page>$num-4 && $curr_page<=$num){
$multipage .= ' 1..'; //
for($i=$num-9;$i<=$num;$i++){
$multipage .= ' '.$i.''; //
}
}
}
return $multipage;
}