Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Построение страниц во выборкам из MySQL

Поиск:
Внимание! Выражаю огромную благодарность MuToGeN за идею и реализацию изначального алгоритма разбивки на страницы из выборки MySQL и создание ссылок с текущими (заданными переменными).
Я лишь просто облек это в функцию и добавил, на мой взгляд необходимых вещей.

Сама функция построения страниц

Код

function pages_list($query, $page = 0, $sortcolumn = "", $sort = "DESC", $ignoreparameters = "", $nextprevious = TRUE, $scriptname = "", $resultsperpage = 20) {
 if (!$scriptname || ($scriptname == "")) $scriptname = $HTTP_GLOBAL_VARS['PHP_SELF'];
 if (!$ignoreparameters || ($ignoreparameters == "")) $ignoreparameters = array("page", "sortcolumn", "sort");
 if (!$sortcolumn || ($sortcolumn == "")) $sorting = "";
 else $sorting = " ORDER BY ".$sortcolumn." ".$sort." ";
 $n = mysql_num_rows(mysql_database_query($query));
 $cp = 0;
 foreach ($_REQUEST as $name => $value)
  if (!in_array($name,$ignoreparameters)) $vars .= "&".$name."=".$value;
 while ($n > 0) {
  if ($cp == $page) $pages .= ($cp+1);
  else $pages .= "<a href=\"".$scriptname."?page=".$cp.$vars."\">".($cp+1)."</a>";
  $pages .= " ";
  $cp++;
  $n -= $resultsperpage;
 }
 $query .= $sorting."LIMIT ".($page*$resultsperpage).", ".$resultsperpage;
 if ($nextprevious) {
  $nextpage = $page+1;
  $previouspage = $page-1;
  if ($previouspage >= 0) $previouspage = "[<a href=\"".$scriptname."?page=".$previouspage.$vars."\">&lt;&lt;&lt;</a>] ";
  else $previouspage = "";
  if ($nextpage < $cp) $nextpage = " [<a href=".$scriptname."?page=".$nextpage.$vars.">&gt;&gt;&gt;</a>]";
  else $nextpage = "";
  $pages = $previouspage.$pages.$nextpage;
 }
 $results[pages] = $pages;
 $results[query] = $query;
 $results[vars] = $vars;
 return $results;
}



вызов:

Код

if (!$page) $page = 0;
if (!$sortcolumn) $sortcolumn = "column_1";
$query = "SELECT * FROM table";
$results = pages_list($query, $page, $sortcolumn, $sort, array("page", "sortcolumn", "sort", "PHPSESSID"), TRUE, "", 25);



где:
первый параметр - запрос SQL
второй - страница
третий - сортировка по выбранному столбцу
четвертый - порядок сортировки (ASC или DESC)
пятый - массив пропускаемых значений, при генерации ссылок
шестой - показывать ли следующую/предыдущую страницы
седьмой - имя скрипта (обычно пропускается, так как указывает на самого себя)
восьмой - количество выборок на странице


получаемые значения:
$results[pages] - строка со ссылками на другие страницы
$results[query] - образованный запрос, с выборкой именно для этой страницы и с сортировкой, если указан столбец для сортировки
$results[vars] - строка со всеми параметрами (обычно используется для построения дополнительных ссылок на текущей странице)

================================================================
А вот этот вариант по-моему гораздо удобней... формат построения номеров страниц, такой же как у форума:
Цитата
Страницы (29) « Первая ... 3 4 [5] 6 7 ... Последняя »


только вместо двух страниц по краям - три...

Цитата
Страницы (29) « Первая ... 3 4 5 [6] 7 8 9 ... Последняя »


Код

function pages_list($query, $page = 0, $sortcolumn = "", $sort = "DESC", $ignoreparameters = "", $resultsperpage = 20, $scriptname = "") {
 if (!$scriptname || ($scriptname == "")) $scriptname = $HTTP_GLOBAL_VARS['PHP_SELF'];
 if (!$ignoreparameters || ($ignoreparameters == "")) $ignoreparameters = array("page", "sortcolumn", "sort");
 if (!$sortcolumn || ($sortcolumn == "")) $sorting = "";
 else $sorting = " ORDER BY ".$sortcolumn." ".$sort." ";
 $records = $n = mysql_num_rows(mysql_database_query($query));
 foreach ($_REQUEST as $name => $value)
  if (!in_array($name,$ignoreparameters)) $vars .= "&".$name."=".$value;
 $totalpages = 0;
 while ($n > 0) {
  $totalpages++;
  $n -= $resultsperpage;
 }
 $n = $records;
 $cp = 0;
 while ($n > 0) {
  if (($cp >= $page-3) && ($cp <= $page+3)) {
   if ($cp == $page) $tpages .= "<b>[".($cp+1)."]</b>";
   else $tpages .= "<a href=\"".$scriptname."?page=".$cp.$vars."\">".($cp+1)."</a>";
   $tpages .= " ";
  }
  $cp++;
  $n -= $resultsperpage;
 }
 $query .= $sorting."LIMIT ".($page*$resultsperpage).", ".$resultsperpage;
 $pages = "Страницы: (".$cp.") ";
 if (($page != 0) && ($page-3 > 0)) $pages .= "<a href=\"".$scriptname."?page=0".$vars."\">&laquo; Ïервàя</a> ... ";
 $pages .= $tpages;
 if (($page != $cp-1) && ($page+4 < $cp)) $pages .= "... <a href=\"".$scriptname."?page=".($cp-1).$vars."\">Последняя &raquo;</a>";
 $results[pages] = $pages;
 $results[query] = $query;
 $results[vars] = $vars;
 return $results;
}


вызов:

Код

if (!$page) $page = 0;
if (!$sortcolumn) $sortcolumn = "column_1";
$query = "SELECT * FROM table";
$results = pages_list($query, $page, $sortcolumn, $sort, array("page", "sortcolumn", "sort", "PHPSESSID", 25, "");


где:
первый параметр - запрос SQL
второй - страница
третий - сортировка по выбранному столбцу
четвертый - порядок сортировки (ASC или DESC)
пятый - массив пропускаемых значений, при генерации ссылок
шестой - количество выборок на странице
седьмой - имя скрипта (обычно пропускается, так как указывает на самого себя)


получаемые значения те же:
$results[pages] - строка со ссылками на другие страницы
$results[query] - образованный запрос, с выборкой именно для этой страницы и с сортировкой, если указан столбец для сортировки
$results[vars] - строка со всеми параметрами (обычно используется для построения дополнительных ссылок на текущей странице) 
Автор: Cepera
Сайт: http://www.cepera.org/






Просмотров: 3969

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную