当前位置:  开发笔记 > 编程语言 > 正文

智能分页算法

如何解决《智能分页算法》经验,为你挑选了3个好方法。

我正在寻找智能分页的示例算法.通过智能,我的意思是我只想显示例如当前页面的2个相邻页面,所以不是以一个可笑的长页面列表结束,而是截断它.

这是一个让它更清晰的快速示例......这就是我现在所拥有的:

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

这就是我想要的结果:

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

(在这个例子中,我只显示当前页面的2个相邻页面)

我在PHP/Mysql中实现它,并且"基本"分页(没有trucating)已经编码,我只是在寻找一个优化它的例子......它可以是任何语言的一个例子,只要它给了我一个如何实现它的想法......



1> changelog..:

我刚才有同样的需要.

这是我用来完成它的文章(使用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


对代码进行一些清理是必要的,但效果很好.+1

2> Alix Axel..:

有点晚了=),但这是我的意思:

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
)


@Alix Axel不错的回答!! 但更好的实现方式是在最后创建数组,而不是切片预先存在的数组....(例如,如果你有12k页面,那该怎么办)

3> Edwin..:

我从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('
  • ' + i + '
  • '); else $('#pager').append('
  • ' + i + '
  • '); }

    推荐阅读
    刘美娥94662
    这个屌丝很懒,什么也没留下!
    DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
    Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有