我的数据库中有许多表行,其中至少包含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一样想一下你需要做什么或者告诉我,你不知道我会在周日晚上给出答案