Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Новости ИТ Программы Книги Games   Обои   Экспорт RSS E-Books
 
Поиск по сайту

TOP-10 программ
Symantec Norton Ghost 9.0
Partition Magic 8.0.2 Pro
Xilisoft 3GP Video Converter v3.1.7.0616b
Norton AntiVirus 2005
Xilisoft 3GP Video Converter v2.1.52.831b
Антивирус Касперского Personal 5.0.303 beta 2
RAR Password Cracker 4.12
ABBYY PDF Transformer v1.00.820
MP3 To Ringtone Gold v3.02
Mobtime Cell Phone Manager v5.3.1
 
Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
 
 

   Интернет технологии -> PHP -> Функции постраничного вывода в PHP


Функции постраничного вывода в PHP

Здравствуйте уважаемые читатели, сегодня хотелось бы обсудит проблему постраничного вывода в PHP и привести возможные пути решения. В этой статье я приведу довольно уникальную функцию с точки зрения её возможностей.
Часто при создании динамических сайтов (отсутствуют страницы как таковые) на базе данных или на файлах возникает вопрос о постраничном выводе информации будь - то статьи, архив новостей или что нибудь другое содержащие довльно большое количество страниц.
Поэтому мы начинаем (если сами не сообразим или кто-нибудь не поможет) рыскать по Интернету в поисках нужного кода, но приличный постраничный вывод найти тяжело. Так что попробуем сделать сегодня что нибудь хорошее, а главное рабочее.

Ниже будет приведён код простейшей функции постраничного вывода, эту функцию можно использовать на небольших сайтах. Все комментарии будут приведены в самой функции, я думаю Вы разберётесь.

/*Простейшая функция постраничного вывода, назавём её просто PagePrint*/
function PagePrint($start, $count) {
$HrefPage='';//----Создаём переменную которая будет содержать постраничный вывод
$number=10;//----Количество записей на странице
/*Подсчитываем количество страниц, где $count - общее количество записей, $number - количество записей на странице*/
$CountPage=(int)(($count+$number-1)/$number);
  /*Перебираем в цикле все страницы*/
  for($link=1; $link <= $CountPage; $link++):
  $PageStart=($link - 1) * $number;//----Рассчитываем точку выборки из базы данных
  $HrefPage=$HrefPage."<a href=".getenv('PHP_SELF')."?start=".$PageStart." target=_parent>".$link."</a>";//--Формируем ссылки
  endfor;
return $HrefPage;
}

Вы видите, что функция имеет два входных параметра $start - точка выборки из базы данных и $count - количество данных, в файле либо в базе данных. Эта функция самая простая, так что на неё мало надежды при использовании на крупных сайтах где много информации.

Рассмотрим более сложную функцию, но имеющую больше функциональности.

function PagePrint($variable) {
global $beginPage, $endPage;//------Объявляем глобальные переменные, отвечающие за ссылку на первую и последнюю страницу
 $href='';//-----Перемменная содержащая в себе постраничный вывод
 $separator=' ';//-----Переменная задающая разделитель между ссылками, по умолчанию пробел
 $style='style="text-decoration:none" style="color:orange" style="font-weight:bold"';//-------Задаёт стиль текущей страницы
 $stylePage='style="text-decoration:none" style="color:blue" style="font-weight:bold"';//------Задаёт стиль ссылки на первую и последнюю страницу
   if(is_array($variable))://------Проверяем тип array
   #Перебираем массив и присваиваем $number - количество записей, $start - точка извлечения, $pageCount - количество записей, $andere - другие свойства ссылки, $class - стиль для ссылок, $showLink - количество ссылок на странице
   list($number, $start, $pageCount, $andere, $class, $showLink)=$variable;
   #Обрабатывам $start
     if(empty($start) && !is_int($start) && !is_numeric($start)) $start=0;
     else $start=$start;
     #Обрабатываем $number
     if(empty($number) && !is_int($number) && !is_numeric($number)) $number=10;
     else $number=$number;


     $page=(($start/10)+1);//-------Рассчитывавем номер страницы
     $count=ceil($pageCount/$number);//------Количество страниц

       #Вывод сслыки на первую и последнюю страницы
        if($count!==1) :
        $beginPage="<a href="".getenv('PHP_SELF')."?start=0".$andere."" ".$stylePage.">перв</a>";//--------Первая страница
        $endPage="<a href="".getenv('PHP_SELF')."?start=".(($count-1)*10).$andere."" ".$stylePage.">посл</a>";//-----Последняя страница
        else: FALSE;
        endif;

         if($pageCount==10): return False;
         else:
         #Постраничный вывод
         $begin=$page - intval($showLink/2);//------Определяет номер страницы с которой выводить
            for($j=0; $j<=$showLink; $j++):
            $i=$begin+$j;//------Номер страницы
            #Защищает скрипт если $<0, будет до тех пор увеличивать пока $showPage=1
              if($i<1):
              $showLink++;
              continue;
              endif;
                #Постраничный вывод
                if($i>$count) break;//-----Защита если количество $i>возможных записей
                  if($i==$page) $href=$href." <a ".$style." >".$i."</a>";//------Вывод текущей страницы
                  else $href=$href." <a href="".getenv('PHP_SELF')."?start=".(($i - 1)*10).$andere."" ".$class.">".$i."</a> ";//------Вывод следующих страниц
           endfor;
         return $href;
         endif;
   endif;
}

Входным параметром функции является массив из шести элементов:

  • $number - количество отображаемых сообщений на странице
  • $start - точка извлечения из базы данных, т.е номер сообщения с которого начинается зивлечение данных
  • $pageCount - общее количество записей, т.е сколько всего содержит база записей
  • $andere - другие параметры ссылки, будь то новые переменные или что-либо ещё
  • $class - данный параметр задаёт внешний вид ссылок, т.е ссылки на страницы
  • $showLink - количество ссылок на странице
Первый параметр может быть передан через метод @$_GET['number'], только в том случае, если Вы захотите чтобы пользователь мог изменять количество сообщений на странице.
Второй параметр обязательно передаётся в массив методом @$_GET['start'], так как параметр $start всё время меняется когда пользователь кликает по ссылке на страницу.

Если, Вы вдруг не захотите, передавать первый, третий, четвёртый, пятый элемент массива вместо них необходимо передать пустоту - '', без пробела между кавычками.

Как Вы можете видеть функция сильно расширяет возможности при создании постраничного вывода. Теперь Вы можете разместить свой постраничный вывод на маленьком участке страницы, регулируя количество отображаемых ссылок параметром $showLink. Всё это удобно при создании галлерей, поиска по каталогу сайта или чего-нибудь ещё.

Ниже будут приведены примеры вызова функции:

  1. PagePrint('', @$_GET['start'], 90, '', '', 10) - Всего записей в базе 90, постраничный вывод будет отображать по десять ссылок
  2. PagePrint(@$_GET['number'], @$_GET['start'], 90, '', '', 10) - Всего записей в базе 90, постраничный вывод будет отображать по десять ссылок и есть возможность изменять количество отображаемых записей на странице
  3. PagePrint(@$_GET['number'], @$_GET['start'], 90, '&category=1', '', 10) - Всего записей в базе 90, постраничный вывод будет отображать по десять ссылок, есть возможность изменять количество отображаемых записей на странице и ссылка передаёт дополнительную переменную category со значением 1
  4. PagePrint(@$_GET['number'], @$_GET['start'], 90, '&category=1', 'style="color:black"', 10) - Всего записей в базе 90, постраничный вывод будет отображать по десять ссылок, есть возможность изменять количество отображаемых записей на странице, ссылка передаёт дополнительную переменную category со значением 1 и ссылки на странице будут чёрного цвета.
Надеюсь приведённые ниже объяснения и комментарии внутри функции помогут разобраться Вам с принципом работы функции.

Для тех кто хочет посмотреть код, а не страницу в интеренте качайте PagePrint. Удачи в изучении!

Примеры к статье: PagePrint_v_1.2.zip

Автор: maksim
Источник: www.users.oskol.ru/~dergach

Ссылки по теме
Внутренние функции
Обработка строк в РНР
PHP и всё такое...
Пишем PHP код, устойчивый к ошибкам
Полезные скрипты на PHP
Почтовые функции в РНР
Полезные функции для работы с файловой системой

Вся документация PHP

 

Компьютерная документация от А до Я - Главная

 
Популярные книги

Практические работы по Excel на уроках информатики

Подробнее

Ремонт и обслуживание компьютера дома

Подробнее

Введение в ИТ Сервис-менеджмент

Подробнее

 

 
Новости ИТ
21.11.2008  Thunderbird 2.0.0.18
21.11.2008  Miranda IM 0.7.13
21.11.2008  Dr. Web 5 Beta
21.11.2008  KAV/KIS 2009 8.0.0.506
21.11.2008  avast! 4.8 (1290)
21.11.2008  Radmin 3.3
21.11.2008  DVR-X162J - новый внешний DVD-привод от Pioneer
21.11.2008  Дизайнерские системные блоки от Smooth Creations
21.11.2008  SPARKLE представляет Calibre P980X+, видеокарту с необычным дизайном
21.11.2008  Titan представляет куллер для Intel i7
21.11.2008  Компактный ПК для дома Acer Aspire X3200 - в России
21.11.2008  Hitachi Data Systems объявляет о новом плане инвестиций в России и странах СНГ
21.11.2008  Назначен новый президент Microsoft в России
21.11.2008  Mustek: новые цифровые видеокамеры начального уровня
21.11.2008  Серверные Core i7 - быстры ли они? Да, и очень, судя по тестам в SPECfp
21.11.2008  NETGEAR: акция для партнеров
21.11.2008  Персональные фотокарты на Яндексе
21.11.2008  Программа для стартапов Microsoft BizSpark анонсирована в России
21.11.2008  Средства защиты от утечек конфиденциальных данных Symantec DLP 8.1 теперь и в России
21.11.2008  Axis: первый 6-канальный IP-видеосервер с поддержкой H.264/M-JPEG
 
Полезно

 
Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.
 
Rambler's Top100