一个通用的php分页函数
特点:
1.只完成分页链接生成功能,不与数据库查询耦合
2.支持自定义URL, 从而支持动态页,静态页、ajax分页链接方式
<?php
/**
* 返回分页链接字符串
* @param int $page 当前页码 0或1均视为第一页
* @param int $total 记录总数
* @param int $pagesize 每页显示的记录数
* @param int $number 每页显示的分页链接数量
* @param string $url 分页链接url样式,默认直接使用GET['page']传递
* 但针对一些特殊情况,如ajax分页,静态页分页,可能不能使用GET传递页码,需要定义url样式
* 其中必须包含{page}字符串,将被替换为对应的页码 如
* $url = 'list_{page}.html';
* $url = 'javascript:funct(a,b,{page})';
* @return string 分页链接HTML代码
*/
public static function pagelink($page=0,$total=0,$pagesize=0,$number=10,$url='') {
$page = max(intval($page),1);
$total = intval($total);
$pagesize = max(intval($pagesize),0);
$pages = ceil($total/$pagesize);
if($pages < 2) return ;
if(!$url) {
$url = $_SERVER['SCRIPT_NAME'].'?'.$_SERVER['QUERY_STRING'];
$url = preg_replace('/\&*page=\d*\b/','',$url);
$url .= empty($_SERVER['QUERY_STRING']) ? "page={page}" : "&page={page}";
}
$s = '';
if($page > 1) {
$s .= '<a title="第一页" class="first_page" href="'.str_replace('{page}',1,$url).'"><<</a>';
$s .= '<a title="上一页" class="prev_page" href="'.str_replace('{page}',($page-1),$url).'"> < </a>';
}else {
$s .= '<a title="第一页" class="first_page"> << </a>';
$s .= '<a title="上一页" class="prev_page"> < </a>';
}
if($number%2) {
$start = max($page -ceil($number/2)+1,1);
}else {
$start = max($page- intval($number/2),1);
}
$end = min($start+$number-1,$pages);
if(($end - $start) < ($number-1)) {
$start = max($end -$number+1, 1);
}
for($i = $start; $i <= $end; $i++) {
$sel = $page == $i ? 'class="current_page"' : '';
$link = str_replace('{page}',$i,$url);
$href = $page == $i ? '' : "href=\"$link\"";
$s .= "<a $sel $href> $i </a>";
}
if($page < $pages) {
$link = str_replace('{page}',$page+1,$url);
$s .= "<a class=\"next_page\" href=\"$link\" title=\"下一页\"> > </a>";
$link = str_replace('{page}',$pages,$url);
$s .= "<a class=\"last_page\" href=\"$link\" title=\"最后页\"> >> </a>";
}else {
$s .= "<a class=\"netxt_page\"> > </a>";
$s .= "<a class=\"last_page\"> >> </a>";
}
$s .= "<a class=\"total\">总数 $total </a>";
return $s ;
}