Filtre de recherche multi-critères
Bonjour,
J’ai créé un nouvel objet éditorial "Séjours" avec la fabrique, avec pas mal de champs ajoutés avec Champs Extras.
Je désire créer un moteur de recherche qui permet à l’utilisateur d’affiner ses résultats en 3 étapes (au moins) :
par saison
puis par âge
enfin par thème
Quand on sélectionne un item dans le 1er menu déroulant, le deuxième, puis le troisième menu se mettent automatiquement à jour pour ne donner que les items qui sont rattachés au premier puis au second menu...
Les recherches, indépendamment des unes des autres fonctionnent bien. Exemple ci-dessous avec "Saisons" et "Thèmes" :
<div class="formulaire_spip sejours">
<BOUCLE_sejours_recherche (SEJOURS) {0,1}>
#SET{par_saison,#LISTER_CHOIX**{saisons}}
#SET{par_theme,#LISTER_CHOIX**{theme}}
<form action="[(#ENV{action})]" method="GET" class='bouton_action_post ajax'>
[(#ENV{action}|form_hidden)]
<select name="saisons" onchange="submit()">
<option value=""><:sejours_recherche_saisons:></option>
<BOUCLE_par_saison(DATA){source table, #GET{par_saison}}>
[<option value="#CLE" >[(#VALEUR)]</option>]
</BOUCLE_par_saison>
</select>
<select name="themes" onchange="submit()">
<option value=""><:sejours_recherche_themes:></option>
<BOUCLE_par_theme(DATA){source table, #GET{par_theme}}>
[<option value="#CLE" >[(#VALEUR)]</option>]
</BOUCLE_par_theme>
</select>
</form>
</BOUCLE_sejours_recherche>
</div>
En m’inspirant de ce post (https://forum.spip.net/fr_237784.html), je met le premier menu déroulant sous condition :
- <BOUCLE_test_theme(CONDITION){si #ENV{themes}}>
suivi du premier menu avec un critère supplémentaire dans la boucle :
- <BOUCLE_par_saison_si_theme(DATA){source table, #GET{par_saison}} {themes=#ENV{themes}}>
puis
- <BOUCLE_test_saison(CONDITION){si #ENV{saisons}}>
suivi du second menu déroulant avec aussi un critère
- <BOUCLE_par_theme_si_saison(DATA){source table, #GET{par_theme}} {saisons=#ENV{saisons}}>
Je résume ici mais tout cela fonctionne bien avec 2 menus successifs.
Mais, avec 3 étapes (ou plus), cette solution me semble impossible à mettre en place...
Qu’en pensez-vous ? Voyez-vous une solution alternative ?