Ricerca semplice: passaggio della variabile di modulo all'URI mediante CodeIgniter
-
03-07-2019 - |
Domanda
Ho un modulo di ricerca su ciascuna delle mie pagine. Se uso il form helper, per impostazione predefinita è $ _POST
. Vorrei che il termine di ricerca fosse visualizzato nell'URI:
http://example.com/search/KEYWORD
Sono stato su Google per circa un'ora, ma inutilmente. Ho trovato solo articoli su come $ _GET
sia sostanzialmente disabilitato, a causa della convenzione URI nativa. Non posso essere la prima persona a desiderare questo tipo di funzionalità, vero? Grazie in anticipo!
Soluzione
C'è una soluzione migliore se hai a che fare con persone senza JS abilitato.
Visualizza:
<?php echo form_open('ad/pre_search');?>
<input type="text" name="keyword" />
</form>
Controller
<?php
function pre_search()
{
redirect('ad/search/.'$this->input->post('keyword'));
}
function search()
{
// do stuff;
}
?>
L'ho usato molte volte prima.
Altri suggerimenti
Per quanto ne so, non esiste un metodo per ottenere ciò con un semplice POST. Tuttavia, è possibile accedere al modulo tramite Javascript e aggiornare la destinazione. Ad esempio:
<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>
Dai un'occhiata a questo post su come abilitare le stringhe di query GET insieme agli URL segmentati.
http://codeigniter.com/forums/viewthread/56389/#277621
Dopo aver abilitato è possibile utilizzare il seguente metodo per recuperare le variabili aggiuntive.
// url = http://example.com/search/?q=text
$this->input->get('q');
Questo è meglio perché non è necessario modificare l'impostazione di configurazione consentita_uri_chars. Potresti ottenere " L'URI che hai inviato ha vietato i caratteri " errore se si inserisce semplicemente qualsiasi cosa l'utente immetta nell'URI.
Non so molto di CodeIgniter, ma è PHP, quindi $ _GET
non dovrebbe essere ancora disponibile per te? Puoi formattare il tuo URL allo stesso modo di Google: mysite.com/search?q=KEYWORD
ed estrarre i dati con $ _GET ['q']
.
Inoltre, un modulo di ricerca sembra un brutto posto per usare POST; GET è un segnalibro e non implica che qualcosa stia cambiando sul lato server.