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

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


О принципах реализации постраничной прокрутки

Поиск:
О Принципах реализации постраничной прокрутки записей с использование MySQL

Итак. Очень часто во время появления активности или сразу ставиться задача реализовать постраничную прокрутку материалов.
На практике зачастую, многие прибегают к игнорированию написания правильной прокрутки.
Очень часто наблюдается тенденция: вытащить все записи из таблицы, и прокрутить все распечатав нужные.
Также не редко наблюдается отсутствие нумерации страниц или же их кол-во достигает нескольких десятков при большом кол-ве записей.

Рассмотрим правильною полосу.

Правильная полоса должна иметь:
1) Кнопки вперед и назад в случае если имеется следующая и предыдущая страницы.
2) Список страниц
3) Ограничение списка страниц для компактности
4) Указания в виде многоточия указывающие на наличие страниц не входящих в ограничитель, но имеющихся в списке.

Ниже приведен комментированый код вышеописаной прокрутки.

Код
<?php
// Данный пример демонстрирует систему постраничной навигации с использованием таблицы table.

if (!isset($_GET['page'])) {$_GET['page'] = '1';} // Проверяем, введена-ли пользователем страница. Если нет, устанавливаем первую.
$to_page = 5; // Колличество записей на страницу.
$pages_links = 5; // Указываем кол-во страниц, которые будут отображаться в перечислении относительно текущей.

$p = ($_GET['page'] * $to_page) - $to_page; // Вычисляем стартовую запись.

$query = "SELECT COUNT(*) FROM table"; // Узнаем кол-во записей в таблице.
$result = mysql_query($query);
$count = mysql_result($result,0,'COUNT(*)');
$pages = ceil($count / $to_page); // Вычисляем кол-во страниц.

if ($_GET['page'] > $pages) {
   header("Location: pages.php?page=".$pages);
} elseif($_GET['page'] < 1) {
   header("Location: pages.php?page=1");
}

// Вывод содержимого нужных записей в виде массивов.
$query = "SELECT * FROM table LIMIT ".$p.",".$to_page; // Выбираем из таблицы указанное кол-во записей начиная со стартовой на текущей странице.
$result = mysql_query($query);

while ($table = mysql_fetch_assoc($result)) {
   print_r($table); // Выводим содержимое строки таблицы
}
// Конец вывода записей.

// Навигация по списку
$pages_links_view_max = 0;
$pages_links_view_min = 0;

if ($pages - $_GET['page'] >= ($pages_links + 1)) {
   $to_max = $_GET['page'] + $pages_links;
   $pages_links_view_max = 1;
} else {
   $to_max = $pages;
}

// Вычесляем. Является ли текущая страница превышающей кол-во страниц, которые будут отображаться в перечислении относительно текущей
if ($_GET['page'] > ($pages_links + 1)) {
   $to_min = $_GET['page'] - $pages_links;
   $pages_links_view_min = 1;
} else {
   $to_min = 1;
}

if ($pages_links_view_min == 1) {
   echo ' <A href="?page=1"> К началу</A>';
}

if ($_GET['page'] > 1) {
   echo ' <A href="?page='.($_GET['page']-1).'"> &lt;&lt;</A>';
}

if ($pages_links_view_min == 1) {
   echo ' ...';
}

// Вычесляем. Является ли текущая страница меньше чем кол-во страниц минус кол-во страниц, которые будут отображаться в перечислении относительно текущей
for ($p = $to_min; $p <= $to_max; $p++) {
   if ($_GET['page'] == $p) {
       echo ' <B>['.$p.']</B>';
   } else {
       echo ' <A href="?page='.$p.'">['.$p.']</A>';
   }
}
if ($pages_links_view_max == 1) {
   echo ' ...';
}

if ($_GET['page'] < $pages) {
   echo ' <A href="?page='.($_GET['page']+1).'"> &gt;&gt;</A>';
}

if ($pages_links_view_max == 1) {
   echo ' <A href="?page='.$pages.'"> Последняя ['.$pages.']</A>';
}
?>
Автор: Master






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

 

 

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


Популярные:
  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. Проверить дубляжи в столбце


 

 

 
 
На главную