total = $total;
# Устанавливаем количество записей на страницу
$this->limit = $limit;
# Устанавливаем ключ в url
$this->index = $index;
# Устанавливаем количество страниц
$this->amount = $this->amount();
# Устанавливаем номер текущей страницы
$this->setCurrentPage($currentPage);
}
/**
* Для вывода ссылок
*
* @return HTML-код со ссылками навигации
*/
public function get()
{
# Для записи ссылок
$links = null;
# Получаем ограничения для цикла
$limits = $this->limits();
$html = '
';
# Возвращаем html
return $html;
}
/**
* Для генерации HTML-кода ссылки
* @param integer $page - номер страницы
*
* @return
*/
private function generateHtml($page, $text = null)
{
# Если текст ссылки не указан
if (!$text)
# Указываем, что текст - цифра страницы
$text = $page;
$currentURI = rtrim($_SERVER['REQUEST_URI'], '/') . '/';
$currentURI = preg_replace('~/page-[0-9]+~', '', $currentURI);
# Формируем HTML код ссылки и возвращаем
return
'' . $text . '';
}
/**
* Для получения, откуда стартовать
*
* @return массив с началом и концом отсчёта
*/
private function limits()
{
# Вычисляем ссылки слева (чтобы активная ссылка была посередине)
$left = $this->current_page - round($this->max / 2);
# Вычисляем начало отсчёта
$start = $left > 0 ? $left : 1;
# Если впереди есть как минимум $this->max страниц
if ($start + $this->max <= $this->amount)
# Назначаем конец цикла вперёд на $this->max страниц или просто на минимум
$end = $start > 1 ? $start + $this->max : $this->max;
else {
# Конец - общее количество страниц
$end = $this->amount;
# Начало - минус $this->max от конца
$start = $this->amount - $this->max > 0 ? $this->amount - $this->max : 1;
}
# Возвращаем
return
array($start, $end);
}
/**
* Для установки текущей страницы
*
* @return
*/
private function setCurrentPage($currentPage)
{
# Получаем номер страницы
$this->current_page = $currentPage;
# Если текущая страница боле нуля
if ($this->current_page > 0) {
# Если текунщая страница меньше общего количества страниц
if ($this->current_page > $this->amount)
# Устанавливаем страницу на последнюю
$this->current_page = $this->amount;
} else
# Устанавливаем страницу на первую
$this->current_page = 1;
}
/**
* Для получеия общего числа страниц
*
* @return число страниц
*/
private function amount()
{
# Делим и возвращаем
return round($this->total / $this->limit);
}
}