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 »   

> Описание: Фильтр, постраничная навигация
3d_killer
Отправлено: 06 Февраля, 2014 - 15:51:34
Post Id



Участник


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


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




Возник такой вопрос делаю постраничную навигацию в магазине при применении фильтра параметры передаются GET
например
site.ru/?param1=10&param2=10&param3=10
параметров неизвестное количество
после прохода фильтра страниц может быть несколько нужно по ним перемещаться следовательно в навигации должны быть ссылки типа:
site.ru/?param1=10&param2=10&param3=10&page=2
site.ru/?param1=10&param2=10&param3=10&page=3
site.ru/?param1=10&param2=10&param3=10&page=4
вот интересует вопрос как их формировать так если взять
$_SERVER['REQUEST_URI'] то я получу страничку с переменной page и как ее менять только разбирать URL или есть другие способы?
 
My status
 Top
esterio
Отправлено: 06 Февраля, 2014 - 15:53:28
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




 
 Top
Invert
Отправлено: 06 Февраля, 2014 - 15:57:50
Post Id



Частый гость


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


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




В вашем случае вроде и $_GET подойдет. Или по какой-то из причин он не подходит?

Я в старом CI2 использовал parse_url + parse_str на query, в массив.
 
 Top
KingStar
Отправлено: 06 Февраля, 2014 - 16:09:15
Post Id



Участник


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


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




зачем разбирать, если можно присвоить

PHP:
скопировать код в буфер обмена
  1. $_GET['page'] = ++$_GET['page'];


-----
То что программа работает, не означает что она написана правильно!
 
 Top
teddy
Отправлено: 06 Февраля, 2014 - 17:57:07
Post Id


Участник


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


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




Как раз писал сейчас себе пагинатор. Только закончил. В спойлере лежит код.
Спойлер (Отобразить)

Пример использования:
PHP:
скопировать код в буфер обмена
  1. $pagi = new Pagination(5, $_GET['page'], 'items', array('name', 'description'));


Первый параметр это сколько записей выводить на одну страницу

Второй параметр это цифра которая берется из $_GET параметра для переключения страницы. В конечном счете без разницы ЧПУ у Вас или нет, работать будет по всякому.

Третий параметр это название таблицы из которой нужно забрать записи

Четвертый параметр принимается в виде массива, куда нужно передать название полей из таблицы, которые нужно выбрать.

Когда все эти настройки переданы, можно забирать контент и страницы.
PHP:
скопировать код в буфер обмена
  1.  
  2. $content = $pagi->getPageContent();
  3. var_dump($content);//тут лежит нужный контент в зависимости от гет параметра
  4.  
  5. var_dump($pagi->showPages('http://site.ru/pagination.php?page='));//тут лежат странички
  6.  

В метод showPages нужно передать ссылку, по которой должна работать постраничная навигация. В данном примере ссылка без ЧПУ. А если у Вас ЧПУ, тогда передаем ссылку так http://site[dot]ru/pagination/page/

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

Да, конечно же в конструкторе нужно указать свое подключение к БД, свой логин и пароль и т.д. Если синглтон то цепляйте инстанс. Вообщем без разницы.

Если найдете какие то ошибки, прошу мне о них сообщить. Если все норм, то наверное опубликую класс в пользовательских функциях

(Отредактировано автором: 06 Февраля, 2014 - 18:34:29)

 
 Top
KingStar
Отправлено: 06 Февраля, 2014 - 18:18:57
Post Id



Участник


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


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




teddy как же быть, если нужна выборка с условием?


-----
То что программа работает, не означает что она написана правильно!
 
 Top
teddy
Отправлено: 06 Февраля, 2014 - 18:26:09
Post Id


Участник


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


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




KingStar
Можно создать свойство, которое будет приклеиваться к запросу(заполнить его можно как угодно, хоть через конструктор, хоть через метод, хоть через публичное свойство), думаю Вы не сомневаетесь, что это дело пяти минут Улыбка
 
 Top
KingStar
Отправлено: 06 Февраля, 2014 - 18:36:56
Post Id



Участник


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


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




teddy можно как говорится "Машку за ляжку" Радость
через конструктор, или еще как ты там советуешь получится пагинация привязана к конкретному условию, и смысл тогда всех передаваемых полей в талице, и т.п. если таким же образом по твоей идее можно в конструкторе, методе ...

в общем сыровато... Хм
(Добавление)
а еще я хочу сортировку свою указывать и по какому полю сортировать Хорошо


-----
То что программа работает, не означает что она написана правильно!
 
 Top
teddy
Отправлено: 06 Февраля, 2014 - 18:43:29
Post Id


Участник


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


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




KingStar
Почему к конкретному условию? Можно сделать мод-ы в которых будет работать пагинатор, в конструктор передавать этот мод, и этот мод будет свитчиться уже внутри класса, и в зависимости от мода мы будем попадать в нужный кейс где будут определяться различные условия выборки. Пока ничего лучше придумать не могу, от советов по усовершенствованию не откажусь )
 
 Top
KingStar
Отправлено: 06 Февраля, 2014 - 18:48:48
Post Id



Участник


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


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




и вообще, это уже не пагинация, а уже делающий конретные действия с конкретной таблицей класс
пагинации ты должен скармливать результат выборки, объект, массив, что угодно, а она уже дожна выдать кнопки, ссылки, а то получается что ты то выборку делаешь, выводишь, затем снова выборка, пагинация, так что ли??? если пустой результат вернет, что покажет??? а если меньше указанных в первом параметре? а если на последнюю хочу страницу?
(Добавление)
KingStar пишет:
а еще я хочу сортировку свою указывать и по какому полю сортировать Хорошо

(Добавление)
вот блин я противный Радость раскреттиковал


-----
То что программа работает, не означает что она написана правильно!
 
 Top
teddy
Отправлено: 06 Февраля, 2014 - 19:04:08
Post Id


Участник


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


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




KingStar пишет:
и вообще, это уже не пагинация, а уже делающий конретные действия с конкретной таблицей класс

Как я уже говорил, условия можно настроить по модам, название таблицы определяется в конструкторе. Если погуглить, то почти все примеры пейджера построены на mysql_query и LIMIT, я думаю класс вполне подойдет для многих стандартных задач, никто не говорил, что это лучший класс на свете. Более того, я не зря сказал, что интересует оценка форумчан, заинтересован в улучшении.

KingStar пишет:
а еще я хочу сортировку свою указывать и по какому полю сортировать Хорошо

PHP:
скопировать код в буфер обмена
  1. switch($mode){
  2.     case 'order':
  3.         $query = "SELECT ... ORDER BY ".$this->_orderfield;
  4.         break;
  5. }

При необходимости можно сделать много кейсов с различными модами, никто не запрещает...
Ещё есть вариант передавать запрос при создании объекта и в конце прицеплять к нему лимит


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

По поводу того что найдена ли запись или нет, то у меня возвращается false, если записи не найдены. Отследить то что записи не найдены не составит проблем, один if все решит.

В целом, благодарю за замечания, часть будет реализована. Если есть ещё что сказать, то я обязательно приму во внимание.
(Добавление)
KingStar пишет:
если пустой результат вернет, что покажет???

PHP:
скопировать код в буфер обмена
  1. if($content){
  2.     //можно показать контент и отрисовать навигацию    
  3. }else{
  4.    //шлем header, отрисовываем темплейт 404 что угодно короче...
  5. }

(Добавление)
KingStar
http://forum.php.su/topic.php?fo...35&topic=839
Специально для тебя

(Отредактировано автором: 06 Февраля, 2014 - 19:18:13)

 
 Top
KingStar
Отправлено: 06 Февраля, 2014 - 21:27:29
Post Id



Участник


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


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




teddy, а че для меня то сразу А?! я лишь подтолкнул тебя работать дальше, развивать, делать более гибким, может кому-то и пригодится,
(Добавление)
да и по моему тема уже заюзана, велосипедов хватает, для общего развития если только


-----
То что программа работает, не означает что она написана правильно!
 
 Top
teddy
Отправлено: 06 Февраля, 2014 - 23:44:36
Post Id


Участник


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


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




KingStar пишет:
а че для меня то сразу

Шутка Улыбка Я принял во внимание многое) теперь можно и фильтр ставить и даже параметры свои в зарос передавать... По поводу великов - Здесь часто можно встретить людей с проблемами пейджера, вот пусть пользуются если надо... фактически для использования нужно написать всего 2-3 строчки кода... Ну и мне критика не помешала) Если есть кому что добавить - говорите, думаю сделаю )

Последний вариант на данный момент лежит в топике(ссылка выше).. обновил сейчас
 
 Top
3d_killer
Отправлено: 07 Февраля, 2014 - 08:53:10
Post Id



Участник


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


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




навигатор сам я написал все работает отлично пока дело не доходит до фильтра когда переменных GET неизвестное количество и их нужно сохранить поменяв при этом только $_GET['page']
 
My status
 Top
3d_killer
Отправлено: 07 Февраля, 2014 - 13:00:37
Post Id



Участник


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


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




esterio Благодарб натолкнули на мысль написал простенькую функцию которая делает то что мне надо. Примерчик
PHP:
скопировать код в буфер обмена
  1.  
  2.         $r = parse_url($_SERVER['REQUEST_URI']);
  3.         //echo $r['query'];
  4.         $vars=explode('&',$r['query']);
  5.         foreach($vars as $key_var => $value_var)
  6.                 {
  7.                         $temp_var=explode('=',$value_var);
  8.                         $ext[$temp_var[0]]=$temp_var[1];       
  9.                 }
  10.         $ext['page']=100;
  11.        
  12.         echo(http_build_query($ext));
  13.  
 
My status
 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