最近在做一个WordPress自动翻译的web应用,在文件列表和词条列表页面需要进行分页显示,于是自己写了一个分页的函数。
function _show_page($pagesize,$pageall){
if ($pageall<1) {
$pageall = 1;
}
$paged = ceil($pageall / $pagesize);
$paged_show = (int)($paged+1);
$active_page = isset($_GET['page'])?$_GET['page']:'1';
$url_str = preg_replace('/&page=[1-9]/','',$_SERVER["QUERY_STRING"]);
$pre_no = $active_page-1;
$next_no = $active_page+1;
if ($paged == 1) {
$pre = '<li class="page-item disabled"><a class="page-link" href="#" aria-disabled="true">上页</a></li>';
$next = '<li class="page-item disabled"><a class="page-link" href="#" aria-disabled="true">下页</a></li>';
}else{
if ($active_page == 1) {
$pre = '<li class="page-item disabled"><a class="page-link" href="#" aria-disabled="true">上页</a></li>';
$next = '<li class="page-item"><a class="page-link" href="?'.$url_str.'&page='.$next_no.'">下页</a></li>';
}else if($active_page == $paged){
$pre = '<li class="page-item"><a class="page-link" href="?'.$url_str.'&page='.$pre_no.'">上页</a></li>';
$next = '<li class="page-item disabled"><a class="page-link" href="#">下页</a></li>';
}else{
$pre = '<li class="page-item"><a class="page-link" href="?'.$url_str.'&page='.$pre_no.'">上页</a></li>';
$next = '<li class="page-item"><a class="page-link" href="?'.$url_str.'&page='.$next_no.'">下页</a></li>';
}
}
echo '<div class="container py-3 ">
<nav aria-label="..." class="d-flex justify-content-center">
<ul class="pagination shadow">'.$pre;
if ($paged >= 10) {
for ($i=$active_page; $i < $paged_show; $i++) {
echo '<li class="page-item '._check_active($i,$active_page).'"><a class="page-link" href="?'.$url_str.'&page='.$i.'">'.$i.'</a></li>';
}
}
echo $next.'
</ul>
</nav>
</div>';
// return $res;
}
这个函数在使用过程中,当页数少的时候可以正常显示,当页数多的时候整个页面底部就全是分页的代码。于是网上重新找了一个,稍作修改后正常了。
/**
* 返回分页链接字符串
* @param int $total 记录总数
* @param int $pagesize 每页显示的记录数
* @param string $url 分页链接url样式,默认直接使用GET['page']传递
* 但针对一些特殊情况,如ajax分页,静态页分页,可能不能使用GET传递页码,需要定义url样式
* 其中必须包含{page}字符串,将被替换为对应的页码 如
* $url = 'list_{page}.html';
* $url = 'javascript:funct(a,b,{page})';
* @return string 分页链接HTML代码
*/
function _show_page($pagesize=0,$total=0,$url='') {
$number=10; # 每页显示的分页链接数量
$page = isset($_GET['page'])?$_GET['page']:'1'; # 当前页码 0或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}";
}
$output = '<div class="container py-3 ">
<nav aria-label="..." class="d-flex justify-content-center">
<ul class="pagination shadow">';
if($page > 1) {
$output .= '<a title="第一页" class="page-link first_page" href="'.str_replace('{page}',1,$url).'"><<</a>';
$output .= '<a title="上一页" class="page-link prev_page" href="'.str_replace('{page}',($page-1),$url).'"> < </a>';
}else {
$output .= '<a title="第一页" class="page-link first_page"> << </a>';
$output .= '<a title="上一页" class="page-link 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="page-item active"' : 'class="page-item"';
$link = str_replace('{page}',$i,$url);
$href = $page == $i ? '' : 'href="'.$link.'"';
$output .= '<li '.$sel.'><a class="page-link" '.$href.'>'.$i.' </a></li>';
}
if($page < $pages) {
$link = str_replace('{page}',$page+1,$url);
$output .= '<li class="page-item"><a class="page-link next_page" href="'.$link.'" title="下一页"> > </a></li>';
$link = str_replace('{page}',$pages,$url);
$output .= '<li class="page-item"><a class="page-link last_page" href="'.$link.'" title="最后页"> >> </a></li>';
}else {
$output .= '<li class="page-item"><a class="page-link netxt_page"> > </a></li>';
$output .= '<li class="page-item"><a class="page-link last_page"> >> </a></li>';
}
$output .= '<li class="page-item"><a class="total">总数 '.$total.'</a></li>';
$output .='</ul>
</nav>
</div>';
return $output ;
}