我正在研究PHP中的分页算法。我可以猜测它需要改进的空间,所以我想对如何改进它有一些想法,无论是清理代码从UI / UX的角度来看,或者你能想到的任何其他东西。
该算法应输出如下所示的分页:
1 2 3 ... 6 7 8 ... 97 98 99
或者这个:
1 2 3 4 5 ... 6 7 8 9 10
或者这个:
1 2 3
这是我的代码:
<?php
if(!is_null($_GET['page'])) {
$currentPage = $_GET['page'];
} else {
$currentPage = 1;
}
if($pages != null) {
echo 'Page: ';
}
// Less than 10 pages
if($pages <= 10) {
for($page = 1; $page <= $pages; $page++) {
echo '<a href="?page=' . $page . '">' . $page . '</a> ';
}
// Greater than 10 pages, and we're somewhere in the middle of them
} elseif(($pages > 10) && ($currentPage > 4) && ($currentPage < $pages - 3)) {
for($page = 1; $page <= 3; $page++) {
echo '<a href="?page=' . $page . '">' . $page . '</a> ';
}
echo '... ';
for($page = $currentPage - 1; $page <= $currentPage + 1; $page++) {
echo '<a href="?page=' . $page . '">' . $page . '</a> ';
}
echo '... ';
for($page = $pages - 2; $page <= $pages; $page++) {
echo '<a href="?page=' . $page . '">' . $page . '</a> ';
}
// Greater than 10 pages, and we're towards the end of the pages
} else {
for($page = 1; $page <= 5; $page++) {
echo '<a href="?page=' . $page . '">' . $page . '</a> ';
}
echo '... ';
for($page = $pages - 5; $page <= $pages; $page++) {
echo '<a href="?page=' . $page . '">' . $page . '</a> ';
}
}
答案 0 :(得分:2)
本文中另一个很好的分页功能
答案 1 :(得分:1)
我不确定我的代码是否比你的更好,但这是我解决类似问题的方法。
它需要一个参数来生成页面数量,并创建一个包含锚点类pages
的div,当前页面的类别为current
。这个解决方案似乎更清洁,因为重复次数更少。
function generate_pages($total,$current)
{ //Will generate pages and link to ?page=x when passed total pages to output
if($total > 1)
{
$total=intval($total);
$output='<div class="pages">';
$current_page= (false == isset($current)) ? 1 : $current;
for($page=1;$page<$total+1;$page++)
{
$lower=$current_page-3;
$upper=$current_page+3;
$special = ($page==$current_page) ? " class=\"current\"" : "";
if(($page > $lower && $page < $upper) || $page < 2 || $page > ($total-1))
{
if($last_done_page+1 != $page) $output.= '... ';
$output.='<a'.$special.' href="?page='.$page.'">'.$page.'</a>';
$last_done_page=$page;
}
}
$output.='</div>';
return $output;
}
}
答案 2 :(得分:-1)