« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга



ПнВтСрЧтПтСбВс
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
    Популярное
Итераторы потоков

Псевдоним базы данных

Проектирование баз данных

Функция AccessResource

Кривая Гильберта

Как организовать двойную парольную защиту данных в Oracle

Создание прозрачного интерфейса программ в Windows 2000-XP

Ресурсы шаблона документов

Использование переключателей для активизации диагностики

3. Сколько бывает консолей




    Архив файлов



    Сообщества

    Документация

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 212
Пользователей: 1
  • bess

  • Статьи:: Интернет технологии :: PHP :: Универсальный постраничный вывод на PHP



    отправить ссылку другу версия для печати  Обсудить на форуме

    Универсальный постраничный вывод на PHP

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



    Статей, как сделать постраничный вывод много, но если информации будет очень много, на пример поиск в yandex с запросом, типа "php", то все эти скрипты, описанные в статьях, окажутся не пригодными к использованию, скрипт 1 реализует такой простейший постраничный вывод. Представьте, что по этому запросу yandex нашел 100 тис. сайтов и на каждой странице находится по 10 сайтов, т.е. 10 тис. страниц, и все эти ссылки вывести на экран :). Когда посетитель увидит этот ужас на вашем сайте, он сразу же "убежит" и никогда не вернется, а если это будет выглядеть, как показано в примере 1 - то это совсем другое дело.

    |< ... 122 123 124 125 126 127 128 129 130 131 132 ... >|


    Пример 1.
    Так будет выглядеть панель навигации, которая описана в этой статье. Итак, приступим. Все комментарии я буду выдавать по ходу работы.


    Но сейчас немного теории и принципа работы данного скрипта


    Принцип работы скрипта прост, мы просто пробегаем всю окрестность текущей страницы. Ищем в окрестности текущей страницы действительные ссылки и выводим их. Весь остальной код - это просто для наглядности, в частности первый цикл (в скрипте № 2), он предназначен для того, чтобы количество ссылок было постоянным. Приведу пример опять же с yandex, когда по запросу найдено много сайтов, то внизу страницы вы увидите панель навигации приблизительно такого вида, как показано в примере 2.

    1 2 3 4 5 6 7 8 ...


    Пример 2.
    Приблизительно так выглядит панель навигации в yandex, когда вы находитесь на первой странице.
    Когда вы перейдете на 8 страницу, то панель навигации будет уже выглядеть так, как показано в примере 3.

    1 2 3 4 5 6 7 8 10 11 12 13 14 15 ...


    Пример 3
    Приблизительно так выглядит панель навигации в yandex, когда вы находитесь на 8 странице.

    Как видно в примере 3, количество ссылок изменилось. Немного лучше выглядит панель навигации, в которой количество ссылок постоянно, но в таком скрипте больше кода.

    Ссылки типа "следующая" отсутствуют, вместо них присутствуют ссылки на первую и последнюю страницу. Сделано сие намеренно - ни разу в жизни не нажимал на "следующая", если можно было нажать на номер страницы, а вот ссылки на первую и последнюю страницу не помешают.

    Ниже приведен скрипт простейшего постраничного вывода, а также скрипты обеих навигационных панелей, т.е. с постоянным количеством ссылок и с отсеченными по "краям".


    Скрипт 1
    Простейший постраничный вывод

    <?php
    function link_bar($page, $pages_count)
    {
    for ($j = 1; $j <= $pages_count; $j++)
    {
    // Вывод ссылки
    if ($j == $page) {
    echo ' <a style="color: #808000;" ><b>'.$j.'</b></a> ';
    } else {
    echo ' <a style="color: #808000;" href='.$_server['php_self'].'?page='.$j.'>'.$j.'</a> ';
    }
    // Выводим разделитель после ссылки, кроме последней
    // например, вставить "|" между ссылками
    if ($j != $pages_count) echo ' ';
    }
    return true;
    } // Конец функции

    // Подключение к базе данных
    mysql_connect('localhost', 'root', '') or die('error! Нет соединения с сервером mysql!');
    mysql_select_db('data_base') or die('error! Нет соединения с базой данных!');

    // Подготовка к постраничному выводу
    $perpage = 10; // Количество отображаемых данных из БД

    if (empty($_get['page']) || ($_get['page'] <= 0)) {
    $page = 1;
    } else {
    $page = (int) $_get['page']; // Считывание текущей страницы
    }
    // Общее количество информации
    $count = mysql_numrows(mysql_query('select * from table')) or die('error! Записей не найдено!');
    $pages_count = ceil($count / $perpage); // Количество страниц

    // Если номер страницы оказался больше количества страниц
    if ($page > $pages_count) $page = $pages_count;
    $start_pos = ($page - 1) * $perpage; // Начальная позиция, для запроса к БД

    // Вызов функции, для вывода ссылок на экран
    link_bar($page, $pages_count);

    // Вывод информации из базы данных
    echo '<p><b>Постраничный вывод информации</b></p>';
    $result = mysql_query('select * from table limit '.$start_pos.', '.$perpage) or die('error!');
    while ($row = mysql_fetch_array($result)) {
    echo '<p>'.$row['some_field'].'</p>';
    }
    ?>


    Скрипт 2
    С постоянным количеством ссылок

    <?php
    function universal_link_bar($page, $count, $pages_count, $show_link)
    {
    // $show_link - это количество отображаемых ссылок;
    // нагляднее будет, когда это число будет парное
    // Если страница всего одна, то вообще ничего не выводим
    if ($pages_count == 1) return false;
    $sperator = ' '; // Разделитель ссылок; например, вставить "|" между ссылками
    // Для придания ссылкам стиля
    $style = 'style="color: #808000; text-decoration: none;"';
    $begin = $page - intval($show_link / 2);
    unset($show_dots); // На всякий случай :)
    // Сам постраничный вывод
    // Если количество отображ. ссылок больше кол. страниц
    if ($pages_count <= $show_link + 1) $show_dots = 'no';
    // Вывод ссылки на первую страницу
    if (($begin > 2) && !isset($show_dots) && ($pages_count - $show_link > 2)) {
    echo '<a '.$style.' href='.$_server['php_self'].'?page=1> |< </a> ';
    }

    for ($j = 0; $j < $page; $j++) {
    // Если страница рядом с концом, то выводить ссылки перед идущих для того,
    // чтобы количество ссылок было постоянным
    if (($begin + $show_link - $j > $pages_count) && ($pages_count-$show_link + $j > 0)) {
    $page_link = $pages_count - $show_link + $j; // Номер страницы
    // Если три точки не выводились, то вывести
    if (!isset($show_dots) && ($pages_count-$show_link > 1)) {
    echo ' <a '.$style.' href='.$_server['php_self'].'?page='.($page_link - 1).'><b>...</b></a> ';
    // Задаем любое значение для того, чтобы больше не выводить в начале "..." (три точки)
    $show_dots = "no";
    }
    // Вывод ссылки
    echo ' <a '.$style.' href='.$_server['php_self'].'?page='.$page_link.'>'.$page_link.'</a> '.$sperator;
    } else continue;
    }
    for ($j = 0; $j <= $show_link; $j++) // Основный цикл вывода ссылок
    {
    $i = $begin + $j; // Номер ссылки
    // Если страница рядом с началом, то увеличить цикл для того,
    // чтобы количество ссылок было постоянным
    if ($i < 1) {
    $show_link++;
    continue;
    }
    // Подобное находится в верхнем цикле
    if (!isset($show_dots) && $begin > 1) {
    echo ' <a '.$style.' href='.$_server['php_self'].'?page='.($i-1).'><b>...</b></a> ';
    $show_dots = "no";
    }
    // Номер ссылки перевалил за возможное количество страниц
    if ($i > $pages_count) break;
    if ($i == $page) {
    echo ' <a '.$style.' ><b>'.$i.'</b></a> ';
    } else {
    echo ' <a '.$style.' href='.$_server['php_self'].'?page='.$i.'>'.$i.'</a> ';
    }
    // Если номер ссылки не равен кол. страниц и это не последняя ссылка
    if (($i != $pages_count) && ($j != $show_link)) echo $sperator;
    // Вывод "..." в конце
    if (($j == $show_link) && ($i < $pages_count)) {
    echo ' <a '.$style.' href='.$_server['php_self'].'?page='.($i+1).'><b>...</b></a> ';
    }
    }
    // Вывод ссылки на последнюю страницу
    if ($begin + $show_link + 1 < $pages_count) {
    echo ' <a '.$style.' href='.$_server['php_self'].'?page='.$pages_count.'> >| </a>';
    }
    return true;
    } // Конец функции

    // Подключение к базе данных
    mysql_connect('localhost', 'root', '') or die('error! Нет соединения с сервером mysql!');
    mysql_select_db('data_base') or die('error! Нет соединения с базой данных!');

    // Подготовка к постраничному выводу
    $perpage = 10; // Количество отображаемых данных из БД
    if (empty($_get['page']) || ($_get['page'] <= 0)) {
    $page = 1;
    } else {
    $page = (int) $_get['page']; // Считывание текущей страницы
    }
    // Общее количество информации
    $count = mysql_numrows(mysql_query('select * from table')) or die('error! Записей не найдено!');
    $pages_count = ceil($count / $perpage); // Количество страниц
    // Если номер страницы оказался больше количества страниц
    if ($page > $pages_count) $page = $pages_count;
    $start_pos = ($page - 1) * $perpage; // Начальная позиция, для запроса к БД
    // Вызов функции, для вывода ссылок на экран

    universal_link_bar($page, $count, $pages_count, 10);

    // Вывод информации из базы данных
    echo '<p><b>Постраничный вывод информации</b></p>';
    $result = mysql_query('select * from table limit '.$start_pos.', '.$perpage) or die('error!');
    while ($row = mysql_fetch_array($result)) {
    echo '<p>'.$row['some_field'].'</p>';
    }
    ?>


    Скрипт 3
    С отсеченными по "краям" ссылками

    <?php
    function yandex_link_bar($page, $count, $pages_count, $show_link)
    {
    // $show_link - это количество отображаемых ссылок;
    // нагляднее будет, когда это число будет парное
    // Если страница всего одна, то вообще ничего не выводим
    if ($pages_count == 1) return false;
    $sperator = ' '; // Разделитель ссылок; например, вставить "|" между ссылками
    // Для придания ссылкам стиля
    $style = 'style="color: #808000; text-decoration: none;"';
    $begin = $page - intval($show_link / 2);
    unset($show_dots); // На всякий случай :)
    // Сам постраничный вывод
    // Если количество отображ. ссылок больше кол. страниц
    if ($pages_count <= $show_link + 1) $show_dots = 'no';
    // Вывод ссылки на первую страницу
    if (($begin > 2) && ($pages_count - $show_link > 2)) {
    echo '<a '.$style.' href='.$_server['php_self'].'?page=1> |< </a> ';
    }
    for ($j = 0; $j <= $show_link; $j++) // Основный цикл вывода ссылок
    {
    $i = $begin + $j; // Номер ссылки
    // Если страница рядом с началом, то увеличить цикл для того,
    // чтобы количество ссылок было постоянным
    if ($i < 1) continue;
    // Подобное находится в верхнем цикле
    if (!isset($show_dots) && $begin > 1) {
    echo ' <a '.$style.' href='.$_server['php_self'].'?page='.($i-1).'><b>...</b></a> ';
    $show_dots = "no";
    }
    // Номер ссылки перевалил за возможное количество страниц
    if ($i > $pages_count) break;
    if ($i == $page) {
    echo ' <a '.$style.' ><b>'.$i.'</b></a> ';
    } else {
    echo ' <a '.$style.' href='.$_server['php_self'].'?page='.$i.'>'.$i.'</a> ';
    }
    // Если номер ссылки не равен кол. страниц и это не последняя ссылка
    if (($i != $pages_count) && ($j != $show_link)) echo $sperator;
    // Вывод "..." в конце
    if (($j == $show_link) && ($i < $pages_count)) {
    echo ' <a '.$style.' href='.$_server['php_self'].'?page='.($i+1).'><b>...</b></a> ';
    }
    }
    // Вывод ссылки на последнюю страницу
    if ($begin + $show_link + 1 < $pages_count) {
    echo ' <a '.$style.' href='.$_server['php_self'].'?page='.$pages_count.'> >| </a>';
    }
    return true;
    } // Конец функции

    // Подключение к базе данных
    mysql_connect('localhost', 'root', '') or die('error! Нет соединения с сервером mysql!');
    mysql_select_db('data_base') or die('error! Нет соединения с базой данных!');

    // Подготовка к постраничному выводу
    $perpage = 10; // Количество отображаемых данных из БД
    if (empty($_get['page']) || ($_get['page'] <= 0)) {
    $page = 1;
    } else {
    $page = (int) $_get['page']; // Считывание текущей страницы
    }
    // Общее количество информации
    $count = mysql_numrows(mysql_query('select * from table')) or die('error! Записей не найдено!');
    $pages_count = ceil($count / $perpage); // Количество страниц
    // Если номер страницы оказался больше количества страниц
    if ($page > $pages_count) $page = $pages_count;
    $start_pos = ($page - 1) * $perpage; // Начальная позиция, для запроса к БД
    // Вызов функции, для вывода ссылок на экран

    yandex_link_bar($page, $count, $pages_count, 10);

    // Вывод информации из базы данных
    echo '<p><b>Постраничный вывод информации</b></p>';
    $result = mysql_query('select * from table limit '.$start_pos.', '.$perpage) or die('error!');
    while ($row = mysql_fetch_array($result)) {
    echo '<p>'.$row['some_field'].'</p>';
    }
    ?>

    Переменные, которые требуют подробного описания:

    $page - Текущая страница, передается от скрипта к скрипту методом get.

    $perpage - Количество отображаемых данных из базы данных, на примере yandex - это количество ссылок на сайты, отображаемых на одной странице.

    $count - Общее количество информации, на примере yandex - это количество найденных сайтов по запросу.

    $pages_count - Количество страниц, без комментариев.

    $start_pos - Начальная позиция, используется только в запросе к базе данных.

    Вот и все! Универсальный постраничный вывод готов ;).
     

    Источник: http://php.com.ua/

    Автор: - zest




    Рубрика: PHP




    Подгрузка через AJAX HTML-кода, содержащег....

    AJAX

    При разработке CMS S.Builder наша команда активно использовала AJAX. Теперь вот решили поделиться накопленным опытом. Начнем с этого хабратопика. Не буду здесь затрагивать различные фреймворки и библиотеки. Свой код всегда роднее. Для работы с AJAX-ом в S.Builder написана библиотека sbAJAX. Можете качать и пользоваться :). В этом файле есть функция sbEvalJS. Для тех, кто не знает, объясню. При подгрузке через AJAX и вставке на страницу HTML-кода, содержащего JavaScript, JavaScript выполняться не будет или полезут баги. Эта функция как раз решает поставленную задачу.


    Подробнее... | Рубрика: AJAX | Добавлено: 19.11.2008

    Обзор нового релиза самой мощной Ajax библ....

    AJAX

    Хотя наш обзор немного запоздал, оригинальный Dojo 1.2 вышел в релизной версии ещё 6-го октября, но сейчас мы наверстаем упущенное. И так, Dojo Toolkit — это самая мощная и гибкая ajax-библиотека из всех, что есть на рынке, она активно развивается и имеет большое комьюнити. Кстати, это самое комьюнити, совместно с компанией Sitepen, имеет ещё несколько проектов, среди которых и Cometd и некоторые другие, не менее интересные, о которых мы скоро вам расскажем. Сегодня же все внимание на флагманский продукт — Dojo 1.2.


    Подробнее... | Рубрика: AJAX | Добавлено: 19.11.2008

    Firebug 1.3 и 1.4 alpha — что нового и инт....

    Вебмастеру

    Если вы профессиональный веб-разработчик и постоянно имеете дело с разработкой и отладкой сложных AJAX приложений, то наверняка знаете и используете Firebug — плагин для браузера Firefox, предназначенный для отладки и исследования веб-приложений. Текущая его версия, 1.2х достаточно стабильная и функциональна, чтобы помочь в 99% проблем, которые могут возникнуть при разработке. Но и этот инструмент не лишён если не недостатков, то некоторых фич, которые могли бы облегчить работу. И даже идеальный инструмент можно сделать ещё более идеальным, как бы это не звучало.


    Подробнее... | Рубрика: Вебмастеру | Добавлено: 19.11.2008

    Остальные статьи:

    Релиз Microsoft Silverlight 2.0. Что новог...
    XML документация в C#
    Курсоры в MySQL 5
    Microsoft опубликовала подробности о сесси...
    Microsoft делится подробностями о том, что...
    Тестируем новый javascript от нового брауз...
    MySQL Query Cache
    Использование провайдеров компиляции в As...
    Чего мы ждем от C# 4.0
    Delphi 2009 и C++Builder 2009
    Джоэл Спольски и Джеф Этвуд запустили новы...
    Поиск кода Google /* что нового? */
    10 jQuery скриптов для улучшения интерфейс...
    Генераторы отчетов FastReport 4 и QuickRep...
    День программиста — набор стерeотипов
    Индусские програмисты
    Вышел Django 1.0
    Портативная версия Google Chrome Portable
    Исходные коды .Net Frameword 3.5 SP1 для о...
    Пишем правильный online WYSIWYG-редактор


    Цитата дня (все,добавить):

    Портал фрилансеров

    работа на дому


        Рубрикатор

    Программирование

    C/С++
    Обучение
    Windows API
    XAML
    Моделирование
    Паттерны
    Visual Basic 7 .NET
    WxWidgets
    Функции WinApi
    Функции С++
    Разработка под Mac OS
    Eiffel
    Visual Studio 2008
    UI дизайн
    Алгоритмы
    Конкурсные статьи
    Turbo Pascal
    Visual Studio
    CASE-средства
    Visual Studio 2005
    Без VCL
    Delphi
    Тех. документация
    Тестирование
    Software Testing
    ООП
    TCP/IP
    Google Android
    Windows Installer
    .NET Framework
    Драйвера
    C# C Sharp
    Справка
    Проектирование
    Информ. системы
    Visual Basic
    Assembler
    Оптимизация кода
    Gtk+
    Компоненты
    Реинжиниринг
    Управление проектами
    Extreeme programming
    Lotus Notes
    Алгебраическое проектирование


    Интернет технологии

    PHP
    Perl
    ASP
    WAP
    Cookies
    SSI
    CGI
    Web Servers
    VB Script
    DNS
    CSS
    XML
    Html
    Java Script
    Java2ME
    Firewall
    Flash
    .htaccess
    Apache
    VRML
    Протоколы
    Поисковые системы
    Технология JAVA
    Учебник по PHP
    Учебник по JavaScript
    Учебник по XML
    Java Q&A
    AJAX
    DHTML
    XHTML
    Dreamweaver
    Web 2.0
    Python
    Вебмастеру
    Cisco
    Ruby on Rails
    Silverlight

    Базы данных

    Access
    InterBase
    MySQL
    Oracle
    ADO .NET
    Основы SQL
    Учебник по Access 2002
    MS
    Microsoft FoxPro
    Доступ к данным
    XML в MS SQL Server 2000
    ODBC и MyODBC
    Обучение
    Caché
    DB2
    PostgresSQL
    Sybase
    Теория
    Хранилища данных
    Безопасность
    Реляционные данные
    MySQL и mSQL

    Остальное:

    Разное
    Обзоры книг
    Безопасность
    Графика и дизайн
    Юмор
    Linux
    Фракталы
    Microsoft Axapta
    Многоядерность
    Сети
    Microsoft Office
    Работа
    MS-DOS
    Криптография
    Графика и игроделание
    Новости SDK
    Системы защиты
    Учебник по AutoCad
    CVS
    Windows XP
    Windows Server 2003
    Windows Vista
    Windows 7
    Мероприятия