Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Функция постраничной навигации

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
alex_ku
Отправлено: 20 Ноября, 2011 - 08:27:32
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Сугубо математическая задача Хорошо
Получаем три числа 1-всего элементов, 2-сколько элементов выводиться на странице, 3-текущая позиция. Что вы будите делать с полученной цифрой это уже другой вопрос.
Функция писалась для простенькой админки, используется во многих разделах, поэтому требовалась возможность настройки внешнего вида.


PHP:
скопировать код в буфер обмена
  1.  
  2. // Функция вывода постраничной навигации
  3. /*      string paginator(int $count, int $n[, int $current[, string $start[, string $end[, string $link[, string $active]]]]]);
  4.         внутренние переменные:
  5.                 %i - текущий номер
  6.                 %count - общее число записей
  7.                 %first - первая страница (вид ссылки настраивается вручную)
  8.                 %last - последняя страница (вид ссылки настраивается вручную)
  9.                 $query - переменная запроса страницы, по умолчанию 'str'
  10.         принемает:
  11.                 $count - общее количество, если < 0, функция вернёт пустую строку
  12.                 $n - число записей на страницу, если < 1, функция вернёт "Всего записей: ".$count
  13.                         также, если все записи можно уместить на одну страницу, то вернёт общее число записей
  14.                 $current - текущее положение (если нет, то считается, что страница первая)
  15.                 $start - префикс блока, по умолчанию '<div class="paginator"><strong>Всего новостей: %count</strong><br />%first'
  16.                 $end - закрытие блока, по умолчанию '%last</div>'
  17.                 $link - шаблон ссылки, по умолчанию '<a href="?str=%i">%i</a>'
  18.                 $active - шаблон активной страницы, по умолчанию '<span>%i</span>'
  19. */
  20. function paginator($count = 0, $n = 10, $current = 1, $start = NULL, $end = NULL, $link = NULL, $active = NULL){
  21.         // Инициализация всех переменных, назначение дефолтных значений
  22.         $pages = "";
  23.         // Цифры
  24.         $count = ($count > 0) ? $count : 0;
  25.         if($count <= 0) return "";
  26.         $n = isset($n) ? $n : 10;
  27.         $current = ($current > 1) ? $current : 1;
  28.         $page_count = abs(ceil($count/$n)); // Всего страниц
  29.         if($page_count < 1) return "Всего записей: ".$count;
  30.         $current = ($current < $page_count) ? $current : $page_count;
  31.         $current = ($current < 0) ? 1 : $current;
  32.         $v = 4; // количиство ссылок по краям (активная посередине, 4 по краям)
  33.        
  34.         // Строки
  35.         $query = "str"; // $_GET['str'] - переменная номера страницы
  36.         $start = is_null($start) ? '<div class="paginator"><span>Всего новостей: %count</span><br />%first' : $start;
  37.         $end = is_null($end) ? '%last</div>' : $end;
  38.         $link = is_null($link) ? '<a href="?'.$query.'=%i">%i</a>' : $link;
  39.         $active = is_null($active) ? '<span>%i</span>' : $active;
  40.         $first = ($current > $v AND $page_count > 2*$v+1) ? '<a href="http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'" title="На первую страницу">&laquo;&laquo;&laquo;</a>' : "";
  41.         $last = ($page_count > 2*$v+1) ? '<a href="http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'/?'.$query.'='.$page_count.'" title="На последнюю страницу">&raquo;&raquo;&raquo;</a>' : "";
  42.        
  43.         if($page_count <= 2*$v+1){ // Если все страницы укладываются в определённый диапазон, то просто выводим их все
  44.                 for($i=1; $i<=$page_count; $i++){
  45.                         $pages .= ($i == $current) ? str_replace('%i', $i, $active) : str_replace('%i',$i, $link);
  46.                 }
  47.         } else {
  48.                 // Количество страниц превышает диапазон, расчитываем
  49.                 // и выводим по принципу -4 -3 -2 -1 X +1 +2 +3 +4
  50.                 $start = ($current-($v+1) > 0) ? $current-$v : 1;
  51.                 $stop = ($page_count < 2*$v+1) ? $page_count : $current+$v;
  52.                 for($i=$start; $i<=$stop; $i++){
  53.                         $pages .= ($i == $current) ? str_replace('%i', $i, $active) : str_replace('%i',$i, $link);
  54.                 }
  55.         }
  56.        
  57.         // Сборка блока
  58.         $paginator = str_replace(array('%count','%first'),array($count, $first), $start);
  59.         $paginator .= $pages;
  60.         $paginator .= str_replace('%last',$last, $end);
  61.        
  62.         return $paginator;
  63. }
  64.  

(Добавление)
К сожалению поторопился с отправкой темы, не закончив описания Растерялся
Скрипт как уже наверное догадались написан на PHP.

Пример использования скрипта:
PHP:
скопировать код в буфер обмена
  1.  
  2.         $newsDB = simplexml_load_file('news.xml');
  3.         $currentPage = ($_GET['str']) ? $_GET['str']*1 : 1;
  4.         $news_count = count($newsDB->news);
  5.         $n2p = 10; // Количество новостей на страницу
  6.        
  7.         $pagination = paginator($news_count, $n2p, $currentPage, '<div class="nextPage"><strong>Всего новостей: %count</strong>%first', '%last</div>');
  8.        
  9.         $start = ($currentPage > 1) ? $news_count-$n2p*($currentPage-1)-1 : $news_count-1;
  10.         $stop = ($news_count-$n2p*$currentPage > 0) ? $news_count-$n2p*$currentPage : 0;
  11.        
  12.         for($i = $start; $i >= $stop; $i--){
  13.                 $news = $newsDB->news[$i];
  14.                 $anons_date = $news['date'];
  15.                 $anons_header = xmlentities(iconv('UTF-8', 'windows-1251', $news->header),'outXML');
  16.                 $anons_text = anons(xmlentities(iconv('UTF-8', 'windows-1251', $news->text),'outXML'), 260);           
  17.                 $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\">" : "";
  18.                 $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\">читать далее &raquo;</a></p></div>\n";
  19.         }
  20.  

Скачать файл: paginator.txt
Скачан раз: 120
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Пользовательские функции »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB