Bonjour,
Dans ma page recherche.html, j’ai intégré des filtres pour permettre d’affiner une recherche. Cependant, je ne parviens pas à retranscrire la syntaxe du résultat de recherche dans l’url recalculée.
Ci-dessous le script qui me permet de recalculer l’url lors de la validation du filtre :
<script>
// force l'envoi des valeurs dans l'environnement
let contenuchoix = document.getElementById("contenu_select");
let auteurchoix = document.getElementById("auteur_select");
let bouton1 = document.getElementById("bouton_form");
bouton1.addEventListener("click", click_bouton1);
function click_bouton1 () {
var contenu = contenuchoix.value ;
var auteur_texte = auteurchoix.value ;
window.location.href = '[(#URL_PAGE{recherche})]&recherche=[(#RECHERCHE)]&contenu=' + contenu + '&auteur_texte=' + auteur_texte;
event.preventDefault();
};
</script>
Le tout fonctionne très bien lorsque la recherche ne contient qu’un mot. Par contre, je perds la synthaxe lorsque la recherche est plus élaborée. Un exemple pour mieux comprendre.
Si je tape "motrecherché1 motrecherché2"
dans la barre de recherche.
Dans l’url, cela va afficher :
http://monsite/spip.php?page=recherche&recherche="motrecherché1+motrecherché2"
Et lorsque je sélectionne un filtre et recharge l’url selon le script ci-dessus, l’url se transforme en :
http://monsite/spip.php?page=recherche&recherche="motrecherché1%20motrecherché2"&mesfiltres..."
Est-ce qu’il existe un filtre spécifique à associer à [(#RECHERCHE)]
dans [(#URL_PAGE{recherche})]&recherche=[(#RECHERCHE)]&
pour retrouver la bonne syntaxe dans la barre de recherche ?
J’ai essayé plusieurs filtres de texte depuis Filtres - SPIP mais rien n’a visiblement fonctionné. J’imagine qu’il doit y avoir du script derrière cela pour convertir les espaces
en +
et conserver tel quel les guillemets "
.
Je chercherais bien dans la syntaxe utilisée dans les modèles de pagination (car au changement de page, la syntaxe reste la bonne), mais je ne sais pas où chercher le bout de code correspondant .
Salut,
Je pense que la fonction qui t’intéresse dans ce cas est |parametre_url
en conjonction avec #SELF
: voir ici.
Ces filtres/balises sont plutôt destinés à un traitement au niveau du squelette ; ton approche en javascript
paraît un peu étonnante ; Toutefois, sache que l’équivalent du filtre |parametre_url
, existe aussi en javascript, quelque chose comme :
parametre_url(window.location.href,'recherche','foo bar')
1 « J'aime »
Bonjour,
Merci beaucoup pour cette aide précieuse, c’est la piste qu’il me fallait .
J’ai pu obtenir ce que je voulais en adaptant comme ceci :
<script>
...
window.location.href = '[(#SELF|replace{amp;})]&contenu=' + contenu + '&auteur_texte=' + auteur_texte;
};
...
</script>
J’ai du intégrer l’argument |replace{amp;}
car au calcul de l’url, http://monsite/spip.php?page=recherche&recherche="motrecherché1+motrecherché2"
donne http://monsite/spip.php?page=recherche&recherche="motrecherché1+motrecherché2"
.
Concernant la piste parametre_url(window.location.href,'recherche','foo bar')
, j’ai testé mais je n’ai pas su comment l’adapter. Pas très grave dans la mesure où je suis parvenu à mes fins avec la première option.
Pour le contexte, l’utilisation du script me permet de conserver mes paramètres de filtres lorsque je clique sur ma pagination : Comment conserver les valeurs d’un form dans un affichage avec pagination ?
Je suis allé un peu vite en besogne visiblement. L’utilisation de l’argument #SELF était problématique dans la mesure où cela ajoutait l’ensemble de mes variables de tri dans l’URL à chaque fois que je rechargeais l’URL avec un filtre supplémentaire, au lieu de simplement mettre à jour lesdites variables.
En expérimentant, j’ai pu trouver une solution adéquate à mon besoin :
<script>
...
window.location.href = '[(#URL_PAGE{recherche})]&recherche=' + '[(#RECHERCHE)]'.replace(/"/g, '\"').replace(' ', '+') + '&contenu=' + contenu + '&auteur_texte=' + auteur_texte;
};
...
</script>
Je ne l’avais pas précisé dans mon premier post, mais l’argument .replace
sert à conserver la syntaxe correcte de l’URL d’une recherche, lorsque l’utilisateur recherche une chaine de mots qu’il place entre guillemets (quotation mark).
A toute fin utile, pour que certains de mes filtres fonctionnent, j’ai du englober le contenu de recherche.html dans une boucle comme celle-ci :
<BOUCLE_principale(RUBRIQUES){tout}{0,1}>
...
</BOUCLE_principale>
Et pour finir, j’ai du me creuser encore un peu la tête pour implémenter un bouton de réinitialisation de mes filtres comme ceci :
<button id="reset" class='button' onClick="window.location.href = '[(#URL_PAGE{recherche}|concat{'&recherche=', #RECHERCHE|replace{' ','+'}})]';"><:reset_filtre:></button>`
Pour compléter mon propos, et voir le réel avantage d’utiliser parametre_url()
;
- on peut supprimer un paramètre d’url en passant une chaîne vide
- on peut appliquer en série la fonction pour traiter plusieurs paramètres d’url
- le quatrième argument de la fonction permet de choisir le séparateur :
&
, &
, …