智能分页算法

时间:2020-03-06 15:02:31  来源:igfitidea点击:

我正在寻找智能分页的示例算法。聪明地说,我的意思是,例如,我只想显示当前页面的2个相邻页面,因此我截断了它而不是结束一个冗长的页面列表。

这是一个简单的例子,可以使事情变得更清楚……这就是我现在所拥有的:

Pages: 1 2 3 4 [5] 6 7 8 9 10 11

我要结束的是:

Pages: ... 3 4 [5] 6 7 ...

(在此示例中,我仅显示当前页面的2个相邻页面)

我正在PHP / Mysql中实现它,并且已经对"基本"分页(没有任何删节)进行了编码,我只是在寻找一个示例来对其进行优化……只要可以,就可以是任何语言的示例它给我一个关于如何实现它的想法...

解决方案

前一阵子我也有同样的需求。

这是我用来完成此工作的文章(使用PHP代码):
Digg式分页

它的运行速度非常快,并且为我们尝试做的事情增加了一些内容,例如:

[1] 2 3 4 5 6 ... 100
1 [2] 3 4 5 6 ... 100
...
1 ... 4 5 [6] 7 8 ... 100

我会在显示分页器的页面上使用简单的内容,例如:

if (
  $page_number == 1 || $page_number == $last_page ||
  $page_number == $actual_page ||
  $page_number == $actual_page+1 || $page_number == $actual_page+2 ||
  $page_number == $actual_page-1 || $page_number == $actual_page-2
  ) echo $page_number;

我们可以使用运算符将其调整为显示每10个左右的页面。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

我认为在这种情况下使用switch()情况会更好,我只是现在不记得语法了

把事情简单化 :)

我做了一个分页课程,不久前加入了Google Code。看看它很简单
http://code.google.com/p/spaceshipcollaborative/wiki/PHPagination

$paging = new Pagination();
$paging->set('urlscheme','class.pagination.php?page=%page%');
$paging->set('perpage',10);
$paging->set('page',15);
$paging->set('total',3000);
$paging->set('nexttext','Next Page');
$paging->set('prevtext','Previous Page');
$paging->set('focusedclass','selected');
$paging->set('delimiter','');
$paging->set('numlinks',9);
$paging->display();

List<int> pages = new List<int>();
int pn = 2; //example of actual pagenumber
int total = 8;

for(int i = pn - 9; i <= pn + 9; i++)
{
  if(i < 1) continue;
  if(i > total) break;
  pages.Add(i);
}

return pages;