网上有很多这篇文章内容,我只是拿过来修改了一下几个参数,以便容易读懂
可以自动适应范围的页码分页程序,页码格式如下
<< < 1 2 3 4 5 6 7 > >>
<< < 6 7 8 9 10 11 12 > >>
<?php
/*
* @param $pageid 当前$_GET获得的页码
* @param $total 总记录数
* @param $uri 页码连接文件名
* @param $perpage 每页显示
* @param $pagelen 最多显示几个页码 注意(奇数),对称嘛!
* return 函数返回一个数组:
* pagecode 索引对应的内容是 生成的HTML 代码
* sqllimit 索引对应的是sql limit 后缀
*/
function page($pageid,$total,$uri,$perpage=10,$pagelen=7){
$pagecode = ''; # 定义变量,存放分页生成的HTML
$pageid = intval($pageid); # 避免非数字页码
$total = intval($total); # 保证总记录数值类型正确
if(!$total) return array(); # 总记录数为零返回空数组
$pages = ceil($total/$perpage);# 计算总分页
if($pageid<1) $pageid = 1; # 处理页码合法性
if($pageid>$pages) $pageid = $pages;
$offset = $perpage*($pageid-1); # 计算查询偏移量
//页码范围计算
$init = 1; # 起始页码数
$max = $pages; # 结束页码数
$pagelen = ($pagelen%2) ? $pagelen : $pagelen+1; # 页码个数
$pageoffset = ($pagelen-1)/2; # 页码个数左右偏移量
//生成html
$pagecode ='<div class="page">';
$pagecode .="<span>$pageid/$pages</span>"; # 第几页,共几页
if($pageid!=1){ # 如果是第一页,则不显示第一页和上一页的连接
$pagecode.="<a href=\"{$uri}?pageid=1\"><<</a>"; # 第一页
$pagecode.="<a href=\"{$uri}?pageid=".($pageid-1)."\"><</a>";# 上一页
}
if($pages>$pagelen) { # 分页数大于页码个数时可以偏移
if($pageid<=$pageoffset) {//如果当前页小于等于左偏移
$init = 1;
$max = $pagelen;
} else { # 如果当前页大于左偏移
if($pageid + $pageoffset>=$pages+1) { # 如果当前页码右偏移超出最大分页数
$init = $pages-$pagelen+1;
} else { # 左右偏移都存在时的计算
$init = $pageid-$pageoffset;
$max = $pageid+$pageoffset;
}
}
}
//生成html
for( $i=$init; $i<=$max; $i++ ) {
if( $i==$pageid ) {
$pagecode .= '<span>'.$i.'</span>';
} else {
$pagecode .= "<a href=\"{$uri}?pageid={$i}\">$i</a>";
}
}
if($pageid!=$pages){
$pagecode .= "<a href=\"{$uri}?pageid=".($pageid+1)."\">></a>"; # 下一页
$pagecode .= "<a href=\"{$uri}?pageid={$pages}\">>></a>"; # 最后一页
}
$pagecode .= '</div>';
return array('pagecode'=>$pagecode,'sqllimit'=>' limit '.$offset.','.$perpage);
}
?>