我正在寻找智能分页的示例算法。所谓智能,我的意思是我只想显示,例如,当前页面的两个相邻页面,所以我不会以一个长得离谱的页面列表结束,而是截断它。
这里有一个简单的例子来让它更清楚。这就是我现在所拥有的:
Pages: 1 2 3 4 [5] 6 7 8 9 10 11这就是我想要的结果:
Pages: ... 3 4 [5] 6 7 ...(在本例中,我只显示了与当前页面相邻的两个页面)
我正在PHP/Mysql中实现它,并且“基本”分页(没有约束)已经编写好了,我只是在寻找一个例子来优化它……它可以是任何语言中的一个例子,只要它给我一个关于如何实现它的想法……
发布于 2011-09-27 08:24:13
有点晚了=),但这是我的尝试:
function Pagination($data, $limit = null, $current = null, $adjacents = null)
{
$result = array();
if (isset($data, $limit) === true)
{
$result = range(1, ceil($data / $limit));
if (isset($current, $adjacents) === true)
{
if (($adjacents = floor($adjacents / 2) * 2 + 1) >= 1)
{
$result = array_slice($result, max(0, min(count($result) - $adjacents, intval($current) - ceil($adjacents / 2))), $adjacents);
}
}
}
return $result;
}示例:
$total = 1024;
$per_page = 10;
$current_page = 2;
$adjacent_links = 4;
print_r(Pagination($total, $per_page, $current_page, $adjacent_links));输出():
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)另一个例子:
$total = 1024;
$per_page = 10;
$current_page = 42;
$adjacent_links = 4;
print_r(Pagination($total, $per_page, $current_page, $adjacent_links));输出():
Array
(
[0] => 40
[1] => 41
[2] => 42
[3] => 43
[4] => 44
)发布于 2011-12-23 03:50:05
我从lazaro的帖子开始,试图用javascript/jquery实现一个健壮而轻便的算法……不需要额外的和/或庞大的分页库...在fiddle上查看一个活的例子:http://jsfiddle.net/97JtZ/1/
var totalPages = 50, buttons = 5;
var currentPage = lowerLimit = upperLimit = Math.min(9, totalPages);
//Search boundaries
for (var b = 1; b < buttons && b < totalPages;) {
if (lowerLimit > 1 ) { lowerLimit--; b++; }
if (b < buttons && upperLimit < totalPages) { upperLimit++; b++; }
}
//Do output to a html element
for (var i = lowerLimit; i <= upperLimit; i++) {
if (i == currentPage) $('#pager').append('<li>' + i + '</li> ');
else $('#pager').append('<a href="#"><li><em>' + i + '</em></li></a> ');
}发布于 2010-05-04 00:54:19
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;https://stackoverflow.com/questions/163809
复制相似问题