我的数据库中有很多表行,其中至少包含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>';
}
}
?>
答案 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那样想一想你要做什么或让我知道,你不知道我会在星期天晚上给出答案。