/*
- 调用:$page=page(100,10,9,'page');
-
返回值:array('limit','html')
效果如下图所示:
参数说明:$count:总记录数,$page_size:每页显示的记录数,$num_btn:要展示的页码按钮数目,$page:分页的get参数,
*/
function page($count,$page_size,$num_btn=10,$page='page'){
if($count==0){//如果没有记录返回空的字符串
$data=array(
'limit'=>'',
'html'=>''
);
return $data
};
//如果获得的page参数不合法,默认参数等于1
if(!isset($_GET[$page])||!is_numeric($_GET[$page])||$_GET[$page]<1){
$_GET[$page]=1
};
$page_num_all=ceil($count/$page_size);//页码数向上取整
//如果页码参数大于页码总页数,page就默认等于最大页码数
if($_GET[$page]>$page_num_all){
$_GET[$page]=$page_num_all
};
//根据当前page参数计算起始数据值,比如有100条数据,每页显示10条,那么第三页起始值得index就是$start
$start=($_GET[$page]-1)*$page_size;
$limit="limit {$start},{$page_size}";//从index为$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'])){//判断当前url地址是否存在参数部分
parse_str($arr_current['query'],$arr_query);//如果存在参数部分,则将参数拆分
unset($arr_query[$page]);//删掉参数部分的page
if(empty($arr_query)){//删掉page参数后判断url是否没有其他参数
$url="{$current_path}?{$page}=";//如果除了删掉page后没有其他参数,直接在当前路径后加上page=
}else{
$other=http_build_query($arr_query);//除了page还有其他参数的话就将其他参数转换成字符串接在当前路径后面
$url="{$current_path}?{$other}&{$page}=";//在当前路径后接上拆分后处理好的参数
}
}else{
$url="{$current_path}?$page=";//如果不存在参数部分,则直接在url后添加参数
};
$html=array();//定义$html为数组
if($num_btn>=$page_num_all){//如果传入的按钮数目参数大于总的页码数,直接默认显示所有页码按钮
for($i=1;$i<=$page_num_all;$i++){//$i既是限制循环次数的变量,也是页码号
if($_GET[$page]==$i){
$html[$i]="{$i} ";
}else{
$html[$i]="{$i} ";
}
}
}else{
$num_left=floor(($num_btn-1)/2);//获得左边的按钮数目,向下取整
$start=$_GET[$page]-$num_left;//获得左边起始页码数字
$end=$start+($num_btn-1);//获得最右边页码数字
if($start<1){//如果最左边按钮数字小于1,默认等于1
$start=1;
}
if($end>$page_num_all){//如果最右边页码数大于最大页码数,默认等于1
$start=$page_num_all-($num_btn-1);
}
for($i=0;$i<$num_btn;$i++){//$i既是限制循环次数的变量,也是页码号
if($_GET[$page]==$start){
$html[$start]="{$start} ";
}else{
$html[$start]="{$start}";
}
$start++;
}
//当按钮数目大于等于三的时候做省略号效果
if(count($html)>=3){
reset($html);
$key_first=key($html);
$key_end=key($html);
if($key_first!=1){
array_shift($html);
array_unshift($html,"1...");
}
if($key_end!=$page_num_all){
array_pop($html);
array_push($html,"...{$page_num_all}");
}
}
}
if($_GET[$page]!=1){
$prev=$_GET[$page]-1;
array_unshift($html,"<上一页 ");
}
if($_GET[$page]!=$page_num_all) {
$next = $_GET[$page] + 1;
array_push($html,"下一页>");
}
$html=implode(' ',$html);
$data=array(
'limit'=>$limit,
'html'=>$html
);
return $data;
}
```