MVC---分页

Posted PHP菜鸟进阶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MVC---分页相关的知识,希望对你有一定的参考价值。

分页函数

连接数据库,传入查询数据的数据表,设置查询条件、每页显示条数和最多显示除几个页码。 由sql返回查询条数计算页码总数和结束页

function getPage($link,$table,$url,$per_page=3,$cur_page=1,$page_num=3,$con=1){
    $floor_page = floor($page_num/2);//计算页码总数
   //获取总页数
   $sql = "select count(*) as total from $table where $con";    $query = mysqli_query($link,$sql);//获取数据库返回信息    $row = mysqli_fetch_assoc($query);//数据总条数    $total = $row['total'];//总页数(取大于当前数量的最小整数)    $total_page = ceil($total/$per_page);
   //起始页与结束页    $start_page = $cur_page - $floor_page;    $end_page = $cur_page + $floor_page;    
 if($start_page < 1){    $start_page = 1;    $end_page = $page_num;  }    
 if($end_page > $total_page){    $end_page = $total_page;    $start_page = $total_page - $page_num + 1;  }      
   //页码不够$page_num页时  if($total_page < $page_num){    $start_page = 1;    $end_page = $total_page;  }
 //得到页码  $page = '';      
 //首页  $page .= '<a href="'.$url.'&p='.'1" class="number" title="1">首页</a>';      
 //上一页  if($cur_page != 1){    $prev_page = $cur_page - 1;    $page .= '<a href="'.$url.'&p='.$prev_page.'" class="number" title="'.$prev_page.'">上一页</a>';  }  
 //中间页码    
for
($i = $start_page;$i<=$end_page;$i++){
   //判断当前页
  if($i == $cur_page){       $page .= '<a href="'.$url.'&p='.$i.'" class="number current" title="'.$i.'">'.$i.'</a>';    }else{       $page .= '<a href="'.$url.'&p='.$i.'" class="number" title="'.$i.'">'.$i.'</a>';    }  }  
 //下一页    
if
($cur_page != $total_page){    $next_page = $cur_page + 1;    $page .= '<a href="'.$url.'&p='.$next_page.'" class="number" title="'.$next_page.'">下一页</a>';  }  
 //尾页  $page .= '<a href="'.$url.'&p='.$total_page.'" class="number" title="'.$total_page.'">尾页</a>';
  return $page;  }
  1. 获取数据库查询到的条数,假设有22条数据,设置每页显示3条,22/3=7页余下1条,因此应该分8页;

  2. 起始页和结束页

    1. 假设显示3个页码,当前页始终位于页码中间(除第一页)。点击第3页,起始页为2,结束页为4;点击第4页,起始页为3,结束页为5...

    2. 假设显示4个页码,点击第3页,起始页为1,结束页为5;点击第4页,起始页为2,结束页为5... 因此,起始页为当前页码和显示页码数量除以2取商的差;结束页为两者之和;但当此结束页大于总页时,结束页为总页数,起始页为结束页减去显示页码数量加1,比如显示2个页码,结束页为4,那么起始页就为3。

  3. 接下来就是拼接显示页码和设置当前样式。返回输出。

使用

$num = 3;//每页显示几条数据
$show_num = 3;//中间显示几个页码
$cur_page = isset($_GET['p'])?$_GET['p']:1;
//计算偏移量
$offset = ($cur_page-1)*$num;
$page = getPage($conn,'news',"index.php?c=news&a=index&search=$search&admin=admin",$num,$cur_page,$show_num,"news.is_delete = 1 and title like '%$search%'");//获取page.php的结果,替换html中的页数显示
//获取数据库新闻表信息
$data = getlist($conn,'news','news.id,title,time,hits,author,trumb_path,category.name','left join category on news.category=category.id',"news.is_delete = 1 and title like '%$search%' order by news.id desc",$offset,$num);


以上是关于MVC---分页的主要内容,如果未能解决你的问题,请参考以下文章

干货分享JPager.Net MVC超好用轻量级分页控件

MVC快速分页

MVC分页之MvcPager使用

modx - 当我在同上片段中使用“&documents =”参数时,分页不起作用

MVC默认路由实现分页-PagerExtend.dll

Asp.net MVC 4 / 5 中的分页