限制分页编号

时间:2013-04-26 07:21:46

标签: php pagination

我的数据库中有很多表行,其中至少包含100行或更多行。因此,我需要限制页面上显示的分页编号。

像这样的时间:

  

上一页1 2 3 4 5 6 .. 40 41下一页

应该成为这个:

  

Prev 1 2 .. 6 7 8 9 10 .. 40 41 Next

以下代码是我用来创建基本分页的代码:

<?php
    require 'php/connect.inc.php';
    $per_page = 6;

    $pages_query = mysql_query("SELECT COUNT('user_id') FROM users");
    $pages = ceil(mysql_result($pages_query, 0) / $per_page);

    $page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1;
    $start = ($page - 1) * $per_page;


    $query = mysql_query("SELECT `user_username` FROM `users` LIMIT $start, $per_page");
    while($mysql_fetch_assoc = mysql_fetch_assoc($query)){
        echo '<p>', $mysql_fetch_assoc['user_username'] ,'</p>';
    }

    if ($pages >= 1 && $page <= $pages){
        for ($x=1; $x <= $pages; $x++){
            echo ($x == $page) ? '<strong><a href="?page='.$x.'">'.$x.'</a></strong> ' : '<a href="?page='.$x.'">'.$x.'</a>';
        }
    }
?>

1 个答案:

答案 0 :(得分:0)

要获得问题但要比较代码和你想要的东西并不容易(Prev 1 2 3 ... 41 42 43 Next)并阅读评论,希望我能帮到你。

如果我做得对,你尝试创建一个类似http://goo.gl/UzD02的导航(网站底部)。您的算法为所有找到的页面执行此操作:

if ($pages >= 1 && $page <= $pages){
    for ($x=1; $x <= $pages; $x++){
        echo ($x == $page) ? '<strong><a href="?page='.$x.'">'.$x.'</a></strong> ' : '<a href="?page='.$x.'">'.$x.'</a>';
    }
}

如果$ pages = 20且$ page&lt;您将永远得到的页面:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

可能的解决方案是

$dots = true;
if ($pages >= 1 && $page <= $pages){
    for ($x=1; $x <= $pages; $x++){
        if ($x > $page + 1) {
            $dots = true;
        } 
        if($x > 5 && $dots) {
            echo "...";
            $dots = false;
            if ($x < $page - 1) {$x = $page - 1;}
            elseif ($x < $pages - 3) {$x = $pages - 3;}
        } else {
            echo ($x == $page) ? '<strong><a href="?page='.$x.'">'.$x.'</a></strong> ' : '<a href="?page='.$x.'">'.$x.'</a>';
        }
    }
}

我还没有测试过这段代码,但这是代码的一部分,你必须看一下它,它应该可以工作。代码也可能更好。

评论后编辑

对于谷歌这样的分页,就像这样:

$numberOfPages = 10;
if($pages >= 1 && $page <= $pages){
    if($pages + $numberOfPages < $pages) {
       $numOfSlectablePages =  $pages + $numberOfPages;
    } else {
       $numOfSlectablePages = $pages;
    }
    for ($x = $page; $x <= $numOfSlectablePages; $x++){
        echo ($x == $page) ? '<strong><a href="?page='.$x.'">'.$x.'</a></strong> ' : '<a href="?page='.$x.'">'.$x.'</a>';
    }
}
它不完全像谷歌,但我现在真的很忙,我认为你得到了正确的方向。如果你想像google那样想一想你要做什么或让我知道,你不知道我会在星期天晚上给出答案。