58 lines
1.7 KiB
PHP
58 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace ctiso\View;
|
|
|
|
/**
|
|
* Постраничная навигация
|
|
*/
|
|
class Pages
|
|
{
|
|
static int $range = 5;
|
|
static function getPages($page, $onpage, $count, $prefix = '?')
|
|
{
|
|
$n = ceil($count / $onpage);
|
|
if ($page > $n) $page = $n;
|
|
if ($page < 1) $page = 1;
|
|
$url = 'page=';
|
|
$result = [];
|
|
for ($i = max($page - self::$range, 1); $i <= min($n, $page + self::$range); $i++) {
|
|
$result [] = ['page' => $i, 'href' => ($i != $page) ? self::href($prefix, $url . $i) : false];
|
|
}
|
|
return [
|
|
'all' => ($n > 1),
|
|
'list' => $result,
|
|
'first' => self::href($prefix, $url . 1),
|
|
'last' => self::href($prefix, $url . $n),
|
|
'next' => ($page == $n)? false : self::href($prefix, $url . ($page + 1)) ,
|
|
'prev' => ($page == 1)? false : self::href($prefix, $url . ($page - 1))];
|
|
}
|
|
|
|
/**
|
|
* @deprecated
|
|
* @param int $page номер страницы
|
|
* @param int $onpage количество элем на странице
|
|
* @return string
|
|
*/
|
|
static function getLimit(int $page, int $onpage) {
|
|
if ($page <= 0) { $page = 1; }
|
|
return "LIMIT $onpage OFFSET " . ($page - 1) * $onpage;
|
|
}
|
|
|
|
/**
|
|
* @param int $page номер страницы
|
|
* @param int $onpage количество элем на странице
|
|
* @return array
|
|
*/
|
|
static function _getLimit(int $page, int $onpage) {
|
|
if ($page <= 0) { $page = 1; }
|
|
return [
|
|
'count' => $onpage,
|
|
'start' => ($page - 1) * $onpage,
|
|
];
|
|
}
|
|
|
|
static function href($prefix, $x) {
|
|
return $prefix . $x;
|
|
}
|
|
}
|
|
|