首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >智能分页算法

智能分页算法
EN

Stack Overflow用户
提问于 2008-10-02 18:22:35
回答 7查看 47.3K关注 0票数 37

我正在寻找智能分页的示例算法。所谓智能,我的意思是我只想显示,例如,当前页面的两个相邻页面,所以我不会以一个长得离谱的页面列表结束,而是截断它。

这里有一个简单的例子来让它更清楚。这就是我现在所拥有的:

代码语言:javascript
复制
Pages: 1 2 3 4 [5] 6 7 8 9 10 11

这就是我想要的结果:

代码语言:javascript
复制
Pages: ... 3 4 [5] 6 7 ...

(在本例中,我只显示了与当前页面相邻的两个页面)

我正在PHP/Mysql中实现它,并且“基本”分页(没有约束)已经编写好了,我只是在寻找一个例子来优化它……它可以是任何语言中的一个例子,只要它给我一个关于如何实现它的想法……

EN

回答 7

Stack Overflow用户

发布于 2011-09-27 08:24:13

有点晚了=),但这是我的尝试:

代码语言:javascript
复制
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;
}

示例:

代码语言:javascript
复制
$total = 1024;
$per_page = 10;
$current_page = 2;
$adjacent_links = 4;

print_r(Pagination($total, $per_page, $current_page, $adjacent_links));

输出():

代码语言:javascript
复制
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)

另一个例子:

代码语言:javascript
复制
$total = 1024;
$per_page = 10;
$current_page = 42;
$adjacent_links = 4;

print_r(Pagination($total, $per_page, $current_page, $adjacent_links));

输出():

代码语言:javascript
复制
Array
(
    [0] => 40
    [1] => 41
    [2] => 42
    [3] => 43
    [4] => 44
)
票数 18
EN

Stack Overflow用户

发布于 2011-12-23 03:50:05

我从lazaro的帖子开始,试图用javascript/jquery实现一个健壮而轻便的算法……不需要额外的和/或庞大的分页库...在fiddle上查看一个活的例子:http://jsfiddle.net/97JtZ/1/

代码语言:javascript
复制
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> ');
}
票数 10
EN

Stack Overflow用户

发布于 2010-05-04 00:54:19

代码语言:javascript
复制
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;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/163809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档