Новичок
Покинул форум
Сообщений всего: 1
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
|
Сугубо математическая задача
Получаем три числа 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 ""; $n = isset($n) ? $n : 10; $current = ($current > 1) ? $current : 1; $page_count = abs(ceil($count/$n)); // Всего страниц 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; $end = is_null($end) ? '%last</div>' : $end; $link = is_null($link) ? '<a href="?'.$query.'=%i">%i</a>' : $link; $active = is_null($active) ? '<span>%i</span>' : $active; $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; }
(Добавление)
К сожалению поторопился с отправкой темы, не закончив описания
Скрипт как уже наверное догадались написан на PHP.
Пример использования скрипта:
PHP:
скопировать код в буфер обмена
$currentPage = ($_GET['str']) ? $_GET['str']*1 : 1; $news_count = count($newsDB->news); $n2p = 10; // Количество новостей на страницу $pagination = paginator($news_count, $n2p, $currentPage, '<div class="nextPage"><strong>Всего новостей: %count</strong>%first', '%last</div>'); $start = ($currentPage > 1) ? $news_count-$n2p*($currentPage-1)-1 : $news_count-1; $stop = ($news_count-$n2p*$currentPage > 0) ? $news_count-$n2p*$currentPage : 0; for($i = $start; $i >= $stop; $i--){ $news = $newsDB->news[$i]; $anons_date = $news['date']; $anons_header = xmlentities (iconv('UTF-8', 'windows-1251', $news->header),'outXML'); $anons_text = anons (xmlentities (iconv('UTF-8', 'windows-1251', $news->text),'outXML'), 260 ); $anons_img = (!empty($news->images->image[0])) ? "<img src=\"http://".$_SERVER['HTTP_HOST']."/img/".$news->images->image[0]['prevew'].".jpg\" alt=\"\" width=\"140px\" height=\"90px\">" : ""; $tabNews .= "<div class=\"news\"><a href=\"index.php?news_id=$i\">".$anons_img."<h2><span>".$anons_date."</span>".$anons_header."</h2></a><p>".$anons_text."... <a href=\"?news_id=$i\">читать далее »</a></p></div>\n"; }
|