-2

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

像这样:

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

应该变成这样:

上一页 1 2 .. 6 7 8 9 10 .. 40 41 下一页

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

<?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>';
        }
    }
?>
4

1 回答 1

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 < page 你总是会得到:

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>';
        }
    }
}

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

评论后编辑

对于像谷歌这样的分页,只需这样做:

$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>';
    }
}

它不完全像谷歌,但我现在真的很忙,我认为你得到了正确的方向。如果您像谷歌一样想要它,只需考虑一下您必须做什么或让我知道,您不知道,我会在周日晚上给出答案。

于 2013-04-26T08:28:19.477 回答