私はページ付けのために持っているこの機能を持っています、そしてそれはあなたに一度に10ページだけをリンクで表示するように設定されています。つまり、11ページあるとすると、リンクは次のようになります。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 次へ» | 最後 "
そして、11ページでは次のようになります
«最初| «前へ| 11
しかし、10ページ目はこんな感じです
«最初| «前へ| 11 | 次へ» | 最後 "
これが私が使用しているPHP関数です(申し訳ありませんが、かなり大きいです)
function get_paging_link($sql, $itemPerPage = 10, $strGet = '') {
global $db2;
global $q;
$result = $db2->GetDataTable($sql);
$pagingLink = '';
$totalResults = count($result);
$totalPages = ceil($totalResults / $itemPerPage);
$numLinks = 10;
if ($totalPages > 1) {
$self = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
if (isset($_POST['page']) && $_POST['page'] > 0) {
$pageNumber = $_POST['page'];
} else {
$pageNumber = 1;
}
if ($pageNumber > 1) {
$page = $pageNumber - 1;
if ($page > 1) {
$prev = " <a class=\"paginglink\" href=\"#\" onclick=\"refreshsearch('$q',$page);return false;\">« Prev <sp>|</sp></a> ";
} else {
$prev = " <a class=\"paginglink\" href=\"#\" onclick=\"refreshsearch('$q',$page);return false;\">« Prev <sp>|</sp></a> ";
}
$first = " <a class=\"paginglink\" href=\"#\" onclick=\"refreshsearch('$q',1);return false;\">« First <sp>|</sp></a> ";
} else {
$prev = '';
$first = '';
}
if ($pageNumber < $totalPages) {
$page = $pageNumber + 1;
$next = " <a class=\"paginglink\" href=\"#\" onclick=\"refreshsearch('$q',$page);return false;\"><sp>|</sp> Next »</a> ";
$last = " <a class=\"paginglink\" href=\"#\" onclick=\"refreshsearch('$q',$totalPages);return false;\"><sp>|</sp> Last »</a> ";
} else {
$next = '';
$last = '';
}
$start = $pageNumber - ($pageNumber % $numLinks) + 1;
$end = $start + $numLinks - 1;
$end = min($totalPages, $end);
$pagingLink = array();
for ($page = $start; $page <= $end; $page++) {
if ($page == $pageNumber) {
$pagingLink[] = " $page ";
} else {
if ($page == 1) {
$pagingLink[] = " <a class=\"paginglink\" href=\"#\" onclick=\"refreshsearch('$q',1);return false;\">$page</a> ";
} else {
$pagingLink[] = " <a class=\"paginglink\" href=\"#\" onclick=\"refreshsearch('$q',$page);return false;\">$page</a> ";
}
}
}
$pagingLink = implode(' <sp>|</sp> ', $pagingLink);
$pagingLink = $first . $prev . $pagingLink . $next . $last;
}
return $pagingLink;
}
数学で何が間違っているのかよくわかりません。私は1の足し算と引き算をいじってみましたが、役に立ちませんでした。前もって感謝します!そして背の高いポストをごめんなさい
編集:問題をより明確にするために、私が10ページごと(10、20、30、...)にいるとき、それは次の10個のリンクのセットを表示するときです。10ページ目になるとすぐにページが表示されます。
編集2:$start = $pageNumber - ($pageNumber % $numLinks) + 1;
ページング機能(で始まり、前で終わる)を含むブロックを次のように置き換えました$pagingLink = implode(' <sp>|</sp> ', $pagingLink);
:
$max_page_links = 10;
if ($pageNumber > $max_page_links / 2) {
if (ceil($totalResults / $itemPerPage) - $pageNumber < (($max_page_links / 2) + 1)) {
$start_counter = $pageNumber - ($max_page_links - (ceil($totalResults / $itemPerPage) - $pageNumber)) + 1;
$end_counter = ceil($totalResults / $itemPerPage);
} else {
$start_counter = $pageNumber - (($max_page_links / 2) - 1);
$end_counter = $pageNumber + ($max_page_links / 2);
}
} else {
$start_counter = 1;
$end_counter = $max_page_links;
}
for ($i = $start_counter; $i <= $end_counter; $i++) {
if ($i == $pageNumber) {
$pagingLink[] = " $i ";
} else {
$pagingLink[] = " <a class=\"paginglink\" href=\"#\" onclick=\"refreshsearch('$q',$i);return false;\">$i</a> ";
}
}