7
Indiquez l’intérêt que vous portez à cette question
0

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 ?