编写思路:
1.分页函数可以帮助我们完成select语句的limit部分
每页显示3条
limit ($_GET[$page]-1)*$page_size,$page_size //第一页 0,3
limit ($_GET[$page]-1)*$page_size,$page_size //第二页 3,3
limit ($_GET[$page]-1)*$page_size,$page_size //第三页 6,3
2.分页函数应该帮助我们设置好页码列表的html代码部分
(1)根据传入函数的$num_btn参数来显示按钮数目
1)要显示的按钮数目$num_btn大于总页码数目$page_num_all
2)$num_btn<$page_num_all
这种情况下我们有一种显示策略是:
理想状态:当前页的左边按钮数目应该和右边的按钮数目相等,或者右边多一个按钮
不理想的情况:1、左边第一个按钮号已经是<1了
2、最后一个按钮号已经是大于总页码数$page_num_all
if($num_btn>=$page_num_all){ //把所有的页码按钮全部显示 for($i=1;$i<=$page_num_all;$i++){//这边的$page_num_all是限制循环次数以控制显示按钮数目的变量,$i是记录页码号 if($_GET[$page]==$i){ $html[$i]="<span>{$i}</span>"; }else{ $html[$i]="<a href='{$url}{$i}'>{$i}</a>"; } } }else{ $num_left=floor(($num_btn-1)/2); $start=$_GET[$page]-$num_left; $end=$start+($num_btn-1); if($start<1){ $start=1; } if($end>$page_num_all){ $start=$page_num_all-($num_btn-1); } for($i=0;$i<$num_btn;$i++){ if($_GET[$page]==$start){ $html[$start]="<span>{$start}</span>"; }else{ $html[$start]="<a href='{$url}{$start}'>{$start}</a>"; } $start++; } }
(2)当按钮数目大于等于3的时候做省略号效果:
当第一个按钮的页码不是1的时候,我们就把第一个按钮替换成1...
当最后一个按钮的页码不是$page_num_all的时候,我们就把最后一个按钮替换成...$page_num_all
if(count($html)>=3){ reset($html); $key_first=key($html); end($html); $key_end=key($html); if($key_first!=1){ array_shift($html); array_unshift($html,"<a href='{$url}1'>1...</a>"); } if($key_end!=$page_num_all){ array_pop($html); array_push($html,"<a href='{$url}{$page_num_all}'>...{$page_num_all}</a>"); } }
所有功能实现后php代码如下:
<?php header("Content-type:text/html;charset=utf-8"); /* 参数说明: $count:总记录数 $page_size:每页显示的记录数 $num_btn:要展示的页码按钮数目 $page:分页的get参数 */ function page($count,$page_size,$num_btn=10,$page='page'){ if(!isset($_GET[$page]) || !is_numeric($_GET[$page]) || $_GET[$page]<1){ $_GET[$page]=1; } //总页数 $page_num_all=ceil($count/$page_size); if($_GET[$page]>$page_num_all){ $_GET[$page]=$page_num_all; } $start=($_GET[$page]-1)*$page_size; $limit="limit {$start},{$page_size}"; $current_url=$_SERVER['REQUEST_URI'];//获取当前界面url地址 $arr_current=parse_url($current_url);//将当前url拆分到数组中 $current_path=$arr_current['path'];//将文件路径保存起来 $url=''; if(isset($arr_current['query'])){ parse_str($arr_current['query'],$arr_query); unset($arr_query[$page]); if(empty($arr_query)){ $url="{$current_path}?{$page}="; }else{ $other=http_build_query($arr_query); $url="{$current_path}?{$other}&{$page}="; } }else{ $url="{$current_path}?{$page}="; } $html=array(); if($num_btn>=$page_num_all){ //把所有的页码按钮全部显示 for($i=1;$i<=$page_num_all;$i++){//这边的$page_num_all是限制循环次数以控制显示按钮数目的变量,$i是记录页码号 if($_GET[$page]==$i){ $html[$i]="<span>{$i}</span>"; }else{ $html[$i]="<a href='{$url}{$i}'>{$i}</a>"; } } }else{ $num_left=floor(($num_btn-1)/2); $start=$_GET[$page]-$num_left; $end=$start+($num_btn-1); if($start<1){ $start=1; } if($end>$page_num_all){ $start=$page_num_all-($num_btn-1); } for($i=0;$i<$num_btn;$i++){ if($_GET[$page]==$start){ $html[$start]="<span>{$start}</span>"; }else{ $html[$start]="<a href='{$url}{$start}'>{$start}</a>"; } $start++; } //如果按钮数目大于等于3的时候做省略号效果 if(count($html)>=3){ reset($html); $key_first=key($html); end($html); $key_end=key($html); if($key_first!=1){ array_shift($html); array_unshift($html,"<a href='{$url}1'>1...</a>"); } if($key_end!=$page_num_all){ array_pop($html); array_push($html,"<a href='{$url}{$page_num_all}'>...{$page_num_all}</a>"); } } } //当前页不是第一页,触发上一页按钮 if($_GET[$page]!=1){ $prev=$_GET[$page]-1; array_unshift($html,"<a href='{$url}{$prev}'><< 上一页</a>"); } //当前页不是最后一页,触发下一页按钮 if($_GET[$page]!=$page_num_all){ $next=$_GET[$page]+1; array_push($html,"<a href='{$url}{$next}'>下一页>>> </a>"); } $html=implode(' ',$html); $data=array( 'limit'=>$limit, 'html'=>$html ); return $data; } $page=page(100,10,5); echo $page['html']; ?>