我正在寻找智能分页的示例算法.通过智能,我的意思是我只想显示例如当前页面的2个相邻页面,所以不是以一个可笑的长页面列表结束,而是截断它.
这是一个让它更清晰的快速示例......这就是我现在所拥有的:
Pages: 1 2 3 4 [5] 6 7 8 9 10 11
这就是我想要的结果:
Pages: ... 3 4 [5] 6 7 ...
(在这个例子中,我只显示当前页面的2个相邻页面)
我在PHP/Mysql中实现它,并且"基本"分页(没有trucating)已经编码,我只是在寻找一个优化它的例子......它可以是任何语言的一个例子,只要它给了我一个如何实现它的想法......
我刚才有同样的需要.
这是我用来完成它的文章(使用PHP代码): Digg-Style Pagination
它工作得非常快,并且对你要做的事情有一些补充,比如:
[1] 2 3 4 5 6 ... 100 1 [2] 3 4 5 6 ... 100 ... 1 ... 4 5 [6] 7 8 ... 100
有点晚了=),但这是我的意思:
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));
输出(@Codepad):
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));
输出(@Codepad):
Array ( [0] => 40 [1] => 41 [2] => 42 [3] => 43 [4] => 44 )
我从lazaro的帖子开始,尝试使用javascript/jquery制作一个强大而轻巧的算法...不需要额外的和/或庞大的分页库...请看小提琴的实例: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('