Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Постраничная навигация
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
Всем привет. Знаю что тема заезженная и существует много готовых решений и статей, но у меня вопрос заключается немного в другом... Очень хочу понять полностью алгоритм. Вот просидел сегодня очень долго, что то понял, а что то не очень. Итак, приступим:
Разделим структуру моего понимания алгоритма данного скрипта на две части:
1. Понял:
- Переключение страничек происходит при помощи $_GET параметра
- Нужно изначально узнать общее количество заметок в БД ( как этим воспользоваться - не очень понимаю)
- Использовать цикл for для автоматической генерации новых страничек при необходимости.
- Нужно составить SQL запрос для выборки определенного количества заметок на страницу, пусть в данном случае это количество будет равно 10.
$result=$db->query("SELECT article FROM articles LIMIT $start, $stop");
2. Не понял:
- Как и где именно нужно воспользоваться общим количеством заметок, котрые мы получаем при помощи вышеуказанного запроса(положить в переменную то понятно, а что дальше?).
- Как правильно использовать цикл for для генерации новых страничек 1 2 3 и т.д только при необходимости?
- И как сделать, что бы если нажали кнопку 2, то что бы в браузер уже выводились следующие 10 заметок. Полагаю что нужно менять LIMIT 10, 20 и так далее. Ну не буду же я это в ручную постоянно делать. Но как мы узнаем, что выбрана страничка номер 2 и нужно изменить значения LIMIT-а в запросе? И именно там, где это нужно. Тоесть что бы остальные статьи, где LIMIT 10, 20 показывались уже на второй страничке. if-ом проверять не дело каждый раз, а то опять получается что вручную... Но чую можно как то довести это дело до автоматизма. Тоесть как скрипт понимает, что нужно сгенерировать следующую страничку и положить туда не что попало, а именно следующие 10 заметок
Если кто то знает ответы на мои вопросы, пожалуйста ответье на них. Буду очень благодарен. Повторюсь, статьи читал, готовые решения видел, везде все по разному, ответы на свои вопросы так и не нашел. От объяснения много что зависит, поэтому прошу объяснить как можно доступнее, буду очень рад и признателен!
А тем временем вот "шаблон", который я набросал...
Покинул форум
Сообщений всего: 338
Дата рег-ции: Сент. 2012 Откуда: Гродно, Беларусь
Помог: 0 раз(а)
Получив общее количество записей, мы делим их на количество записей выводимых на одной странице и , округлив, получим количество страниц. Страницы эти в виде цифр, стрелок, "назад", вперед" и т.д. в качестве ссылок и выводятся пользователями для осуществления постраничной навигации. Нажимая эти кнопки, с помощью GET передаются в обработчик номера страниц, например,$_GET['page']. В обработчике
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
alnik-75 пишет:
$page=$_GET['page'];
$start = ($page-1)*$stop;
caballero пишет:
ну так и меняй по кнопке #start и $stop в ту или иную сторону
Это все понятно, как переключать странички, но вопрос в другом. Не доходит до меня то, как правильно вывести в цикле количество требуемых страниц(а именно какое условие нужно задать и почему) и как так получается, что при нажатии например странички 3, LIMIT меняется на 20, 30 и отдается пользователю именно при нажатии кнопки "3". - Какое условие задать, я не догоняю...
Принцип понимаю почти до конца, только с выводом проблемы, а именно плохо понимаю поведение данного скрипта....
Надеюсь я доступно объяснил суть моего непонимания )
alnik-75
Отправлено: 23 Июня, 2013 - 13:03:18
Посетитель
Покинул форум
Сообщений всего: 338
Дата рег-ции: Сент. 2012 Откуда: Гродно, Беларусь
Помог: 0 раз(а)
Я же тебе написал все. Нажимаешь на кнопку с цифрой 1. С помощью GET она передается в обработчик
далее:
- и такие проверки с кучей запутанных $page +/- 1/2 просто действовали на нервы...
Вообщем слепил свой велосипед, на мой взгляд намного адекватнее по коду, чем подобные примеры.
Скрипт работает так - приходим на страничку, сразу отрисовывается нужное кол-во страниц в зависимо от кол-ва статей в БД. Если не считать всякие выводы и <br>, то скрипт состоит всего навсего из 8 строк логики для постраничной навигации. Упрощал как можно больше
Просьба оценить код и возможно даже покритиковать:
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
страниц 1253
твои действия...
teddy
Отправлено: 24 Июня, 2013 - 02:46:20
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
LIME
1253 - неадекватная цифра ) если статей много, то можно увеличить кол-во выводимых статей на 1 странице. Если сейчас оно у меня равно 5, то можно сделать 15 и значительно сократить эту цифру. Ну а если более серьезно подойти к этому делу, тогда можно например сделать кнопочку "На последнюю", или "далее" либо "назад", где просто $page = -1 или +1 - не более... - Два варианта пока предполагаю, второй конечно же при цифре 1253 предпочтительнее...
А громоздить код так, что бы он состоял из 100500 таких кусков, который я описал выше, до того как опубликовать свой код, считаю не правильным...
LIME
Отправлено: 24 Июня, 2013 - 02:56:13
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
А ты не подумал что "грязный" код как-то похож на то что ты предлагаешь?
Сделай сначала
Цитата:
1253 - неадекватная цифра )
эх еслибы
teddy
Отправлено: 24 Июня, 2013 - 03:23:23
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
LIME пишет:
А ты не подумал что "грязный" код как-то похож на то что ты предлагаешь?
Совсем нет ) одно дело 1 раз написать $page = $page +/- 1; а другое дело напиши в гугле "постраничная навигация" и "довольствуйся" примерами Тоесть если например страниц больше 50, останавливаем дальнейшию генерацию страниц и просто добавляем кнопку далее.
Если на сайте только в одном разделе будет 1253 страниц каждая из которых будет содержать по 15 статей, то вот сколько статей в общем нужно будет написать/заказать 18795. Потому и я назвал эту цифру неадекватной ) с таким контентом, если к примеру писать статьи про php, можно в поисковой выдаче мануал обогнать )
А вот если это форум, то кнопку далее нужно будет сделать обязательно, ибо при популярных темах посты плодятся с неадекватной скоростью... Но опять же, даже на этом форуме столько постов в одной теме я не наблюдал...
Более того, можно на главную страницу выводить и 20 статей, но показывать далеко не все, что бы не испортить визуальный вид страницы. А сделать так: показали 200 символов, остальное записываем в "Подробнее"... Пусть кликает, дочитывает, комментирует и все будут счастливы )
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
при чем тут вообще статьи?
сначала измени код...попусту воздух сотрясаешь (Добавление)
любой список товаров магазина без фильтров
сайт с праститутками Москвы наконец)
малали где много страниц
DeepVarvar
Отправлено: 24 Июня, 2013 - 03:51:46
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
DeepVarvar а зачем там фалсовые курренты в массиве? может их убрать? (Добавление)
и цепочку сетов я бы заменил параметрами конструктора
ну те что полюбасные (Добавление)
и вообще
пагинатор должон только ссылочки выводить
а список отдельно
ему только запрос COUNT(*) нужен
а у тебя вместе с списком
или я плохо с телефона разглядел?
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.