Простой поиск: передача переменной формы в URI с помощью CodeIgniter

У меня есть форма поиска на каждой из моих страниц. Если я использую помощник формы, по умолчанию он равен $_POST. Я бы хотел, чтобы поисковый запрос отображался в URI:

http://example.com/search/KEYWORD

Я был в Google около часа, но безрезультатно. Я нашел только статьи о том, как $_GET в основном отключен из-за собственного соглашения URI. Я не могу быть первым человеком, которому нужна такая функциональность, не так ли? Заранее спасибо!


person jmccartie    schedule 22.10.2008    source источник


Ответы (5)


Есть лучшее решение, если вы имеете дело с людьми без включенного JS.

Просмотр:

<?php echo form_open('ad/pre_search');?>
   <input type="text" name="keyword" />
</form>

Контроллер

<?php
    function pre_search()
    {
        redirect('ad/search/.'$this->input->post('keyword'));
    }

    function search()
    {
        // do stuff;
    }
?>

Я использовал это много раз раньше.

person Teej    schedule 26.11.2008
comment
Торп, как вы справляетесь с апострофами? - person jmccartie; 23.04.2009
comment
Вы должны изменить это в файле конфигурации: $config['permitted_uri_chars'] = 'az 0-9~%.:_\-'; to $config['permitted_uri_chars'] = '\'a-z 0-9~%.:_\-'; - person Teej; 23.04.2009
comment
Я знаю, что это очень старый вопрос, но я только что избавил меня от серьезных головных болей - ура! - person Chris; 06.04.2011

Насколько я знаю, нет способа сделать это с помощью простого POST. Однако вы можете получить доступ к форме через Javascript и обновить место назначения. Например:

<form id="myform" onsubmit="return changeurl();" method="POST">
<input id="keyword">
</form>

<script>
function changeurl()
{
    var form = document.getElementById("myform");
    var keyword = document.getElementById("keyword");

    form.action = "http://mysite.com/search/"+escape(keyword.value);

    return true;
}
</script>
person 64BitBob    schedule 22.10.2008
comment
проблема с Codeigniter здесь - апострофы в строке поиска не будут приняты библиотекой URI CI: отправленный вами URI содержит запрещенные символы. - person jmccartie; 23.04.2009

Прочтите этот пост о том, как включить строки запроса GET вместе с сегментированными URL-адресами.

http://codeigniter.com/forums/viewthread/56389/#277621

После включения вы можете использовать следующий метод для получения дополнительных переменных.

// url = http://example.com/search/?q=text
$this->input->get('q');

Это лучше, потому что вам не нужно менять параметр конфигурации Allowed_uri_chars. Вы можете получить сообщение об ошибке «Отправленный вами URI содержит запрещенные символы», если вы просто поместите все, что пользователь вводит в URI.

person muitocomplicado    schedule 28.10.2008

Вот лучшее решение:

$uri = $_SERVER['REQUEST_URI'];

$pieces = explode("/", $uri);

$uri_3 = $pieces[3];

Спасибо erunways!

person Jimmy    schedule 09.08.2010

Я мало что знаю о CodeIgniter, но это PHP, так что $_GET не должен быть доступен для вас? Вы можете отформатировать свой URL-адрес так же, как это делает Google: mysite.com/search?q=KEYWORD и извлечь данные с помощью $_GET['q'].

Кроме того, форма поиска кажется плохим местом для использования POST; GET доступен для закладок и не означает, что что-то меняется на стороне сервера.

person Justin Voss    schedule 22.10.2008
comment
Нет. GET отключен в Codeigniter. - person jmccartie; 23.10.2008