Получаем три числа 1-всего элементов, 2-сколько элементов выводиться на странице, 3-текущая позиция. Что вы будите делать с полученной цифрой это уже другой вопрос.
Функция писалась для простенькой админки, используется во многих разделах, поэтому требовалась возможность настройки внешнего вида.
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- // Функция вывода постраничной навигации
- /* string paginator(int $count, int $n[, int $current[, string $start[, string $end[, string $link[, string $active]]]]]);
- внутренние переменные:
- %i - текущий номер
- %count - общее число записей
- %first - первая страница (вид ссылки настраивается вручную)
- %last - последняя страница (вид ссылки настраивается вручную)
- $query - переменная запроса страницы, по умолчанию 'str'
- принемает:
- $count - общее количество, если < 0, функция вернёт пустую строку
- $n - число записей на страницу, если < 1, функция вернёт "Всего записей: ".$count
- также, если все записи можно уместить на одну страницу, то вернёт общее число записей
- $current - текущее положение (если нет, то считается, что страница первая)
- $start - префикс блока, по умолчанию '<div class="paginator"><strong>Всего новостей: %count</strong><br />%first'
- $end - закрытие блока, по умолчанию '%last</div>'
- $link - шаблон ссылки, по умолчанию '<a href="?str=%i">%i</a>'
- $active - шаблон активной страницы, по умолчанию '<span>%i</span>'
- */
- function paginator($count = 0, $n = 10, $current = 1, $start = NULL, $end = NULL, $link = NULL, $active = NULL){
- // Инициализация всех переменных, назначение дефолтных значений
- $pages = "";
- // Цифры
- $count = ($count > 0) ? $count : 0;
- if($count <= 0) return "";
- $current = ($current > 1) ? $current : 1;
- if($page_count < 1) return "Всего записей: ".$count;
- $current = ($current < $page_count) ? $current : $page_count;
- $current = ($current < 0) ? 1 : $current;
- $v = 4; // количиство ссылок по краям (активная посередине, 4 по краям)
- // Строки
- $query = "str"; // $_GET['str'] - переменная номера страницы
- $start = is_null($start) ? '<div class="paginator"><span>Всего новостей: %count</span><br />%first' : $start;
- $first = ($current > $v AND $page_count > 2*$v+1) ? '<a href="http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'" title="На первую страницу">«««</a>' : "";
- $last = ($page_count > 2*$v+1) ? '<a href="http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'/?'.$query.'='.$page_count.'" title="На последнюю страницу">»»»</a>' : "";
- if($page_count <= 2*$v+1){ // Если все страницы укладываются в определённый диапазон, то просто выводим их все
- for($i=1; $i<=$page_count; $i++){
- }
- } else {
- // Количество страниц превышает диапазон, расчитываем
- // и выводим по принципу -4 -3 -2 -1 X +1 +2 +3 +4
- $start = ($current-($v+1) > 0) ? $current-$v : 1;
- $stop = ($page_count < 2*$v+1) ? $page_count : $current+$v;
- for($i=$start; $i<=$stop; $i++){
- }
- }
- // Сборка блока
- $paginator .= $pages;
- return $paginator;
- }