智能分页算法
时间: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;