Раньше всегда для постраничной навигации считал общее кол-во записей в БД, и от этого уже отталкивался - как рисовать кнопки навигации.
А сегодня что-то решил сделать по такой логике:
Заранее известные константы:
$onpage = 5;// - желаемое количество записей на одной странице.
Передана ли в URL страничка?
//$params - аргументы для экшена, а $params[0] - это переданный в УРЛ номер страницы.
$page=$params && !empty($params[0]) ? (int)$params[0] : 1; //номер текущей страницы
Выполняем обычный запрос с
... LIMIT ($page-1)*$onpage,$onpage
Если записей по запросу получилось ноль, то пшёл нафиг - нечего вручную номер страницы в URL менять.
Сразу же имеем количество выданных строк по запросу.
Получается что:
у нас после выполнения малюсенького запроса без подсчета общего количества строк, имеется:
1) номер текущей страницы ($page)
2) количество желаемых строк на странице ($onpage)
2) количество выданных из БД записей ($rowCount)
Дальше всё просто:
1)
if($page==1 && $rowCount<$onpage)
- Мы на первой странице, строк мало, не рисуем листалку
2)
if($page>1 && $rowCount<$onpage)
- Мы на странице $page, рисуем листалку с 1-й по $page кнопки, дальше не нужно, ибо строк мало, листать некуда уже.
И вот она, наконец-то, проблема:
Если
$rowCount==$onpage
, то непонятно - рисовать кнопку "Next Page" или нет?
Я хотел спросить - может есть какое-то элегантное решение?
Мои мысли:
- Может отдельно одним запросом выдёргивать следующую запись? Если есть такая - рисуем "Далее"
- Может при выборке сразу задать лимитом на одну строку больше, но не выводить последнюю - зато мы уже заранее знаем, есть ли что-то дальше или нет.
- Кто-то таким извращался, кроме меня?
- Может лучше спать уже пойти, и бросить заниматься ерундой?