【发布时间】:2011-12-23 00:15:23
【问题描述】:
我有一个分页脚本,我在下面发布了,问题是我有很多数据,所以我以一个巨大的页面列表结束,我想让它一次只显示 10 页,然后可能是最后 2像这样的页面:
上一个 1 2 3 4 5 6 7 8 9...24 25 下一个
无论如何我可以更改代码来执行此操作。下面是包含的分页脚本,如果需要,我可以包含脚本的其他部分。
<?php
//source unknown for logic of showPageNumbers()
//modified by drale.com - 1-19-2010
//added query_string reproduction and divs
//added showNext() and showPrev()
class Pagination
{
function getStartRow($page,$limit)
{
$startrow = $page * $limit - ($limit);
return $startrow;
}
function showPageNumbers($totalrows,$page,$limit)
{
$query_string = $this->queryString();
$pagination_links = null;
/*
* PAGINATION SCRIPT
* seperates the list into pages
*/
$numofpages = $totalrows / $limit;
/* We divide our total amount of rows (for example 102) by the limit (25). This
will yield 4.08, which we can round down to 4. In the next few lines, we'll
create 4 pages, and then check to see if we have extra rows remaining for
a 5th page. */
for ($i = 1; $i <= $numofpages; $i++) {
/* This for loop will add 1 to $i at the end of each pass until $i
is greater than $numofpages (4.08). */
if ($i == $page) {
$pagination_links .= '<div class="page-link"><span>' . $i
. '</span></div> ';
} else {
$pagination_links .= '<div class="page-link"><a href="?page=' . $i
. '&' . $query_string . '">' . $i . '</a></div> ';
}
/* This if statement will not make the current page number available
in link form. It will, however, make all other pages available
in link form. */
} // This ends the for loop
if (($totalrows % $limit) != 0) {
/* The above statement is the key to knowing if there are remainders, and it's
all because of the %. In PHP, C++, and other languages, the % is known as a
Modulus. It returns the remainder after dividing two numbers. If there is no
remainder, it returns zero. In our example, it will return 0.8 */
if ($i == $page) {
$pagination_links .= '<div class="page-link"><span>' . $i
. '</span></div> ';
} else {
$pagination_links .= '<div class="page-link"><a href="?page=' . $i
. '&'.$query_string.'">'.$i.'</a></div> ';
}
/* This is the exact statement that turns pages into link
form that is used above */
} // Ends the if statement
return $pagination_links;
}
//added by drale.com - 1-19-2010
function showNext($totalrows,$page,$limit,$text="next »")
{
$next_link = null;
$numofpages = $totalrows / $limit;
if ($page < $numofpages) {
$page++;
$next_link = '<div class="page-link"><a href="?page=' . $page
. '&'.$query_string.'">' . $text . '</a></div>';
}
return $next_link;
}
function showPrev($totalrows,$page,$limit,$text="« prev")
{
$next_link = null;
$numofpages = $totalrows / $limit;
if ($page > 1) {
$page--;
$prev_link = '<div class="page-link"><a href="?page=' . $page
. '&' . $query_string . '">'.$text.'</a></div>';
}
return $prev_link;
}
function queryString()
{
//matches up to 10 digits in page number
$query_string = eregi_replace("page=[0-9]{0,10}&","",$_SERVER['QUERY_STRING']);
return $query_string;
}
}
?>
【问题讨论】:
-
恐怕还不止这些。例如,当您在 25 页的第 15 页时,您希望它如何表现,您应该在开头和结尾都剪掉几页,或者您希望它如何工作?
-
对不起,我忘记了,如果您在第 15 页,请在开头剪掉一些内容,所以它会这样:上一个 7 8 9 10 11 12 13 14 15..24 25 下一个。谢谢
标签: php pagination