Recherche simple: Passage d'une variable de formulaire en URI à l'aide de CodeIgniter
-
03-07-2019 - |
Question
J'ai un formulaire de recherche sur chacune de mes pages. Si j’utilise formulaire, le code par défaut est $ _ POST
. J'aimerais que le terme de recherche apparaisse dans l'URI:
http://example.com/search/KEYWORD
Cela fait environ une heure que je suis sur Google. En vain. J'ai seulement trouvé des articles sur la façon dont $ _GET
est fondamentalement désactivé, en raison de la convention d'URI native. Je ne peux pas être le premier à vouloir ce genre de fonctionnalité, n'est-ce pas? Merci d'avance!
La solution
Il y a une meilleure solution si vous avez affaire à des personnes sans JS activé.
Afficher:
<?php echo form_open('ad/pre_search');?>
<input type="text" name="keyword" />
</form>
Contrôleur
<?php
function pre_search()
{
redirect('ad/search/.'$this->input->post('keyword'));
}
function search()
{
// do stuff;
}
?>
Je l'ai déjà souvent utilisé.
Autres conseils
Pour autant que je sache, il n’existe aucune méthode permettant de réaliser cela avec un simple POST. Cependant, vous pouvez accéder au formulaire via Javascript et mettre à jour la destination. Par exemple:
<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>
Consultez cet article pour savoir comment activer les chaînes de requête GET avec des URL segmentées.
http://codeigniter.com/forums/viewthread/56389/#277621
Après l'activation, vous pouvez utiliser la méthode suivante pour récupérer les variables supplémentaires.
// url = http://example.com/search/?q=text
$this->input->get('q');
Cela est préférable car vous n'avez pas besoin de modifier le paramètre de configuration allowed_uri_chars. Vous pouvez obtenir "L'URI que vous avez soumis contient des caractères interdits". error si vous mettez simplement quelque chose que l'utilisateur entre dans l'URI.
Je ne connais pas grand chose à propos de CodeIgniter, mais c'est du PHP, donc $ _ GET
ne devrait-il pas être encore disponible? Vous pouvez formater votre URL de la même manière que Google: mysite.com/search?q=KEYWORD
et extraire les données avec $ _GET ['q']
.
En outre, un formulaire de recherche semble être un mauvais endroit pour utiliser POST; GET est un favori et n'implique pas que quelque chose est en train de changer côté serveur.