PHP中分页的写法

在项目中,分页功能经常出现,这里做个总结。

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函数获得分页所需的所有数据。

 

posted @ 2017-02-13 17:14  孔夫子耍大刀  阅读(159)  评论(0编辑  收藏  举报