Как можно получить сегменты URI Code Igniter для нескольких переменных? - PullRequest
0 голосов
/ 16 февраля 2010

Я пишу приложение, которое позволяет фильтровать результаты базы данных по местоположению и категории.

Если кто-то будет искать Ливерпуль в категории Гольф, URI будет /index.php/search/Liverpool/Golf.

Если кто-то захочет выполнить поиск по местоположению, но не по категории, он будет отправлен на /index.php/search/Liverpool

Однако, если кто-то захочет фильтровать только по категории, он не сможет использовать /index.php/search/Golf, потому что это будет обнаружено при поиске местоположения.

Есть ли лучший способ признания /index.php/search/Golf? Что лучше добавить в URI, чтобы эти два запроса были различны? /index.php/search/category/Golf возможно?

Хотя это начинает показывать характеристики /index.php?search&category=Golf, и это именно то, чего я пытаюсь избежать.

Ответы [ 4 ]

2 голосов
/ 16 февраля 2010

Попробуйте использовать $ this-> uri-> uri_to_assoc (n) здесь описано http://codeigniter.com/user_guide/libraries/uri.html (наполовину вниз на странице)

В основном вы будете структурировать свой URL следующим образом:

mysite.com / index.php / поиск / местоположение / ливерпуль / категория / гольф

ПРИМЕЧАНИЕ: параметры являются необязательными, поэтому вам не нужно постоянно иметь оба этих параметра. вы также можете сделать

mysite.com / index.php / поиск / местоположение / ливерпуль / и

mysite.com / index.php / поиск / категория / гольф

таким образом он вернет FALSE, если искомый элемент не существует

0 голосов
/ 19 февраля 2010

Посмотрите на http://lucenebook.com/#/p:solr/s:wiki и кликните немного по левой навигационной панели. Обратите пристальное внимание на то, что происходит в URL, когда вы делаете. Мне очень нравится эта схема по многим причинам.

  1. Это оптимизировано для SEO.
  2. "Любопытные" люди могут смешивать / сопоставлять URL-адреса, и это все еще разрешает правильный поиск.
  3. Просто выглядит хорошо!

Конечно, дело в коде, в том, как вы его создаете. Мне потребовалось несколько недель, чтобы разобраться, но у меня наконец-то появилась своя версия этого сайта. Просто не на основе ajax, потому что мне нравятся поисковые системы лучше, чем ajax. Аякс не оплачивает счета.

0 голосов
/ 17 февраля 2010

Я использую формат, предложенный Томом выше, а затем делаю что-то по линии ниже, чтобы определить значение параметров.

$segment_array = $this->uri->segment_array();        
$is_location_searched = array_search('location', $segment_array);
if($is_location_searched && $this->uri->segment($is_location_searched +1))
{
    $location = $this->uri->segment($is_sorted+1);
}
0 голосов
/ 16 февраля 2010

Вероятно, было бы лучше сохранить ваши сегменты URI релевантными независимо от того, что они ищут.

index.php/LOCATION/CATEGORY

Если они не заинтересованы в местоположении, передайте в систему заполнитель:

index.php/anywhere/golf

Затем в своем коде вы просто проверяете эту конкретную строку ЛЮБОЕ, чтобы определить, хотят ли они видеть только действие. Я предполагаю, что вы будете перенаправлять их с помощью ссылок или форумов (и что они сами не вводят строку URI), поэтому вы должны быть в безопасности, просто передавая ожидаемую информацию и проверяя ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...