У меня есть сценарий разбиения на страницы, который отображает список всех страниц как так:
prev [1][2][3][4][5][6][7][8][9][10][11][12][13][14] next
Но я хотел бы только показать десять из чисел за один раз:
prev [3][4][5][6][7][8][9][10][11][12] next
Как я могу выполнить это? Вот мой код до сих пор:
<?php
/* Set current, prev and next page */
$page = (!isset($_GET['page']))? 1 : $_GET['page'];
$prev = ($page - 1);
$next = ($page + 1);
/* Max results per page */
$max_results = 2;
/* Calculate the offset */
$from = (($page * $max_results) - $max_results);
/* Query the db for total results.
You need to edit the sql to fit your needs */
$result = mysql_query("select title from topics");
$total_results = mysql_num_rows($result);
$total_pages = ceil($total_results / $max_results);
$pagination = '';
/* Create a PREV link if there is one */
if($page > 1)
{
$pagination .= '< a href="?page='.$prev.'">Previous</a> ';
}
/* Loop through the total pages */
for($i = 1; $i <= $total_pages; $i++)
{
if(($page) == $i)
{
$pagination .= $i;
}
else
{
$pagination .= '< a href="index.php?page='.$i.'">'.$i.'</a>';
}
}
/* Print NEXT link if there is one */
if($page < $total_pages)
{
$pagination .= '< a hr_ef="?page='.$next.'"> Next</a>';
}
/* Now we have our pagination links in a variable($pagination) ready to
print to the page. I pu it in a variable because you may want to
show them at the top and bottom of the page */
/* Below is how you query the db for ONLY the results for the current page */
$result=mysql_query("select * from topics LIMIT $from, $max_results ");
while ($i = mysql_fetch_array($result))
{
echo $i['title'].'<br />';
}
echo $pagination;
?>
10 следующих страниц
for($i = $page + 1; $i <= min($page + 11, $total_pages); $i++)
или если вы хотите 5 предыдущих и 5 следующих
for($i = max(1, $page - 5); $i <= min($page + 5, $total_pages); $i++)
Если вам просто нужно быстрое исправление, вы можете попробовать немного изменить цикл for
. Например, вы не захотите начинать с 1, и вам не обязательно будет цикл while $ i <= $ total_pages
.
Отображение нечетного количества ссылок на страницы может иметь больше смысла: вы бы отобразили текущую страницу, затем четыре слева от нее и четыре справа. Примерно так:
for($i = $page_number - 4; $i <= $page_number + 4; $i++) {
, но вам, очевидно, нужно сделать немного больше, чтобы убедиться, что вы не отображаете отрицательные числа или отображаете больше ссылок, чем страниц.