|
|
|
| Привет! Столкнулся с такой проблемой.
На сайте реализован поиск. Параметры передаются методом 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
как избежать этот момент?
Спасибо. | |
|
|
|
|
|
|
|
для: tima2010
(15.07.2013 в 14:43)
| | Зачем вообще нужна эта проверка и добавление &?
Есть запрос к странице, страниц более чем одновременно отображаемых, значит строите навигатор, а далее по условию if($_GET) к навигатору добавляете http_build_query($_GET). | |
|
|
|
|
|
|
|
для: 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;
}
?>
|
| |
|
|
|
|
|
|
|
для: tima2010
(15.07.2013 в 15:17)
| | Вы бы уж лучше пояснили, что делаете, иначе ваш вопрос я понял так - сперва ничего, потом большой взрыв и появилась вселенная, к которой надо что-то прикрутить.
Если много страниц, это результат поиска и в строке навигатора надо передавать параметры это поиска, то зачем же так много писать? Если вы знаете, что это поиск, а значит и есть его параметры, то из чего возникает вообще эта проверка? Иначе впечатление словно, как говорится, через заднее место сотворено. | |
|
|
|
|
|
|
|
для: confirm
(15.07.2013 в 15:26)
| | Делал постраничную навигацию на сайте.
проблема заключалась в том, что при переходе между страницами в адресной строке параметр страницы не заменялся а добавлялся page=1&page=2&page=3 | |
|
|
|
|
|
|
|
для: tima2010
(15.07.2013 в 17:00)
| | А при чем тут поиск?
Еще раз повторяю - принципы постраничной навигации одинаковы, и она строится всегда с учетом текущей страницы, и строится при каждом запросе. А ваша непонятная проверка есть ли параметр запроса какой-то страницы вообще не понятен. Если этот параметр присутствует, значит в скрипт построения постраничной навигации передается его значение, иначе значение по умолчанию. Все, какие могут быть при этом поиски "?" или parse_str?
Если параметры указанные в вашем первом посте, это параметры поиска, и речь действительно идет о постраничной навигации результатов поиска, то зачем передавать (приклеивать) их в url постоянно, и почему эти параметры первичные, а параметр запрашиваемой страницы вторичен?
Результат выборки по поиску вообще лучше кешировать, и выводить кешированные данные, а не постоянно обращаться к базе, то есть постоянно передавать параметры поиска при навигации надобности нет. К следующей выборке из базы при поиске нужно прибегать только в том случае, если параметры поиска изменились. Это сделать несложно, если наряду с кешированием данных запоминать и параметры поиска. Простое пересечение массивов сохраненных данных, и вновь полученных даст ответ, изменились ли они - если пересечение вернет количество элементов меньше чем в сохранном массиве, значит новая выборка.
Кешированные результаты поиска можно выводить частями также как и страницы при страничной навигации.
У вас же что-то непонятное - либо вы не знаете, что осуществлялся поиск, либо не в курсе того, что много страниц, потому что действуете какими-то окольными путями, словно не вы автор скрипта, и не оперируете данными, которые по идее вам точно должны быть известны, а гадаете на кофейной гуще. | |
|
|
|