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 :: Постраничная навигация

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
teddy
Отправлено: 23 Июня, 2013 - 02:46:32
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Всем привет. Знаю что тема заезженная и существует много готовых решений и статей, но у меня вопрос заключается немного в другом... Очень хочу понять полностью алгоритм. Вот просидел сегодня очень долго, что то понял, а что то не очень. Итак, приступим:

Разделим структуру моего понимания алгоритма данного скрипта на две части:

1. Понял:
- Переключение страничек происходит при помощи $_GET параметра

- Нужно изначально узнать общее количество заметок в БД ( как этим воспользоваться - не очень понимаю)

- Использовать цикл for для автоматической генерации новых страничек при необходимости.

- Нужно составить SQL запрос для выборки определенного количества заметок на страницу, пусть в данном случае это количество будет равно 10.

Пример:
PHP:
скопировать код в буфер обмена
  1.  
  2.     $start = 1;
  3.     $stop = 10;
  4.                
  5.          $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 заметок

Если кто то знает ответы на мои вопросы, пожалуйста ответье на них. Буду очень благодарен. Повторюсь, статьи читал, готовые решения видел, везде все по разному, ответы на свои вопросы так и не нашел. От объяснения много что зависит, поэтому прошу объяснить как можно доступнее, буду очень рад и признателен!

А тем временем вот "шаблон", который я набросал...
Спойлер (Отобразить)

(Отредактировано автором: 23 Июня, 2013 - 02:57:32)

 
 Top
alnik-75
Отправлено: 23 Июня, 2013 - 09:33:22
Post Id



Посетитель


Покинул форум
Сообщений всего: 338
Дата рег-ции: Сент. 2012  
Откуда: Гродно, Беларусь


Помог: 0 раз(а)




Получив общее количество записей, мы делим их на количество записей выводимых на одной странице и , округлив, получим количество страниц. Страницы эти в виде цифр, стрелок, "назад", вперед" и т.д. в качестве ссылок и выводятся пользователями для осуществления постраничной навигации. Нажимая эти кнопки, с помощью GET передаются в обработчик номера страниц, например,$_GET['page']. В обработчике
PHP:
скопировать код в буфер обмена
  1.  
  2. $page=$_GET['page'];
  3. $start = ($page-1)*$stop;
  4.  

Далее
PHP:
скопировать код в буфер обмена
  1.  
  2. $result = $db->query("SELECT article FROM articles LIMIT $start, $stop");
  3.  
 
 Top
caballero
Отправлено: 23 Июня, 2013 - 09:35:03
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




ну так и меняй по кнопке #start и $stop в ту или иную сторону


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
teddy
Отправлено: 23 Июня, 2013 - 12:40:38
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




alnik-75 пишет:
$page=$_GET['page'];
$start = ($page-1)*$stop;


caballero пишет:
ну так и меняй по кнопке #start и $stop в ту или иную сторону


Это все понятно, как переключать странички, но вопрос в другом. Не доходит до меня то, как правильно вывести в цикле количество требуемых страниц(а именно какое условие нужно задать и почему) и как так получается, что при нажатии например странички 3, LIMIT меняется на 20, 30 и отдается пользователю именно при нажатии кнопки "3". - Какое условие задать, я не догоняю...

Принцип понимаю почти до конца, только с выводом проблемы, а именно плохо понимаю поведение данного скрипта....

Надеюсь я доступно объяснил суть моего непонимания )
 
 Top
alnik-75
Отправлено: 23 Июня, 2013 - 13:03:18
Post Id



Посетитель


Покинул форум
Сообщений всего: 338
Дата рег-ции: Сент. 2012  
Откуда: Гродно, Беларусь


Помог: 0 раз(а)




Я же тебе написал все. Нажимаешь на кнопку с цифрой 1. С помощью GET она передается в обработчик
далее:
PHP:
скопировать код в буфер обмена
  1.  
  2. $page=$_GET['page'];
  3. $start = ($page-1)*$stop;
  4.  

На выходе в результате запроса выберутся первые десять данных
Если нажмешь на цифру 2, то выберутся второй десяток

(Отредактировано автором: 23 Июня, 2013 - 13:05:51)

 
 Top
teddy
Отправлено: 23 Июня, 2013 - 13:07:07
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




alnik-75
Видимо все дело в том, что я взял себе за "правило" не начинать писать php код до тех пор, пока не пойму что конкретно нужно делать...

Приблизительно понял, но не уверен что окончательно Улыбка Буду сейчас копаться и возможно скоро снова засыплю вопросами )
 
 Top
alnik-75
Отправлено: 23 Июня, 2013 - 13:09:43
Post Id



Посетитель


Покинул форум
Сообщений всего: 338
Дата рег-ции: Сент. 2012  
Откуда: Гродно, Беларусь


Помог: 0 раз(а)




я делал следующим образом. При формировании страницы (при отсутствии get параметров ) $start=0/ Иначе $start=$page-1;
 
 Top
teddy
Отправлено: 24 Июня, 2013 - 02:19:37
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Вообщем, долго ходил по сети в поисках адекватного алгоритма для составления постраничной навигации, но постоянно натыкался на грязный код типа:
PHP:
скопировать код в буфер обмена
  1. if($page - 2 > 0) $page2left = ' <a href= ./page?page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
- и такие проверки с кучей запутанных $page +/- 1/2 просто действовали на нервы...

Вообщем слепил свой велосипед, на мой взгляд намного адекватнее по коду, чем подобные примеры.

Скрипт работает так - приходим на страничку, сразу отрисовывается нужное кол-во страниц в зависимо от кол-ва статей в БД. Если не считать всякие выводы и <br>, то скрипт состоит всего навсего из 8 строк логики для постраничной навигации. Упрощал как можно больше

Просьба оценить код и возможно даже покритиковать:
Спойлер (Отобразить)

(Отредактировано автором: 24 Июня, 2013 - 02:48:12)

 
 Top
LIME
Отправлено: 24 Июня, 2013 - 02:40:40
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




страниц 1253
твои действия...
 
 Top
teddy
Отправлено: 24 Июня, 2013 - 02:46:20
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




LIME
1253 - неадекватная цифра ) если статей много, то можно увеличить кол-во выводимых статей на 1 странице. Если сейчас оно у меня равно 5, то можно сделать 15 и значительно сократить эту цифру. Ну а если более серьезно подойти к этому делу, тогда можно например сделать кнопочку "На последнюю", или "далее" либо "назад", где просто $page = -1 или +1 - не более... - Два варианта пока предполагаю, второй конечно же при цифре 1253 предпочтительнее...

А громоздить код так, что бы он состоял из 100500 таких кусков, который я описал выше, до того как опубликовать свой код, считаю не правильным...
 
 Top
LIME
Отправлено: 24 Июня, 2013 - 02:56:13
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




А ты не подумал что "грязный" код как-то похож на то что ты предлагаешь?Улыбка
Сделай сначала
Цитата:
1253 - неадекватная цифра )
эх еслибы
 
 Top
teddy
Отправлено: 24 Июня, 2013 - 03:23:23
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




LIME пишет:
А ты не подумал что "грязный" код как-то похож на то что ты предлагаешь?

Совсем нет ) одно дело 1 раз написать $page = $page +/- 1; а другое дело напиши в гугле "постраничная навигация" и "довольствуйся" примерами Улыбка Тоесть если например страниц больше 50, останавливаем дальнейшию генерацию страниц и просто добавляем кнопку далее.

Если на сайте только в одном разделе будет 1253 страниц каждая из которых будет содержать по 15 статей, то вот сколько статей в общем нужно будет написать/заказать 18795. Потому и я назвал эту цифру неадекватной ) с таким контентом, если к примеру писать статьи про php, можно в поисковой выдаче мануал обогнать )

А вот если это форум, то кнопку далее нужно будет сделать обязательно, ибо при популярных темах посты плодятся с неадекватной скоростью... Но опять же, даже на этом форуме столько постов в одной теме я не наблюдал...

Более того, можно на главную страницу выводить и 20 статей, но показывать далеко не все, что бы не испортить визуальный вид страницы. А сделать так: показали 200 символов, остальное записываем в "Подробнее"... Пусть кликает, дочитывает, комментирует и все будут счастливы )

(Отредактировано автором: 24 Июня, 2013 - 03:25:42)

 
 Top
LIME
Отправлено: 24 Июня, 2013 - 03:34:41
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




при чем тут вообще статьи?
сначала измени код...попусту воздух сотрясаешь
(Добавление)
любой список товаров магазина без фильтров
сайт с праститутками Москвы наконец)
малали где много страниц
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Июня, 2013 - 03:51:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




 
 Top
LIME
Отправлено: 24 Июня, 2013 - 04:00:13
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




DeepVarvar а зачем там фалсовые курренты в массиве? может их убрать?
(Добавление)
и цепочку сетов я бы заменил параметрами конструктора
ну те что полюбасные
(Добавление)
и вообще
пагинатор должон только ссылочки выводить
а список отдельно
ему только запрос COUNT(*) нужен
а у тебя вместе с списком
или я плохо с телефона разглядел?
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB