欢迎光临
我们一直在努力

PHP分页代码函数

最近在做一个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).'">&lt;&lt;</a>';
        $output .= '<a title="上一页" class="page-link prev_page" href="'.str_replace('{page}',($page-1),$url).'"> &lt; </a>';
    }else {
        $output .= '<a title="第一页" class="page-link first_page"> &lt;&lt; </a>';
        $output .= '<a title="上一页" class="page-link prev_page"> &lt; </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="下一页"> &gt; </a></li>';
        $link = str_replace('{page}',$pages,$url);
        $output .= '<li class="page-item"><a class="page-link last_page" href="'.$link.'" title="最后页"> &gt;&gt; </a></li>';
    }else {
        $output .= '<li class="page-item"><a class="page-link netxt_page"> &gt; </a></li>';
        $output .= '<li class="page-item"><a class="page-link last_page"> &gt;&gt; </a></li>';
    }

    $output .= '<li class="page-item"><a class="total">总数 '.$total.'</a></li>';        
    $output .='</ul>
        </nav>
    </div>';
    return $output ;
}
赞(0) 打赏
未经允许不得转载:侯建方的个人网站 » PHP分页代码函数

更好的WordPress主题

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...

联系我们联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册