Простой Поиск:Передача переменной формы в URI с помощью CodeIgniter
-
03-07-2019 - |
Вопрос
У меня есть форма поиска на каждой из моих страниц.Если я использую form helper, то по умолчанию используется значение $_POST
.Я бы хотел, чтобы поисковый запрос отображался в URI:
http://example.com/search/KEYWORD
Я пробыл в Google около часа, но безрезультатно.Я нашел только статьи о том, как $_GET
в основном отключен из-за собственного соглашения URI.Я же не могу быть первым человеком, которому нужна такая функциональность, не так ли?Заранее спасибо!
Решение
Есть лучшее решение, если вы имеете дело с людьми без включенного 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;
}
?>
Я уже много раз пользовался этим раньше.
Другие советы
Насколько я знаю, не существует способа добиться этого с помощью простого ПОСТА.Однако вы можете получить доступ к форме через 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>
Ознакомьтесь с этим сообщением о том, как включить ПОЛУЧЕНИЕ строк запроса вместе с сегментированными URL-адресами.
http://codeigniter.com/forums/viewthread/56389/#277621
После включения этого параметра вы можете использовать следующий метод для получения дополнительных переменных.
// url = http://example.com/search/?q=text
$this->input->get('q');
Это лучше, потому что вам не нужно изменять параметр конфигурации permitted_uri_chars.Вы можете получить сообщение об ошибке "В отправленном вами URI запрещены символы", если вы просто введете в URI все, что вводит пользователь.
Вот лучшее решение:
$uri = $_SERVER['REQUEST_URI'];
$pieces = explode("/", $uri);
$uri_3 = $pieces[3];
Спасибо пути!
Я не очень много знаю о CodeIgniter, но это PHP, так что не следует $_GET
все еще быть доступным для вас?Вы могли бы отформатировать свой URL-адрес так же, как это делает Google: mysite.com/search?q=KEYWORD
и извлеките данные с помощью $_GET['q']
.
Кроме того, поисковая форма кажется неподходящим местом для использования POST;GET является примечательным и не подразумевает, что что-то меняется на стороне сервера.