2013-03-25 4 views
1

У меня есть функция поиска, которая инициируется запрос GET, который выглядит примерно так: http://localhost:8888/TESTCI/search/get_books?i-slider=7.0&rt-slider=70&start-year=1955&end-year=2013&genre=all&language=allСортировка списка с помощью запроса GET

Это все хорошо, и функция поиска работает, как ожидалось. Проблема возникает, когда я хочу сортировать результаты по году, жанру, языку и т. Д. У меня есть ряд ссылок на странице результатов, которые я пытаюсь использовать для сортировки. Учитывая, что у меня нет формы на странице для повторной отправки значений, моя идея состояла в том, чтобы сделать ссылки равными текущему URL-адресу плюс параметр GET для сортировки. Пример года сортировка существ:

$year_sort_class = "ui-btn-active ui-state-persist sort-desc"; 
$year_sort_order = "&sort-by=year-asc"; 

<li class="<?php echo $year_sort_class ?>"><a href="<?php echo $_SERVER['REQUEST_URI'].$year_sort_order ?>">Year</a></li> 

Очевидная проблема, которая возникает после того, как я сортирую, что теперь $_SERVER['REQUEST_URI'] равно мое первоначальное URL плюс &sort-by=year-asc. Это означает, что любые дальнейшие виды, будь то по жанру, языку или год снова будет непрерывно добавляется к URL, что приводит к URL, который может выглядеть примерно так

http://localhost:8888/TESTCI/search/get_books?i-slider=7.0&rt-slider=70&start-year=1955&end-year=2013&genre=all&language=all&sort-by=rt-desc&sort-by=i-desc&sort-by=year-desc&sort-by=i-desc 

после 4 сортов.

Какое решение этой проблемы? Я пропустил что-то принципиальное здесь и полностью усложнил проблему?

ответ

1

Попробуйте что-то вроде этого ...

<? 
    $href = explode('?',$_SERVER['REQUEST_URI']); 
    $href = $href[0]; 

    $qs = array(); 
    foreach ($_GET as $param => $val) { 
     if ($param != 'sort-by') $qs[$params] = $val; 
    } 
?> 

<a href="<?=$href.'?'.implode('&',$qs).'&sort-by="year"?>">Year</a> 
0

Выполнение регулярного выражения, чтобы удалить предыдущую сортировку.

preg_replace('/\&sort\-by\=([a-zA-Z0-9-_]+)/','',$_SERVER['REQUEST_URI']); 
0

Вы могли бы ввести переменную BaseUrl и обернуть его в функции

function buildLink($sort = "year-asc", $foo = "default") { 
    $baseUrl = "http://localhost:8888/TESTCI/search/get_books?"; 
    return $baseurl.$sort."&".$foo; 
} 

print "<a href='".buildLink("year-desc")."'>My Book</a> 
+0

Проблема в том, как я могу хранить и сохраняться BaseUrl , Это не всегда будет одинаковым и, действительно, может быть совершенно другим. – garethdn

+0

Является ли baseurl отличным для установки вашего приложения или другого для каждой книги? – herrjeh42

Смежные вопросы