![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| fregat |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.1.2006 Репутация: нет Всего: нет |
Уважаемые Господа программисты!!!
Прошу вас подсказать как сделать на основе данного скрипта разбиение на страницы, то есть по 10 записей на страницу... | 1 | 2 | 3 |
Заранее благодарен.......... Это сообщение отредактировал(а) korob2001 - 24.8.2006, 13:10 |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Посмотри вот этот пост, особенно обрати внимание на коментарии.
http://forum.vingrad.ru/index.php?showtopic=65789 Модератор: пользуйся кнопкой "Код", для вставки кода. Тем самым ты сохранишь его форматирование, плюс подсветишь его. Это сообщение отредактировал(а) korob2001 - 24.8.2006, 13:12 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| fregat |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.1.2006 Репутация: нет Всего: нет |
Учту замечания по поводу кода............
Посмотрел пост (showtopic=65789) неужели код для разбивки такой здоровый... поставил свои переменные - на страницы не разбивает.... просто выводит все из файла....... |
|||
|
||||
| fregat |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.1.2006 Репутация: нет Всего: нет |
Не могу вьехать........
При выводе получается вот что.... 1 | 2 | 3 08.12.2004 2 08.12.2004 2 08.12.2004 2 08.12.2004 2 08.12.2004 2 1 | 2 | 3 20.12.2004 3 20.12.2004 3 20.12.2004 3 20.12.2004 3 20.12.2004 3 1 | 2 | 3 и.т.д Техтовый файл: 02.12.2004:: 1 08.12.2004:: 2 20.12.2004:: 3 27.12.2004:: 4 12.01.2005:: 5 02.12.2004:: 6 02.12.2004:: 7 08.12.2004:: 8 20.12.2004:: 9 27.12.2004:: 10 12.01.2005:: 11 02.12.2004:: 12 Присоединённый файл ( Кол-во скачиваний: 2 )
news.pl 2,19 Kb |
|||
|
||||
| korob2001 |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
1. Конфигурационные переменные, пишутся, как правило в начале файла. Тебе же потом будет удобнее их настраивать. Так что запиши переменные в самом начале файла, сразу за последним use, если они у тебя есть, если нет, значит после строки #!/usr/bin/perl:
2. Заметь, что у тебя 2 цикла, а нужен один. Убери наружный цикл for. Не забудь убрать в конце скобку которая к нему относится. 3. Раз уж мы убрали for, то измени все переменные где есть индекс соответствующим образом. Т.е. вместо этого:
пишешь просто:
Думаю теперь ты понял, почему ты получал такой результат? На каждой итерации наружного цикла for ты выводил нужное кол-во записей на страницу и делал это врутренний цикл foreach. Так как наружный цикл, так же как внутренний проходят по каждой записи, потому у тебя и получилось такое же кол-во блоков, сколько и записей в файле:
Так как ты разбивал переменную не внутреннего цикла $list, а наружного $list[$i], потому и получалось так, что при выводе каждого блока в переменной $news был не верный номер строки, а в переменной $data не верная дата. Точнее они были верными, но для наружного цикла.
Код здоровый из-за того, что всё приходится подсчитывать вручную, так как сообщения находятся в файле, а не в БД. Код разбивки для вывода из базы данных, был бы меньше. Во вторых я не стремился его сократить, та как главное что бы человек понял принцип. PS: Так же рекомендую пользоваться всегда прагмой компилятора strict. Хорошие привычки нужно вырабатывать с самого начала. Но это так, совет можешь и не обращать на него внимания, если считаешь, что ты прав. ;))))) Это сообщение отредактировал(а) korob2001 - 24.8.2006, 21:18 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||||
|
|||||||||||
| fregat |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.1.2006 Репутация: нет Всего: нет |
После изменений выводит следующие....
02.12.2004 12 12.01.2005 11 27.12.2004 10 20.12.2004 9 08.12.2004 8 1 | 2 | 3 Как я понял это первая страница... Но при переходе на страницу 2 или 3 ничего не происходит... т.е. 02.12.2004 12 12.01.2005 11 27.12.2004 10 20.12.2004 9 08.12.2004 8 Может я чего не так сделал.... #for ($i=0;$i<@list;$i++) |
|||
|
||||
| korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
А ну да, вот здесь:
У тебя нет хеша %form_data, у тебя он называется %form. Потому:
Т.е. ты не получал параметра, который передаёт номер сообщения, потому всегда оставался на первой странице, по умолчанию. Об этом бы тебе сообщила прагма strict если бы ты её использовал. Это сообщение отредактировал(а) korob2001 - 24.8.2006, 21:38 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
| fregat |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.1.2006 Репутация: нет Всего: нет |
ОК... Спасибо огромное....
$form_data - это мой косяк, пропустил..... Все работает.... только мне кажется немного тормозит....... Еще раз СПАСИБО..... |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Ну вообще-то тормозить ему пока несчего, так как файл у нас не очень большой.
Но в принципе можно доработать алгоритм, тем более ты всё равно читаешь весь файл в массив, потому тебе заранее известно общее кол-во записей. Этот вариант хорошо подходит для построчного вывода из файла, когда общее кол-во записей в файле не известно заранее. В добавок ко всему, если ты читаешь весь файл в память, то ты скорее убъёшь её, чем этот код начнёт реально тормозить. Подумай о том, что бы исправить свой код для построчного вывода из файла, например вот таким циклом:
C другой стороны, не получится обернуть файл в обратном направлении. Но опять же, можно создать не текстовый файл, а с байтовыми блоками. Потом при открытии переходить в конец файла и читать эти блоки в обратном направлении, скажем по 2048 байт каждый блок, но можно сделать и больше размер блока. Это сообщение отредактировал(а) korob2001 - 24.8.2006, 22:03 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
![]()
|
| Правила форума "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. |