PHP-php分页的问题,显示为2 3 4 5 6 7 8

PHP-php分页的问题,显示为2 3 4 5 6 7 8

晚风撩人 发布于 2017-07-21 字数 76 浏览 1210 回复 5

php分页的问题,显示为2 3 4 5 6 7 8 ,5为当前页,左右分别显示3个页码?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

甜柠檬 2017-11-05 5 楼

 $page = isset($_GET['p']) ? $_GET['p'] : 1;
$pages = 1000;

echo pager( $page, $pages, "pager.php");

function pager($curr_page, $pages, $curr_url, $width=8, $page_unit = 'p') {

if($curr_page == 1) {
$pagination = '';
$pagination = "  1  ";
for( $i=$curr_page+1; $i<=$width; $i++ ) {
$pagination .= " &nbsp;<a href='{$curr_url}?{$page_unit}={$i}'>{$i}</a>&nbsp; ";
}
return $pagination;
}
if($curr_page == $pages) {
$pagination = '';
for( $i=$pages-$width; $i<$pages; $i++ ) {
$pagination .= " &nbsp;<a href='{$curr_url}?{$page_unit}={$i}'>{$i}</a>&nbsp; ";
}
$pagination .= " &nbsp;{$pages}&nbsp; ";
return $pagination;
}
$half = floor($width/2);
if( $half ) {
$pagination = '';
if( $curr_page >= 1 ) {
//当前页前面链接
if( $curr_page-$half > 0 ) {
for($i=$curr_page-$half; $i<$curr_page; $i++) {
$pagination .= " &nbsp;<a href='{$curr_url}?{$page_unit}={$i}'>{$i}</a>&nbsp; ";
}
} else {
for($i=1; $i<$curr_page; $i++) {
$pagination .= " &nbsp;<a href='{$curr_url}?{$page_unit}={$i}'>{$i}</a>&nbsp; ";
}
}
//当前页链接
$pagination .= " &nbsp;{$curr_page}&nbsp; ";
//当前页后面链接
if( $curr_page+$half > $pages ) {
for($i=$curr_page+1; $i<=$pages; $i++) {
$pagination .= " &nbsp;<a href='{$curr_url}?{$page_unit}={$i}'>{$i}</a>&nbsp; ";
}
} else {
for($i=$curr_page+1; $i<=$curr_page+$half; $i++) {
$pagination .= " &nbsp;<a href='{$curr_url}?{$page_unit}={$i}'>{$i}</a>&nbsp; ";
}
}

}
return $pagination;
}

}

这是我经常用的,还可以在优化一下,在URL里面添加其他参数的方法有待添加

晚风撩人 2017-10-17 4 楼

 /**
* 分页:1 2 3 4 5
* @param $total 总页数
* @param $page 当前页码
* @param $count 每页显示条数
* @param $pagelong 显示的可点击页数
* @param $prefix 页码链接(/?act=order&state=1)
* */
function getPageNav($total, $page, $count, $pagelong, $prefix, $suffix='')
{
//总页数
$pages = ceil($total/$count);
$link = '{$prefix}&page={$i}{$suffix}';

$middle_number = ceil($pagelong/2); //middle number
if($page <= $middle_number)
{
$first_page = 1;
$end_page = & $pagelong;
}
else
{
$first_page = $page - ($middle_number-1);
$end_page = $page + ($middle_number-1);
}

$previous_page = $page - 1;
$next_page = $page + 1;

$pagelist = '<div class="page">';

//分页列表
$str = $link;
for($i = $first_page; $i <= $end_page; $i++)
{
eval("$str = "$str";");
$i == $page ? $pagelist .= '<a href="'.$str.'" style="color:#FF0000">'.$i.'</a>' : $pagelist .= '<a href="'.$str.'">'.$i.'</a>';

$str = $link;
if ($i >=$pages) break;
}

$pagelist .= '</div>';

return $pagelist;
}

echo getPageNav(100,8,5,7,'/?act=order&state=1');

甜柠檬 2017-10-09 3 楼

/**

* 对列表分页数进行处理
* @param string $page 当前页
* @param string $totalPage 总的页数
* @param string $url 请求URL
* @param string $str 请求URL查询的参数
*/
public function doPageCode($page, $totalPage, $url, $str)
{
// 分页样式和分页数字符串
$pageCode = '';

// 中间显示的分页数 1 2 3 4 5 6 7
$pNum = 7; // 最好为奇数 7时,当前页两边分别为3个,多的自动隐藏,只显示当前页和其两边分别3个的页数

// 根据总页数和分页数来判断第一页和最后一页的数字
if ($totalPage <= $pNum)
{
$firstNum = 1; // 第一页
$lastNum = $totalPage; // 最后一页
} else {
// 计算分页数的偏移度
$offset = (int)floor($pNum / 2);

// 根据分页数的偏移度和当前页数来计算第一页
if (($page - $offset) <= 1)
{
$firstNum = 1;
} elseif (($page + $offset) > $totalPage) {
$firstNum = $totalPage - $pNum + 1;
} else {
$firstNum = $page - $offset;
}
$lastNum = $firstNum + $pNum - 1;
}

// 根据第一页和最后一页来输出分页数
for ($i = $firstNum; $i <= $lastNum; $i++)
{
if ($page == $i)
{
$pageCode .= "<font style='color:red;border:1px #333 solid;padding:4px;'>{$i}</font> ";
} else {
$pageCode .= "<a href='{$url}&page={$i}{$str}'>{$i}</a> ";
}
}
return $pageCode;
}

显示为:2 3 4 5 6 7 8 ,加粗为当前页
注意:中间显示的分页数最好为奇数。

浮生未歇 2017-10-02 2 楼

/**
* 分页函数
*
* @param int $currentPage
* @param int $pageSize
* @param int $totalCount
* @param string $url
* @return string
*/
function gen_page_html($currentPage,$totalCount,$pageSize = 12,$url = " ",$showPage = 11)
{
$totalPage = ceil($totalCount/$pageSize);
$lastPage = true;
$nextPage = true;
$offset = floor($showPage/2);

if($totalPage <= 1)
{
$lastPage = false;
$nextPage = false;
}
else
{
if($currentPage == 1)
{
$lastPage = false;
}
elseif($currentPage == $totalPage )
{
$nextPage = false;
}
}

$startPage = ($currentPage-$offset)>0?$currentPage-$offset:1;
$endPage = ($currentPage+$offset)<$totalPage?($currentPage+$offset):$totalPage;
$endPage = ($endPage<$showPage && $totalPage>$showPage)?$showPage:$endPage;

$url .= strpos($url, "?") === false ? "?" : "&";

$pageHtml = '<div class="pagination"><span class="info">共<b>'.$totalCount.'</b>条信息 分<b>'.$totalPage.'</b>页显示</span>';

if($lastPage === false)
{
$pageHtml .= '<span class="disabled">首页</span>&nbsp;&nbsp;<span class="disabled">上一页</span>';
}
else
{
$pageHtml .= '<a href="'.$url.'page=1" class="pagelink">首页</a>&nbsp;&nbsp;<a href="'.$url.'page='.($currentPage-1).'" class="pagelink">上一页</a>';
}

for($i=$startPage;$i<=$endPage;$i++)
{
if($i == $currentPage)
{
$pageHtml .= '<span class="current">'.$currentPage.'</span>';
}
else
{
$pageHtml .= '<a href="'.$url.'page='.$i.'" class="pagelink">'.$i.'</a>';
}
}

if($nextPage === false)
{
$pageHtml .= '<span class="disabled">下一页</span>&nbsp;<span class="disabled">末页</span>';
}
else
{
$pageHtml .= '<a href="'.$url.'page='.($currentPage+1).'" class="pagelink">下一页</a>&nbsp;<a href="'.$url.'page='.$totalPage.'" class="pagelink">末页</a>';
}
$pageHtml .= '</div>';

return $pageHtml;
}

甜柠檬 2017-09-15 1 楼

思路如下:
在循环生成页码的时候,只显示当前页面的左右3个页码就行了。
获取当前页码,对当前页面进行判断,如果是1,则显示右边的三个页码,如果是最后一页,则显示左边的3个页码,如果处于中间,并且当前页码-3>0 && 当前页码+3<总页码,则显示左右两边的页码