返回首页 - Notes - 2015

PHP 实现文章分页链接的显示


<?php

/**
 * 文章分页链接
 * param $base_url 分页链接的基准地址
 * param $show_count 分页链接中间部分显示数字页码的个数
 * param $count 文章总数
 * param $page_size 每页文章数
 * param $page 当前页码
 */
function pagination($base_url, $show_count, $count, $page_size, $page = 1)
{
    $last_page = $count / $page_size;
    $last_page = $last_page > intval($last_page) ? intval($last_page) + 1 : intval($last_page);
    $pre_page = $page - 1;
    $next_page = $page + 1;

    // 最前一页
    $html = '<a href="'.$base_url.'?page=1">首页</a>';
    if ($page > 1) {
        $html .= '<a href="'.$base_url.'?page='.$pre_page.'">上一页</a>';
    }

    // 平分当前页前后的页码
    $for_begin = $page - intval($show_count / 2);
    if ($for_begin < 1) {
        $for_begin = 1;
    }
    $for_end = $page + intval($show_count / 2);
    if ($for_end > $last_page) {
        $for_end = $last_page;
    }

    // 前后页码数量不足时补全
    if ($for_begin == 1) {
        $for_end = $for_begin + ($show_count - 1);
        if ($for_end > $last_page) {
            $for_end = $last_page;
        }
    }
    if ($for_end == $last_page) {
        $for_begin = $for_end - ($show_count - 1);
        if ($for_begin < 1) {
            $for_begin = 1;
        }
    }

    // 中间显示数字的页码链接
    for ($i = $for_begin; $i <= $for_end; ++$i) {
        if ($i == $page) {
            $html .= '<a href="'.$base_url.'?page='.$i.'" style="color:red;">'.$i.'</a>';
        } else {
            $html .= '<a href="'.$base_url.'?page='.$i.'">'.$i.'</a>';
        }
    }

    // 最后一页
    if ($page < $last_page) {
        $html .= '<a href="'.$base_url.'?page='.$next_page.'">下一页</a>';
    }
    $html .= '<a href="'.$base_url.'?page='.$last_page.'">末页</a>';

    return $html;
}

date:2015-07-07、2015-07-17