在项目中,分页功能经常出现,这里做个总结。
public function _get_page($page_per = 15){
//这个函数定义为一个公用函数,所以这里用$_REQUEST(既可以接受$_GET数据,也可以接受$_POST数据)
$page = empty($_REQUEST['page']) ? 1: intval($_REQUSET['page']) ;
$start = ($page - 1) * $page_per;
$result = array(
'limit' => "{$start},{$page_per}"; //limit数据一般用在搜索数据上
'curr_page' => $page; //当前的页码
'pageper' => $page_per; //每页的记录条数
)
return $result;
}
public function _format_page(&$page,$num=7){ //参数$page是引用,
$page['page_count'] = ceil($page['item_count']/$page['pageper']);
$mid = ceil($num/2) - 1;
if($page['page_count'] <= $num){
$from = 1;
$to = $page['page_count'];
}
else
{
$from = $page['curr_page'] <= $mid ? 1 : $page['curr_page'] - $mid + 1;
$to = $from + $num - 1;
$to > $page['page_count'] && $to = $page['page_count'];
}
// 生成app=goods&act=view之类的URL
if( preg_match('/[&|\?]?page=\w+/i',$_SERVER['QUERY_STRING']) > 0){
$url_format = preg_replace('/[&|\?]?page=\w+/i', '', $_SERVER['QUERY_STRING']);
$url_format = '?'.$url_format;
}
else{
$url_format = '?'.$_SERVER['QUERY_STRING'];
}
$page['page_links'] = array();
$page['first_link'] = ''; //首页链接
$page['first_suspen'] = ''; //首页省略号
$page['last_link'] = ''; //尾页链接
$page['last_suspen'] = ''; //尾页省略号
if( $i = $from; $i <= $to; $i++){
$page['page_links']['$i'] = "{$url_format}$page={$i}";
}
if (($page['curr_page'] - $from) < ($page['curr_page'] -1) && $page['page_count'] > $num){
$page['first_link'] = "{$url_format}&page=1";
if (($page['curr_page'] -1) - ($page['curr_page'] - $from) != 1){
$page['first_suspen'] = '..';
}
}
if (($to - $page['curr_page']) < ($page['page_count'] - $page['curr_page']) && $page['page_count'] > $num){
$page['last_link'] = "{$url_format}&page=" . $page['page_count'];
if (($page['page_count'] - $page['curr_page']) - ($to - $page['curr_page']) != 1){
$page['last_suspen'] = '..';
}
}
$page['prev_link'] = $page['curr_page'] > $from ? "{$url_format}&page=" . ($page['curr_page'] - 1) : "";
$page['next_link'] = $page['curr_page'] < $to ? "{$url_format}&page=" . ($page['curr_page'] + 1) : "";
}
在php的某个函数中需要用到分页,前端会传给后端一个页码数如$_post['page'],后端接受到这个参数并调用_get_page函数,获得limit、当前页码和每页的记录条数,再利用limit从数据库中检索出相应的数据,最后调用_format_page函数获得分页所需的所有数据。