@rusgayfer

Как вывести переключатели страниц правильно?

Вывожу переключатели страниц вот так:

// количество записей, выводимых на странице
$per_page=25;
// получаем номер страницы
if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0;
// вычисляем первый оператор для LIMIT
$start=abs($page*1);
// дальше выводим ссылки на страницы:
$stmNew = $db->dbStream->prepare("SELECT COUNT(*) FROM `asks` ORDER BY `group_id`");
try {
    $stmNew->execute();
} catch (PDOException $error) {
    trigger_error("Ошибка при работе с базой данных: {$error}");
}
$allsgroupss = $stmNew->fetch(PDO::FETCH_ASSOC);
$allgroupss = implode(",", $allsgroupss);
$total_rows = $allgroupss;

$num_pages=ceil($total_rows/$per_page);

for($i=1; $i<=$num_pages; $i++) {
  if ($i-1 == $page) {
  } else {
$strnum .= '<ul class="pagination"><li class="paginate_button"><a href="?page='.$i.'" aria-controls="example2" data-dt-idx="2" tabindex="0">'.$i .'</a></li></ul>';
	
  }
}


Проблема в том, что выводит все переключатели сразу, а мне нужно по 10 переключателей чтобы было вот так:
Назад 1 2 3 4 5 6 7 8 9 10 Вперед

а тут сразу выводит все от 1 до 2428 на страницу кнопок

5aa27324cb383907734863.png
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
Immortal_pony
@Immortal_pony Куратор тега PHP
$minPage = $page-5 > 0 ? $page-5 : 0;
$maxPage = $page+5 < $num_pages ? $page+5 : $num_pages;

$strnum = '<ul class="pagination">';

if ($minPage > 0) {
    $strnum .= '<li class="paginate_button"><a href="?page='.($minPage-1).'" aria-controls="example2" data-dt-idx="2" tabindex="0">Назад</a></li>';
} 

foreach (range($minPage, $maxPage) as $i) {
    $currentPageClass = $i==$page ? ' active' : '';
    $strnum .= '<li class="paginate_button'.$currentPageClass.'"><a href="?page='.$i.'" aria-controls="example2" data-dt-idx="2" tabindex="0">'.$i .'</a></li>';
}

if ($maxPage < $num_pages) {
    $strnum .= '<li class="paginate_button"><a href="?page='.($maxPage+1).'" aria-controls="example2" data-dt-idx="2" tabindex="0">Вперед</a></li>';
} 

$strnum .= '</ul>';
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Barmunk
Получи первые 5 страниц, проверяй на какой странице ты находишься и сдвигай указатель, выводя следующий отрезок массива

Нашел на гитхабе простой класс, который это реализует https://github.com/lotsofcode/php-array-pagination...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы