通用的php分页函数

该文章由 leevare 发布于 ,归类于 PHP
<?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代码
 */
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;
}

参考地址:https://www.oschina.net/question/1168437_140570

如果觉得我的文章对您有用,请您随意打赏。您的支持将鼓励我更加努力创作!

相关文章:

说点什么

avatar
300
  Subscribe  
提醒