限制分页数


Limit the pagination number

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

像这样:

前文1 2 3 4 5 6 ..40 41下一步

应该变成这样:

前文1 ..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>';
        }
    }
?>

这是不容易得到的问题,但比较代码和你想要的(前1 2 3…41 42 43下)和阅读评论,我希望我能帮助你。

如果我得到它的权利,你尝试创建一个导航像这里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>';
    }
}

如果$page = 20 and $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>';
        }
    }
}

我还没有测试过这段代码,但这部分代码,你必须看看,我觉得它应该工作。代码还可以更好。

注释后编辑

对于像google这样的分页,就这样做:

$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一样想一下你需要做什么或者告诉我,你不知道我会在周日晚上给出答案