![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| qweqwe |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 31.1.2007 Репутация: нет Всего: 0 |
Здравствуйте!
Хочу попросить помочь решить следующий вопрос, который у меня возник: Организация постраничного вывода на Perl из базы данных. (Поиском по Форуму пользовался, ничего похожего не нашел) В интернете, сколько пересмотрел, находилось только организация постраничного вывода на PHP. У меня же возник вопрос организации такой вещи именно на Perl. Сам я только недавно начал осваивать Perl, поэтому хотел бы попросить не писать ответы вроде "Используй Limit" или "используй тот или иной модуль", потому как хотел бы разобраться с данным вопросом. Поэтому было бы очень здорово, если бы ответы были не только сделай вот и так или вот так, а сопровождались вставками поправленного кода, для того, чтобы лучше разобраться в проблеме. В связи с этим, хотел бы попросить разобраться с тем скриптом, который я написал, но в котором немного неправильно работает постраничный вывод. Немного о реализации: для примера берется база данных (FireBird), состоящая из двух столбцов. Необходимо их вывести. Из input'a идет запрос, по которому потом происходит поиск по бд и осуществляется вывод нужной информации. Полный вывод из базы данных я организовал, но если же записей будет, к примеру 1000, то будет не особо удобно их просматривать, в связи с этим я и организовываю постраничный вывод. Ошибка скрипта в следующем: Начальный вывод страницы правильный, выводится заданное кол-во записей, есть ссылки на следующую (активная) и предыдущую (не активная) страницы. Ошибка - при нажатии на ссылку "следующая" данные не отображаются (т.е. выводится пустая таблица, хотя должны выводится, к примеру оставшиеся данные, если записей 14, а вывод идет по 10 записей), и данная ссылка остается активной (соответственно ссылка "предыдущая" активной не становится). Хотел бы попросить помочь мне в решении данной проблемы. Благодарю.
|
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 4 Всего: 49 |
qweqwe, опишите по-русски алгоритм работы Вашего скрипта.
P.S. Используйте шаблонизатор (например, HTML::Template), т.к. вставлять HTML в код скрипта сейчас не модно. Это сообщение отредактировал(а) ginnie - 17.6.2009, 14:39 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| qweqwe |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 31.1.2007 Репутация: нет Всего: 0 |
ginnie, алгоритм следующий:
Имеется база данных, для примера возмем базу данных, состоящую из двух столбцов. Данные будут выводится, по запросу select P1,P2 from T2 where P1='$search', где my $search = param('ser') - данные для поиска. Проблема в том, как осуществить потсраничный вывод этих данных на Perl. Допустим, по запросу нашлось 1000 записей, необходимо выводить по 20 записей на страницу. Снизу будут идти ссылки на другие записи (к примеру 1-20 - 21-40 - 41-60 ...), т.е. элементарный постраничный вывод, который организован на многих сайтах и форумах. Я хотел бы, чтобы вы помогли мне с доработкой скрипта, где что лучше дописать, либо показали, как вы видите организацию постраничного вывода. P.S. Благодарю, ознакомлюсь с HTML::Template. |
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 2 Всего: 17 |
почему не использовать лимит?
|
|||
|
||||
| KSURi |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 2 Всего: 27 |
Простейший постраничный вывод я бы сделал так:
pager.cgi
pager.html:
Тут есть что допилить: при большом кол-ве страниц их лучше ограничивать (показывать, например, три предыдущих и три следующих), нет выделения текущей страницы (HTML::Template без заморочек не позволяет такое сделать). Ну и конечно надо иметь ввиду, что такая навигация по страницам будет каждый раз заново выполнять поисковый запрос, со всеми вытекающими. -------------------- Died at Life.pl line 21 |
||||
|
|||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 4 Всего: 49 |
qweqwe, я просил написать алгоритм работы Вашего скрипта, а не страничной навигации, как Вы ее себе представляете. Просто напишите, что по-вашему делает Ваш скрипт, типа
1. получаем из базы количество строк в таблице 2. задаем количество результатов на странице 3. определяем номер начального результата 4. определяем номер конечного результата, он не должен быть больше количества строк таблицы ... Добавлено через 7 минут и 46 секунд
KSURi, не надо обижать HTML::Template, лучше написать "я в HTML::Template без заморочек такое сделать не могу" Это сообщение отредактировал(а) ginnie - 17.6.2009, 18:29 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| KSURi |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 2 Всего: 27 |
Я это и имел ввиду, в принципе) Добавлено через 7 минут и 20 секунд Кстати, интересно посмотреть на пример реализации без заморочек. Пробежался щас по документации HTML::Template и, честно говоря, не пришло мне в голову решение... ginnie, это правда можно полностью в шаблоне сделать? -------------------- Died at Life.pl line 21 |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 4 Всего: 49 |
Опиши, что ты подразумеваешь под выделением текущей страницы. Подумаем, как можно сделать. -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| KSURi |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 2 Всего: 27 |
Как минимум - сделать ее неактивной (не ссылкой) и выделенной другим цветом в перечислении всех страниц.
В ТТ можно было бы изобразить так:
Аналогично в Mason. Это сообщение отредактировал(а) KSURi - 18.6.2009, 11:37 -------------------- Died at Life.pl line 21 |
|||
|
||||
| xoma |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2007 Репутация: нет Всего: нет |
а вот мой вариант пейджер, похожий на хабрахабровский....
Это сообщение отредактировал(а) xoma - 18.6.2009, 11:58 |
|||
|
||||
| ginnie |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 4 Всего: 49 |
KSURi, для исходных данных
P.S. в твоем первоначальном сообщении не обратил внимание на полностью в шаблоне сделать. Действительно полностью в шаблоне сделать нельзя, но писать, что для реализации этого функционала нужны "заморочки" я бы не стал. Это сообщение отредактировал(а) ginnie - 18.6.2009, 14:20 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
||||
|
|||||
| Ramirez |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 18.1.2005 Где: Moscow, ExUSSR Репутация: 1 Всего: 5 |
полностью в шаблоне можно, но потребуются расширения, позволяющие выполнять простейшие операции с переменными в шаблоне, например http://search.cpan.org/~samtregar/HTML-Tem...pr-0.07/Expr.pm
Это сообщение отредактировал(а) Ramirez - 18.6.2009, 15:00 |
|||
|
||||
| qweqwe |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 31.1.2007 Репутация: нет Всего: 0 |
Благодарю всех за помощь.
|
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 2 Всего: 17 |
а как сделать ссылку именно на пост? при постраничном выводе
то есть так как эта с виду: _http://forum.vingrad.ru/index.php?showtopic=258166&view=findpost&p=1861021 если я хочу ссылатся на какое-то сообщение |
|||
|
||||
| gcc |
|
||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 2 Всего: 17 |
что-то я туплю или не понял, но а как узнать страницу на которой должен быть конкретный iD?
у меня на страницах по 10 элементов.
как тут сделать?
я нахожусь на странице 4, всего страниц 12, допустим на странице 4 я редактирую/или удаляю сообщение, и как мне после редактирования вернутся назад на страницу 4? Это сообщение отредактировал(а) gcc - 13.8.2009, 09:40 |
||||
|
|||||
![]()
|
| Правила форума "Perl: CGI программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |