Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Добавление GET параметров при постраничной навигации
 
 автор: tima2010   (15.07.2013 в 14:43)   письмо автору
 
 

Привет! Столкнулся с такой проблемой.

На сайте реализован поиск. Параметры передаются методом GET. Строка выглядит так:

http://www.site.ru/?text=sss&photo=1&price=555

Подключил скрипт постраничной навигации который добавляет в GET параметры номер страницы

Есть небольшая проверка если GET параметры есть до ставим & иначе ?


<?php
                
if(strpos($REQUEST_URI'?'))
                {
                    
$return .= '<a href="'.$REQUEST_URI.'&page='.$i.'">'.$i.'</a>';
                }
                else
                {
                    
$return .= '<a href="'.$REQUEST_URI.'?page='.$i.'">'.$i.'</a>';
                }
?>


При переходе на страницу все работает и выглядит примерно следующим образом:
http://www.site.ru/?text=sss&photo=1&price=555&page=5

НО если мы и дальше начнем нажимать на ссылки перехода страница то параметр PAGE не заменяет свое значение а снова добавляет его
http://www.site.ru/?text=sss&photo=1&price=555&page=5&page=4&page=6

или

http://www.site.ru/?page=3&page=4&page=6

как избежать этот момент?

Спасибо.

  Ответить  
 
 автор: confirm   (15.07.2013 в 14:55)   письмо автору
 
   для: tima2010   (15.07.2013 в 14:43)
 

Зачем вообще нужна эта проверка и добавление &?
Есть запрос к странице, страниц более чем одновременно отображаемых, значит строите навигатор, а далее по условию if($_GET) к навигатору добавляете http_build_query($_GET).

  Ответить  
 
 автор: tima2010   (15.07.2013 в 15:17)   письмо автору
 
   для: confirm   (15.07.2013 в 14:55)
 

Спасибо, сделал так:

<?php
                $parse_str 
parse_str($_SERVER['QUERY_STRING'], $queryVars );
                if(
is_array($queryVars))
                {
                    
$queryVars['page'] = $i;
                    
$link '?'.http_build_query$queryVars );
                }
                else
                {
                    
$link '?page='.$i;
                }
?>

  Ответить  
 
 автор: confirm   (15.07.2013 в 15:26)   письмо автору
 
   для: tima2010   (15.07.2013 в 15:17)
 

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

Если много страниц, это результат поиска и в строке навигатора надо передавать параметры это поиска, то зачем же так много писать? Если вы знаете, что это поиск, а значит и есть его параметры, то из чего возникает вообще эта проверка? Иначе впечатление словно, как говорится, через заднее место сотворено.

  Ответить  
 
 автор: tima2010   (15.07.2013 в 17:00)   письмо автору
 
   для: confirm   (15.07.2013 в 15:26)
 

Делал постраничную навигацию на сайте.

проблема заключалась в том, что при переходе между страницами в адресной строке параметр страницы не заменялся а добавлялся page=1&page=2&page=3

  Ответить  
 
 автор: confirm   (15.07.2013 в 17:52)   письмо автору
 
   для: tima2010   (15.07.2013 в 17:00)
 

А при чем тут поиск?

Еще раз повторяю - принципы постраничной навигации одинаковы, и она строится всегда с учетом текущей страницы, и строится при каждом запросе. А ваша непонятная проверка есть ли параметр запроса какой-то страницы вообще не понятен. Если этот параметр присутствует, значит в скрипт построения постраничной навигации передается его значение, иначе значение по умолчанию. Все, какие могут быть при этом поиски "?" или parse_str?

Если параметры указанные в вашем первом посте, это параметры поиска, и речь действительно идет о постраничной навигации результатов поиска, то зачем передавать (приклеивать) их в url постоянно, и почему эти параметры первичные, а параметр запрашиваемой страницы вторичен?

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

Кешированные результаты поиска можно выводить частями также как и страницы при страничной навигации.

У вас же что-то непонятное - либо вы не знаете, что осуществлялся поиск, либо не в курсе того, что много страниц, потому что действуете какими-то окольными путями, словно не вы автор скрипта, и не оперируете данными, которые по идее вам точно должны быть известны, а гадаете на кофейной гуще.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования