Pesquisa Simples: Passando Form variável para URI Usando CodeIgniter
-
03-07-2019 - |
Pergunta
Eu tenho um formulário de pesquisa em cada uma das minhas páginas. Se eu usar o formulário ajudante, o padrão é $_POST
. Eu gostaria que o termo de pesquisa para aparecer na URI:
http://example.com/search/KEYWORD
Eu estive no Google por cerca de uma hora, mas sem sucesso. Eu só encontrados artigos sobre como $_GET
está desativado, basicamente, por causa da convenção nativa URI. Eu não posso ser a primeira pessoa a querer esse tipo de funcionalidade, sou eu? Agradecemos antecipadamente!
Solução
Há uma correção melhor se você está lidando com pessoas sem JS habilitado.
Vista:
<?php echo form_open('ad/pre_search');?>
<input type="text" name="keyword" />
</form>
Controlador
<?php
function pre_search()
{
redirect('ad/search/.'$this->input->post('keyword'));
}
function search()
{
// do stuff;
}
?>
Eu tenho usado este um monte de vezes antes.
Outras dicas
Tanto quanto eu sei, não há nenhum método de fazer isso com um simples post. No entanto, você pode acessar o formulário via Javascript e atualizar o destino. Por exemplo:
<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>
Confira este post sobre como ativar seqüências de consulta GET juntamente com URLs segmentados.
http://codeigniter.com/forums/viewthread/56389/#277621
Depois de ativar o que você pode usar o seguinte método para recuperar as variáveis ??adicionais.
// url = http://example.com/search/?q=text
$this->input->get('q');
Esta é melhor, porque você não precisa alterar a configuração dos permitted_uri_chars configuração. Você pode obter "caracteres O URI você enviou já não permitidos" erro se você simplesmente colocar qualquer coisa que o usuário entra na URI.
Aqui é a melhor solução:
$uri = $_SERVER['REQUEST_URI'];
$pieces = explode("/", $uri);
$uri_3 = $pieces[3];
erunways !
Eu não sei muito sobre CodeIgniter, mas é PHP, por isso não deve $_GET
ainda estar disponível para você? Você pode formatar o URL da mesma forma que o Google faz:. mysite.com/search?q=KEYWORD
e puxar os dados fora com $_GET['q']
Além disso, um formulário de pesquisa parece ser uma má lugar para usar POST; GET é bookmarkable e não implica que algo está mudando no lado do servidor.