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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top