限制PHP分页上的页码
我有一个PHP分页脚本。当页面记录为数百条时,分页结果太大。如何限制页码/链接 例如:<1 | 2。。。37 | 38 | 39 | 40 | 41 | 42 ... 82 | 83> 这是我的PHP脚本限制PHP分页上的页码,php,pagination,Php,Pagination,我有一个PHP分页脚本。当页面记录为数百条时,分页结果太大。如何限制页码/链接 例如: 这是我的PHP脚本 <?php $ppp = 10; $rows = mysql_num_rows($query); $nmpages = ceil($rows/$ppp); // if current page is not 1, draw PREVIOUS link if ($pg > 1 && $nmpages != 0) { echo "<a href=\"?
<?php
$ppp = 10;
$rows = mysql_num_rows($query);
$nmpages = ceil($rows/$ppp);
// if current page is not 1, draw PREVIOUS link
if ($pg > 1 && $nmpages != 0) {
echo "<a href=\"?pg=".($pg-1)."\"><</a> ";
}
For($i = 1 ; $i <= $nmpages ; $i++) {
If($i == $pg) {
echo "<a href=\"#\" class=\"selected\"><b>".$i."</b></a> ";
} else {
echo "<a href=\"?pg=".$i."\">".$i."</a> ";
}
}
// if current page less than max pages, draw NEXT link
if ($pg < $nmpages && $nmpages != 0) {
echo "<a href=\"?pg=".($pg+1)."\">></a>";
}
?>
你知道我如何使用我拥有的特定PHP脚本做到这一点吗?的答案基本上是访问一个包含代码示例的页面
这就是答案,但这个问题基本上是重复的。尝试使一个页面括号(例如10)比实际页面小,10比实际页面大,例如更改for语句:
For($i = $pg-10 ; $i <= $pg+10 ; $i++)
对于($i=$pg-10;$i请尝试以下方法:
<?php
$link = "";
$page = $_GET['pg']; // your current page
// $pages=20; // Total number of pages
$limit=5 ; // May be what you are looking for
if ($pages >=1 && $page <= $pages)
{
$counter = 1;
$link = "";
if ($page > ($limit/2))
{ $link .= "<a href=\"?page=1\">1 </a> ... ";}
for ($x=$page; $x<=$pages;$x++)
{
if($counter < $limit)
$link .= "<a href=\"?page=" .$x."\">".$x." </a>";
$counter++;
}
if ($page < $pages - ($limit/2))
{ $link .= "... " . "<a href=\"?page=" .$pages."\">".$pages." </a>"; }
}
echo $link;
?>
基于@Makesh代码的改进或重写
function get_pagination_links($current_page, $total_pages, $url)
{
$links = "";
if ($total_pages >= 1 && $current_page <= $total_pages) {
$links .= "<a href=\"{$url}?page=1\">1</a>";
$i = max(2, $current_page - 5);
if ($i > 2)
$links .= " ... ";
for (; $i < min($current_page + 6, $total_pages); $i++) {
$links .= "<a href=\"{$url}?page={$i}\">{$i}</a>";
}
if ($i != $total_pages)
$links .= " ... ";
$links .= "<a href=\"{$url}?page={$total_pages}\">{$total_pages}</a>";
}
return $links;
}
我想通过当前页面和总页面得到一组数字。这就是我的想法。我希望这能帮助其他人-
注意-如果总页数超过10,则此项工作。我觉得如果总页数
页面小于10,则仅在单个for循环中显示它
函数getSmartPageNumber($currentPage,$totalPage)
{
$PageNumber=[];
$diff=2;
$firstChunk=[1,2,3];
$lastChunk=[$totalPage-2,$totalPage-1,$totalPage];
如果($currentPage<$totalPage){
$loopStartAt=$currentPage-$diff;
如果($loopStartAt<1){
$loopStartAt=1;
}
$loopEndAt=$loopStartAt+($diff*2);
如果($loopEndAt>$totalPage){
$loopEndAt=$totalPage;
$loopStartAt=$loopEndAt-($diff*2);
}
if(!in_数组($loopStartAt,$firstChunk)){
foreach($firstChunk作为$i){
$PageNumber[]=$i;
}
$pageNumbers[]=';
}
有关($i=$loopStartAt;$i可能的副本,请参阅此[问题][1][1]:可能这就是你的答案。你需要知道两件事:你在哪一页以及总共有多少页。分而治之;将问题分解成更小的问题,这样会更容易解决。Digg风格的分页是一个很好的例子,可以很容易地在自定义分页脚本中使用这是非常可读的代码。。
function get_pagination_links($current_page, $total_pages, $url)
{
$links = "";
if ($total_pages >= 1 && $current_page <= $total_pages) {
$links .= "<a href=\"{$url}?page=1\">1</a>";
$i = max(2, $current_page - 5);
if ($i > 2)
$links .= " ... ";
for (; $i < min($current_page + 6, $total_pages); $i++) {
$links .= "<a href=\"{$url}?page={$i}\">{$i}</a>";
}
if ($i != $total_pages)
$links .= " ... ";
$links .= "<a href=\"{$url}?page={$total_pages}\">{$total_pages}</a>";
}
return $links;
}
page = 1
1 2 3 4 5 6 ... 20
page = 10
1 ... 5 6 7 8 9 10 11 12 13 14 15 ... 20
page = 19
1 ... 14 15 16 17 18 19 20
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => .
[4] => 6
[5] => 7
[6] => 8
[7] => 9
[8] => 10
[9] => .
[10] => 18
[11] => 19
[12] => 20
)
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => .
[6] => 18
[7] => 19
[8] => 20
)