Intereting Posts
Создание правил для поля кода, если это поле не отключено jpg bmp расширение png GET из изображения Для URL PHP mysql eav_entity_type без цитаты при установке PHP5. Два способа объявления массива как члена класса Codeigniter 2.1.3: sess_destroy () вызывает Неопределенный индекс: session_id и т. Д., Когда «sess_use_database» == TRUE проблема с знаком «&» при использовании ajax для отправки данных на php Smarty + CodeIgniter – правильный способ использования модели Как обновить несколько проектов на основе одной CMS Можно ли изменить ширину табуляции (\ t) в строке PHP? У меня есть форма, в которой, если пользователь вводит ввод, он должен проверять наличие отрицательного или пустого поля ввода и выдавать предупреждающее сообщение Модуль загрузки файла jquery для отправки дополнительного параметра Пользовательский created_at и использовать только custom created_at Лучшая практика: импортируйте файл mySQL в PHP; разделенные запросы Многострочные проблемы Zend Framework PDF str_replace с массивом

разбиение на страницы – 10 страниц на страницу

У меня есть сценарий разбивки на страницы, который отображает список всех таких страниц:
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 prev и 5 next

 for($i = max(1, $page - 5); $i <= min($page + 5, $total_pages); $i++) 

Если вы просто хотите быстро исправить, вы можете попробовать немного изменить цикл for . Например, вы не захотите начинать с 1, и вам не обязательно понадобится цикл, а $i <= $total_pages .

Отображение нечетного числа ссылок на страницы может иметь больше смысла: вы отобразите текущую страницу, затем четыре слева от нее и четыре вправо. Что-то вроде этого:

 for($i = $page_number - 4; $i <= $page_number + 4; $i++) { 

но вам, очевидно, нужно будет сделать немного больше, чтобы вы не показывали отрицательные числа или отображали больше ссылок, чем есть страницы.

 $page = 3; $totalPages = 33; $count = 9; $startPage = max(1, $page - $count); $endPage = min( $totalPages, $page + $count); if($page-1 > 0){ echo '<a class="btn btn-default" href="/search-results?page="'.($page- 1).'"><< Prev</a>'; } for($i = $startPage; $i < $endPage; $i++): if($i <= $totalPages): echo '<a class="btn btn-<?=$i == $page || $i == 1 && $page == "" ? 'success' : 'primary';?>"style="margin-right:2px;" href="/search- results?page="'.$i.'">'.$i.'</a>'; endif; endfor; if($page < $totalPages){ echo '<a class="btn btn-default" href="/search-results?page="'. ($page+1).'">Next >></a>'; } 

Я только что искал ответ на тот же оригинальный вопрос и не мог его найти, так что это то, что я придумал. Я надеюсь, что кто-то найдет это полезным.

 $totalPages = 20; $currentPage = 1; if ($totalPages <= 10) { $start = 1; $end = $totalPages; } else { $start = max(1, ($currentPage - 4)); $end = min($totalPages, ($currentPage + 5)); if ($start === 1) { $end = 10; } elseif ($end === $totalPages) { $start = ($totalPages - 9); } } for ($page = $start; $page <= $end; $page++) { echo '[' . $page . ']'; } 

Результаты:

 $currentPage = 1; // [1][2][3][4][5][6][7][8][9][10] $currentPage = 4; // [1][2][3][4][5][6][7][8][9][10] $currentPage = 10; // [6][7][8][9][10][11][12][13][14][15] $currentPage = 17; // [11][12][13][14][15][16][17][18][19][20] $currentPage = 20; // [11][12][13][14][15][16][17][18][19][20]