| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > Помогите плиз!!!! Разбиение на страницы!!! |
| Автор: fregat 24.8.2006, 10:27 | ||
| Уважаемые Господа программисты!!! Прошу вас подсказать как сделать на основе данного скрипта разбиение на страницы, то есть по 10 записей на страницу... | 1 | 2 | 3 |
Заранее благодарен.......... |
| Автор: korob2001 24.8.2006, 13:08 |
| Посмотри вот этот пост, особенно обрати внимание на коментарии. http://forum.vingrad.ru/index.php?showtopic=65789 Модератор: пользуйся кнопкой "Код", для вставки кода. Тем самым ты сохранишь его форматирование, плюс подсветишь его. |
| Автор: fregat 24.8.2006, 15:52 |
| Учту замечания по поводу кода............ Посмотрел пост (showtopic=65789) неужели код для разбивки такой здоровый... поставил свои переменные - на страницы не разбивает.... просто выводит все из файла....... |
| Автор: fregat 24.8.2006, 16:52 | ||
Не могу вьехать........
При выводе получается вот что.... 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 |
| Автор: korob2001 24.8.2006, 20:22 | ||||||||||
1. Конфигурационные переменные, пишутся, как правило в начале файла. Тебе же потом будет удобнее их настраивать. Так что запиши переменные в самом начале файла, сразу за последним use, если они у тебя есть, если нет, значит после строки #!/usr/bin/perl:
2. Заметь, что у тебя 2 цикла, а нужен один. Убери наружный цикл for. Не забудь убрать в конце скобку которая к нему относится. 3. Раз уж мы убрали for, то измени все переменные где есть индекс соответствующим образом. Т.е. вместо этого:
пишешь просто:
Думаю теперь ты понял, почему ты получал такой результат? На каждой итерации наружного цикла for ты выводил нужное кол-во записей на страницу и делал это врутренний цикл foreach. Так как наружный цикл, так же как внутренний проходят по каждой записи, потому у тебя и получилось такое же кол-во блоков, сколько и записей в файле:
Так как ты разбивал переменную не внутреннего цикла $list, а наружного $list[$i], потому и получалось так, что при выводе каждого блока в переменной $news был не верный номер строки, а в переменной $data не верная дата. Точнее они были верными, но для наружного цикла.
Код здоровый из-за того, что всё приходится подсчитывать вручную, так как сообщения находятся в файле, а не в БД. Код разбивки для вывода из базы данных, был бы меньше. Во вторых я не стремился его сократить, та как главное что бы человек понял принцип. PS: Так же рекомендую пользоваться всегда прагмой компилятора strict. Хорошие привычки нужно вырабатывать с самого начала. Но это так, совет можешь и не обращать на него внимания, если считаешь, что ты прав. ;))))) |
| Автор: fregat 24.8.2006, 21:31 |
| После изменений выводит следующие.... 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 24.8.2006, 21:37 | ||||
А ну да, вот здесь:
У тебя нет хеша %form_data, у тебя он называется %form. Потому:
Т.е. ты не получал параметра, который передаёт номер сообщения, потому всегда оставался на первой странице, по умолчанию. Об этом бы тебе сообщила прагма strict если бы ты её использовал. |
| Автор: fregat 24.8.2006, 21:44 |
| ОК... Спасибо огромное.... $form_data - это мой косяк, пропустил..... Все работает.... только мне кажется немного тормозит....... Еще раз СПАСИБО..... |
| Автор: korob2001 24.8.2006, 21:53 | ||
| Ну вообще-то тормозить ему пока несчего, так как файл у нас не очень большой. Но в принципе можно доработать алгоритм, тем более ты всё равно читаешь весь файл в массив, потому тебе заранее известно общее кол-во записей. Этот вариант хорошо подходит для построчного вывода из файла, когда общее кол-во записей в файле не известно заранее. В добавок ко всему, если ты читаешь весь файл в память, то ты скорее убъёшь её, чем этот код начнёт реально тормозить. Подумай о том, что бы исправить свой код для построчного вывода из файла, например вот таким циклом:
C другой стороны, не получится обернуть файл в обратном направлении. Но опять же, можно создать не текстовый файл, а с байтовыми блоками. Потом при открытии переходить в конец файла и читать эти блоки в обратном направлении, скажем по 2048 байт каждый блок, но можно сделать и больше размер блока. |