Recherche multi-critère par mots-clés

Cette contribution a 3 objectifs :

Le premier est de proposer une recherche multi-critère par mots-clés sur les articles d’un site spip.

Le second est de permettre de placer dans n’importe quelle page de rubrique d’un site spip une recherche multicritère avec les groupes de mots-clés que l’on veut.

Le troisième est de pouvoir créer une page indépendante du site spip, c’est-à-dire une page de recherche multicritère qui n’est liée à aucune rubrique particulière (ca peut être dans un squelette article par exemple).

Exemple :
Dans une rubrique nommée emploi, on peut avoir une recherche avec 3 groupes de mots-clés :

-  offres d’emploi
-  formation
-  offres de stages

On peut aussi avoir une page (que l’on nomme formulairemot.php3 et qui va avec formulairemot.html) qui n’est associée à aucune rubrique, regarder l’image :

Bien évidemment la recherche se fait sur les mots clés du groupe et non sur le groupe pour faire une recherche sur le groupe il faut sélectionner tous les mots clés du groupe.

Lien de démo

http://paul.1formatik.com/rubrique.php3?id_rubrique=1

Installation

Vous trouverez ci-joint 5 fichiers :

AddGroupmotDsRub.php
(permet d’ajouter un mot ou plusieurs groupes de mots-clés aux rubriques de votre site, il permet aussi d’effacer un ou plusieurs groupe de mots-clés attachés à une rubrique.)

requete.php
Crée la table spip_rubriques_groupes dans mysql automatiquement, ce fichier s’autodétruit une fois la table créée.

inc-search.php
(c’est le formulaire de recherche à inclure dans vos squelettes)

searchresult.php3 et searchresult.html
(C’est la page de resultat, on peut présenter les résultats soit par Rubrique soit par mots-clés.)

1e étape :

Placer dans votre répertoire ecrire les fichiers :
requete.php
AddGroupmotDsRub.php

Placer dans votre site SPIP à la racine, les 3 fichiers :
inc-search.php
searchresult.php3
searchresult.html

2e étape :

Il suffit de faire un include dans votre squelette rubrique, là où vous souhaitez voir apparaître le formulaire de recherche multicritères.
Ajouter le code suivant :

<?php
	include ("inc-search.php");
?>

3e étape :

Créer la table mysql : spip_rubriques_groupes

Pour cela, aller à cette adresse :
http://www.monsiteweb.fr/ecrire/requete.php

La table est alors créée et vous êtes redirigé vers la page AddGroupmotDsRub.php, qui vous permet de choisir les groupes de mots-clés à associer à telle ou telle rubrique. Attention, vous devez vous être connecté à l’espace privé pour pouvoir faire les modifications.

Si la table n’a pas pu être créée automatiquement, exécuter cette requête à l’aide de phpmyadmin sur mysql :

CREATE TABLE spip_rubriques_groupes (
id_groupe bigint(21) NOT NULL default ’0’,
id_rubrique bigint(21) NOT NULL default ’0’,
KEY id_groupe (id_groupe,id_rubrique)
) TYPE=MyISAM ;

Allez ensuite à l’adresse : http://www.monsiteweb.fr/ecrire/AddGroupmotDsRub.php à l’aide de votre navigateur web et selectionnez les groupes de mots-clés que vous souhaitez attacher à une rubrique.

Vous retrouverez dans le menu déroulant des rubriques le champs multisearch, c’est en fait la rubrique 0 qui n’est attachée à aucune rubrique.

Attention : il est impératif, pour voir fonctionner cette contrib, d’avoir créer au préalable des mots-clés dans l’interface privée et d’associer certains de ces mots-clés ou tous à des articles

Et pour finir, allez dans la rubrique où vous avez décidez de proposer une recherche multicritères et testez.

En option

Vous pouvez avoir besoin d’utiliser un formulaire avec une recherche multicritère ailleurs que dans une rubrique, il faut alors :

-  Ajouter un champs à spip_groupes_mots, exécuter alors la requête suivante dans phpmyadmin ou équivalent :

ALTER TABLE spip_groupes_mots ADD is_multisearch TINYINT DEFAULT ’0’ NOT NULL ;

-  Ajouter le code suivant dans le squelette qui n’est lié à aucune rubrique particulière (ca peut être dans un squelette article par exemple).

<?php
	$id_rubrique=0;
	include ("inc-search.php");
?>

Cette contribution a totalement été revue, elle a été testée sur SPIP 1.7, 1.7.1, 1.7.2 et 1.8b2.

Elle utilise maintenant les fichiers de connection de SPIP, elle est donc secure. Autres avancées, on ne modifie plus du tout le noyau de SPIP et la table supplémentaire est créée automatiquement.

Cette contribution a été testé avec les navigateurs suivants :
-  Firefox, safari, mozilla, IE sous mac os x 10.3.6 (merci à Karim Belkacem et Yorghos)
et Firefox, IE sous windows XP et 2000.

Je mets le zip ici :

Recherche multi-critère par mots-clés

En attente de commentaires...

Discussion

35 discussions

  • 17

    Pas besoin de plugin pour une recherche multi-critères avec mots clés (suite du message de Jujubre).

    1) Le formulaire présentant les mots clés, par groupe de mots clés avec checkbox :

    <form action="#URL_SITE_SPIP/spip.php?page=recherche" method="post">
         <input type="hidden" name="page" value="recherche" />
         <BOUCLE_groupes(GROUPES_MOTS)>
         <ul>
         <li><h3>#TITRE</h3>
         	<ul>
    		 <BOUCLE_mots(MOTS){id_groupe}><li>
    		 <label>#TITRE</label><input type="checkbox" name="motcle[]" value="#ID_MOT" /></li>
    		 </BOUCLE_mots>
    		 </ul>
    	</li>
    	</ul>
         </BOUCLE_groupes>
         <br /><br />
         <input type="submit" value="Lancer la recherche" />
    </form>

    2) les boucles affichant les articles correspondant (ici les résultats s’affichent dans la page recherche.html).

    		<B_motcleM>
    		<div class="cartouche">
    			<h1><:resultats_recherche:></h1>
    		<BOUCLE_motcleM(POUR) {tableau #ENV**{motcle}}>	
    			<p class="soustitre">«&nbsp;<BOUCLE_multi(MOTS) {id_mot=#VALEUR}>#TYPE : #TITRE</BOUCLE_multi>&nbsp;»</p>
    		</BOUCLE_motcleM>
    		</div>
    		</B_motcleM>
    
    		
    		[(#REM) Multi-criteres : Articles trouves ]
    		<BOUCLE_motcle(POUR) {tableau #ENV**{motcle}}>
    			<BOUCLE_doublons(ARTICLES) {!id_mot=#VALEUR} {doublons} />
    		</BOUCLE_motcle>
    		<B_resultat>
                <h2>#GRAND_TOTAL <:articles:></h2>
    			<div class="menu articles">
    			<ul>
    			<BOUCLE_resultat(ARTICLES){doublons}>
    				<li>
    					[(#LOGO_ARTICLE|#URL_ARTICLE|image_reduire{150,100})]
    					<h3><a href="#URL_ARTICLE">#TITRE</a></h3>
    				</li>
    			</BOUCLE_resultat>
    			</ul>
    			</div>
    		</B_resultat>
    		</B_motcle>

    Cette adaptation affiche en entête les mots clés cochés lors de la recherche, puis le nombre d’articles trouvés et enfin les articles cliqueables.

    Merci Jujubre pour avoir éclairé ma lanterne ;-)

    françois

    • Bonjour prad
      est ce que ton code marche avec spip 2.0.9, quand j’utilise le formulaire sur ma page sommaire et le code des résultats dans un fichier recherche.html, au lancement d’une recherche voilà ce qu’on a comme message d’erreur : Parse error : parse error, expecting `’(’’ in C :\Program Files\EasyPHP5.3.0\www\immocoteouest\ecrire\public\composer.php(73) : eval()’d code on line 55

    • Bonjour,

      j’ai tout basculé en 2.0.10, mais le soucis ne doit pas venir de SPIP. Quand tu as copié le code, certains caractères n’ont pas du supporter le voyage ;-)

      Vérifie que les " et autres caractères sont biens corrects.

      françois

    • Bonjour,

      Ce code est exactement ce dont j’ai besoin, mais ça ne donne pas le résultat escompté.

      Lorsque je choisis un seul mot-clé, j’ai la liste des articles qui ont ce mot-clé, mais lorsque j’en clique 2 et plus, je n’ai plus de résultat !

      Des idées sur ce qui cause le bug ?

      Mon site est en SPIP 2.1.2, j’ai SPIP bonux d’installer

    • Frédéri

      Bonjour,

      Je cherche à faire un recherche multi-critère sur des mots-clefs avec le comportement suivant :
      -  l’utilisateur sélectionne les mots-clefs voulus
      -  la recherche est faite avec un OU (il suffit que l’un des mots-clefs soit attribué pour que l’article sorte)
      -  les résultats sont présentés en fonction du nombre de mots-clefs qui correspondent à l’article

      Est-il possible à partir de ce plugin ou du moreau de code fourni ci-dessus de faire ce genre de recherche ?

      Merci beaucoup

    • Bonjour,

      J’aimerais bien pouvoir faire la même chose. J’ai un peu contourné le problème avec des groupes de mots-clés qui utilisent des boutons de radios et des groupes de mots-clés qui utilisent des checkbox.

      J’ai fait une recherche avancée sur des offres d’emplois avec menus déroulants. http://www.jqsi.qc.ca/spip.php?rubr... Je vous joins le code, évidemment les menus déroulants ne fonctionneront pas ;) Je vous donne quand même le lien pour les installer sur votre site, car je trouve qu’il fonctionne bien. http://ypslideoutmenus.sourceforge.net/

      Voici le code :

                  <form action='http://www.jqsi.qc.ca/spip.php?rubrique94' method='get'>
                      <input type='hidden' name='page' value='rubrique' />
                      <input type='hidden' name='id_rubrique' value='94' />
                      <input type='text' name='recherche' value="[(#ENV{recherche})]" size="40" style="font-size:10px; margin-left:3px;" />
                      <input type="image" src="#CHEMIN{images/loupe2.gif}" align="top" alt="Loupe" />
                      <small style="margin-left:20px;">Raffiner votre recherche en choisissant parmi les mots-cl&eacute;s suivants:</small>
                      
                      <table cellpadding="0" cellspacing="0" border="0" align="left" id="navigationHorizAvancee">
                      <tr> 
                    		
                          <td class="menuActuatorAvancee" height="30" valign="top">
                            <a href="#" onmouseover="ypSlideOutMenu.showMenu('menu01');" onmouseout="ypSlideOutMenu.hideMenu('menu01')">Organisations [(#ID_AUTEUR|?{'(1)', ''})] &nabla;</a>
                            <div> 
                              <div id="menu01Container">  
                                 <div id="menu01Content" class="menuAvancee">
                                    <div id="navigationHoriz01"> 
                                      <ul>
                                          <BOUCLE_articles_org(ARTICLES){id_rubrique=94}>
                                          	<BOUCLE_auteurs_org(AUTEURS){id_article}{unique}>
                                              	<li><input type="radio" name="id_auteur" value="#ID_AUTEUR"  /><label>[(#NOM)]</label></li>
                                      		</BOUCLE_auteurs_org>
                                        </BOUCLE_articles_org>
                                      </ul>
                                   </div>
                                 </div>
                              </div>
                            </div>    
                          </td>
                                      
                          <BOUCLE_groupe_types(GROUPES_MOTS){id_groupe=8}>
                          <?php $total=0;?>
                          <BOUCLE_mots_types_total(MOTS){id_groupe}{par titre}><BOUCLE_motcle_types_total(POUR) {tableau #ENV**{mots}}><?php if (#VALEUR==#ID_MOT) { $total++; };?></BOUCLE_motcle_types_total></BOUCLE_mots_types_total>
                          
                          <td class="menuActuatorAvancee" height="30" valign="top">
                            <a href="#" onmouseover="ypSlideOutMenu.showMenu('menu02');" onmouseout="ypSlideOutMenu.hideMenu('menu02')">[(#TITRE|supprimer_numero)] <?php if ($total >= 1) { echo '('; echo $total; echo ')';}; ?>  &nabla;</a>
                            <div> 
                             <div id="menu02Container"> 
                               <div id="menu02Content" class="menuAvancee">
                                    <div id="navigationHoriz02">                     
                                      <ul>
                                          <BOUCLE_mots_types(MOTS){id_groupe}{par titre}{unique}>
                                             <li><input type="checkbox" name="mots[]" value="#ID_MOT" <BOUCLE_motcle_types(POUR) {tableau #ENV**{mots}}>[(#VALEUR|=={#ID_MOT}|?{'checked="checked"', ''})]</BOUCLE_motcle_types> /><label>[(#TITRE|supprimer_numero)]</label></li>
                                          </BOUCLE_mots_types>
                                      </ul>
                                  </div>
                              </div>
                            </div>
                          </div>     
                          </td>
                          </BOUCLE_groupe_types>
              
                          
                          <BOUCLE_groupe_region(GROUPES_MOTS){id_groupe=9}>
                          <?php $total=0;?>
                          <BOUCLE_mots_region_total(MOTS){id_groupe}{par titre}><BOUCLE_motcle_region_total(POUR) {tableau #ENV**{mots}}><?php if (#VALEUR==#ID_MOT) { $total++; };?></BOUCLE_motcle_region_total></BOUCLE_mots_region_total>
                          
                          <td class="menuActuatorAvancee" height="30" valign="top">
                            <a href="#" onmouseover="ypSlideOutMenu.showMenu('menu03');" onmouseout="ypSlideOutMenu.hideMenu('menu03')"> [(#TITRE|supprimer_numero)] <?php if ($total >= 1) { echo '('; echo $total; echo ')';}; ?>  &nabla;</a>
                            <div> 
                             <div id="menu03Container"> 
                               <div id="menu03Content" class="menuAvancee">
                                    <div id="navigationHoriz03"> 
                                      
                                      <BOUCLE_mots_region(MOTS){id_groupe}{par titre}{unique}{doublons}>
                                      <ul>
                                        <li><input type="radio" name="mots[]" value="#ID_MOT" <BOUCLE_motcle_region(POUR) {tableau #ENV**{mots}}>[(#VALEUR|=={#ID_MOT}|?{'checked="checked"', ''})]</BOUCLE_motcle_region> /><label>[(#TITRE|supprimer_numero)]</label></li>
                                      </ul>
                                      </BOUCLE_mots_region>
                                  </div>
                              </div>
                            </div>
                          </div>    
                          </td>
                          </BOUCLE_groupe_region>
                          
              
                        <td height="30" valign="top"><a rel="tipsy" href="#" title="Lancer la recherche par mots-cl&eacute;s"><input  type="image" src="#CHEMIN{images/loupe2.gif}" align="middle" alt="Loupe" /></a>&nbsp;&nbsp;</td>
                        <td height="30" valign="middle"><small><a rel="tipsy" href="#URL_RUBRIQUE{94}" title="Effacer la recherche">Effacer la recherche/Afficher tout</a></small></td>
              
                  </tr>  
                  </table>    
                  </form>   
              </div> 
              
              <B_articles>
                  <br /> <br /> <br /><h1>Offre[(#GRAND_TOTAL|=={1}|?{'','s'})] <small>([#GRAND_TOTAL (#GRAND_TOTAL|=={1}|?{'r&eacute;sultat','r&eacute;sultats'})])</small></h1>
      <div class="menu articles surlignable">
      				#ANCRE_PAGINATION
                      <ul>
                      <BOUCLE_articles(ARTICLES){id_rubrique=94}{recherche?}{id_auteur?}{par points, date}{age<date}{mots?}{pagination 40}>   
                          <li>
                          	<div>[<small class="agenda">Date limite: (#DATE|affdate)</small>][ | <span class="activites_titre"><a href="#URL_ARTICLE">(#TITRE|supprimer_numero)</a></span>][ | <small>(#MODELE{lesauteursemplois})</small>]                                            
                              <B_type> | <BOUCLE_groupe_type(GROUPES_MOTS){id_groupe=8}>[<small>(#TITRE|replace{Emplois - ,''}): </small>]</BOUCLE_groupe_type><BOUCLE_type(MOTS){id_groupe=8}{id_article}{",&nbsp;"}><small><a href="#URL_RUBRIQUE{94}&id_mot=#ID_MOT&mots[]=#ID_MOT">[(#TITRE)]</a></small></BOUCLE_type>
                              <B_lieu> | <BOUCLE_groupe_lieu(GROUPES_MOTS){id_groupe=9}>[<small>(#TITRE|replace{Emplois - ,''}): </small>]</BOUCLE_groupe_lieu><BOUCLE_lieu(MOTS){id_groupe=9}{id_article}{",&nbsp;"}><small><a href="#URL_RUBRIQUE{94}&id_mot=#ID_MOT&mots[]=#ID_MOT">[(#TITRE)]</a></small></BOUCLE_lieu>
                              </div>
                          </li>
                      </BOUCLE_articles> 
                      </ul> 
                      [<p class="pagination">(#PAGINATION{page})</p>]
                  </div>
                  <br class="nettoyeur" />
      			</B_articles>
                      
                      <br /> <br /> <br />
                      <h1>Offres <small>(aucun résultat)</small></h1>
                      
                      <div class="menu articles">
      					<ul>
                              <li>
                                  [<p>Aucun résultats de recherche pour &laquo; <strong>(#RECHERCHE)</strong> &raquo;</p>]
                                  
                                  <BOUCLE_motscles(POUR) {tableau #ENV**{mots}}>
                                      <p>Aucun résultats de recherche pour 
                                      <BOUCLE_motcle_mot(MOTS) {id_mot=#VALEUR} {",&nbsp;"}>
                                           &laquo; <strong>#TYPE: #TITRE</strong> &raquo;
                                      </BOUCLE_motcle_mot>
                                      </p>
                                  </BOUCLE_motscles>
                                  
                                          
                                  <BOUCLE_auteur_fin(AUTEURS){id_auteur}>[<p>Aucun résultats de recherche pour <a href="#URL_AUTEUR">(#NOM)</a></p>]</BOUCLE_auteur_fin>
                                                                    
                                  <h3>Pour augmenter vos résultats de recherche, tentez une recherche moins précise.</h3>
                          
                              </li>
                          </ul>
                       </div>
                       <br class="nettoyeur" />
                   		
                          [(#REM) Articles de la rubrique ]
                          <B_articles_tous>
                          <div class="menu articles">
                              #ANCRE_PAGINATION
                              <h2>Toutes les offres d'emploi actuelles</h2>
                              <ul>
                                  <BOUCLE_articles_tous(ARTICLES) {id_rubrique} {par date}{age<date}{pagination}>
                                  <li>
                                      <div>[<small class="agenda">Date limite: (#DATE|affdate)</small>][ | <span class="activites_titre"><a href="#URL_ARTICLE">(#TITRE|supprimer_numero)</a></span>][ | <small>(#MODELE{lesauteursemplois})</small>]                                            
                              <B_type_tous> | <BOUCLE_groupe_type_tous(GROUPES_MOTS){id_groupe=8}>[<small>(#TITRE|replace{Emplois - ,''}): </small>]</BOUCLE_groupe_type_tous><BOUCLE_type_tous(MOTS){id_groupe=8}{id_article}{",&nbsp;"}><small><a href="#URL_RUBRIQUE{94}&id_mot=#ID_MOT&mots[]=#ID_MOT">[(#TITRE)]</a></small></BOUCLE_type_tous>
                              <B_lieu_tous> | <BOUCLE_groupe_lieu_tous(GROUPES_MOTS){id_groupe=9}>[<small>(#TITRE|replace{Emplois - ,''}): </small>]</BOUCLE_groupe_lieu_tous><BOUCLE_lieu_tous(MOTS){id_groupe=9}{id_article}{",&nbsp;"}><small><a href="#URL_RUBRIQUE{94}&id_mot=#ID_MOT&mots[]=#ID_MOT">[(#TITRE)]</a></small></BOUCLE_lieu_tous>
                              </div>
                                  </li>
                                  </BOUCLE_articles_tous>
                              </ul>
                              [<p class="pagination">(#PAGINATION)</p>]
                          </div>
                          </B_articles_tous> 
                          
                      <//B_articles>
                      
                      
                    
    • Frédéri

      Merci pour la réponse mais en fait, le code fonctionne avec des ET logiques plutôt que des OU (il faut que l’article correspondent à tous les mots-clefs pour être sélectionné)

      Sinon, j’ai mis les mains dans le cambouis et voila ce que ça donne (et qui marche) : ce morceau de code propose un formulaire avec des boites à cocher et un bouton de validation. Une fois le formulaire envoyé, les résultats s’affichent sur la même page.
      On commence par rappeler les critères de sélection puis à fournir la liste des articles qui ont été sélectionnés (sachant qu’il suffit qu’un mot-clef soit attribué à l’article pour qu’il soit sélectionné) et on donne le nombre de mots clefs associés à l’article parmi tous les mots clefs sélectionnés !

      La prochaine étape serait de trier selon le nombre de mots-clef correspondant.....

      [(#REM) Formulaire qui lsite les mots-clé sélectionnables, ici ceux du groupe 6]
        <form method="post">                                                  
          h2>Votre frigidaire</h2>     	 			                                                                       
          <ul>		                                                                              
            <BOUCLE_mots(MOTS){id_groupe=6}>                                                                                        
              <li><input type="checkbox" name="motcle[]" value="#ID_MOT"> #TITRE<label>#TITRE</label></li>		                                                                              
            </BOUCLE_mots>		                                                                        
          </ul>                                                                            
          <p>  <input type="submit" name="submit"></p>                                                                                                     
        </form>                                                                   
      
      [(#REM) On commence par rappeler les mots clefs sélectionnés par l'utilisateur]
        <B_motcleM>
          Votre recherche porte sur les ingr&eacute;dients suivants :                            
          <BOUCLE_motcleM(POUR) {tableau #ENV**{motcle}}>	 			                         
            <li>&nbsp;<BOUCLE_multi(MOTS) {id_mot=#VALEUR}>#TYPE : #TITRE</BOUCLE_multi>&nbsp;</li>		                       
          </BOUCLE_motcleM>                         
        </B_motcleM>
      
      [(#REM) Puis on construit le tableau qui contient tous les articles qui correspondent à au moins un mot clef sélectionné]
        #SET{art_select,#ARRAY}                     
                              
        <B_select>                                                    
          <BOUCLE_select(POUR) {tableau #ENV**{motcle}} >                                                                                   
            <BOUCLE_ARTICLESSELECT(ARTICLES) {id_mot=#VALEUR} >                                    
              #SET{art_select, #GET{art_select}|push{ #ID_ARTICLE }}                                                                                                             
            </BOUCLE_ARTICLESSELECT>                                                     
          </BOUCLE_select>                                                              
        </B_select>   
        
                                                          
      [(#REM) On finit par lister les articles qui apparaissent au mois une fois dasn le tableau (boucle BOUCLE_affichage) et le nombre de mots-clefs correspondant (boucle BOUCLE_ingr) ]
      #SET{un, 1}                                         
        <B_affichage>
          Avec ces ingrédients vous avez la base pour les recettes suivantes :                        
          <BOUCLE_affichage(ARTICLES) {id_article IN #GET{art_select}}>                                             
            #SET{compteur_sup,0}
            #SET{article,#ID_ARTICLE}                                                
            <BOUCLE_ingr(POUR) {tableau #GET{art_select}} >                      
              #SET{valeur,#VALEUR}                       
              #SET{dif, #GET{valeur}|moins{#GET{article}}}                       
              [(#GET{dif}|=={0}|oui) #SET{compteur_sup, #GET{compteur_sup}|plus{#GET{un}}}]                                                
            </BOUCLE_ingr>                                               
            <B_nbtotal><BOUCLE_nbtotal(MOTS) {id_article=#ID_ARTICLE} {id_groupe=6}> </BOUCLE_nbtotal>                        
            
            <li> #TITRE ( #GET{compteur_sup} [(#GET{compteur_sup}|>{1}|?{' ingr&eacute;dients',' ingr&eacute;dient'})]  sur les #_nbtotal:TOTAL_BOUCLE [(#_nbtotal:TOTAL_BOUCLE|>{1}|?{' ingr&eacute;dients n&eacute;cessaires',' ingr&eacute;dient n&eacute;cessaire'})] )</B_nbtotal></li>                                               
          </BOUCLE_affichage>
        </B_affichage>
    • J’ai travaillé sur l’affichage des réponses (tri selon le nombre de mots-clef correspondant) à partir du code de Frédéri .

      Voici mon formulaire :

      <form name="FormActivites" id="FormActivites" action="#URL_SITE_SPIP/spip.php?rubrique15" method="get">
      	
      <img id="petitferforge" src="#CHEMIN{images/swirlt-155-38.png}" alt="folder" height="38" width="155" />	
      <div id="titreFormActivites">Activités - Services</div>
      <div id="corpsFormActivites">
      
      	    <input type="hidden" name="page" value="rubrique" />
      	    <input type="hidden" name="id_rubrique" value="15" />
      
      	<fieldset id="typeBesoins"><legend></legend> <!-- Titre du fieldset -->
      	<p>
      	    <BOUCLE_groupes_menu_mots2(GROUPES_MOTS){id_groupe=2}>
      		<label for="Besoins" title="Vous pouvez sélectionner un type de besoins" >Domaine :</label>
      		<select name="motcle[]" size="1" id="Besoins" tabindex="10" onfocus="this.className='jecherche';" onblur="this.className='jaichoisi';">
      	<!-- <optgroup label="choisir une catégorie"> --><!-- label, c'est le nom de l'optgroup, ici ; donc c'est différent de la balise label for -->
      			<option VALUE="vide" selected="selected">vide</option>
      			<BOUCLE_menu_mots2(MOTS) {id_groupe=2}{par titre}>
      			<option VALUE="#ID_MOT">[(#TITRE|supprimer_numero)]</option>
      			</BOUCLE_menu_mots2>
      	<!--</optgroup>-->
      		</select>
      	    </BOUCLE_groupes_menu_mots2>		
      	</p>
      	</fieldset>
      
      
      	<fieldset id="typeCommuneActivites"><legend></legend> <!-- Titre du fieldset -->
      	<p>
      	    <BOUCLE_groupes_menu_mots3(GROUPES_MOTS){id_groupe=3}>
      		<label for="Commune" title="Vous pouvez sélectionner une commune">Commune :</label>
      		<select name="motcle[]" size="1" id="Commune" tabindex="20" onfocus="this.className='jecherche';" onblur="this.className='jaichoisi';">
      	<!--<optgroup label="choisir un lieu"> --><!-- label, c'est le nom de l'optgroup, ici ; donc c'est différent de la balise label for -->	
      			<option VALUE="vide" selected="selected">vide</option>
      			<BOUCLE_menu_mots3(MOTS) {id_groupe=3} {par titre}>
      			<option VALUE="#ID_MOT">[(#TITRE|supprimer_numero)]</option>
      			</BOUCLE_menu_mots3>
      	<!--</optgroup> -->
      		</select>
      	    </BOUCLE_groupes_menu_mots3>		
      	</p>
      	</fieldset>
      
      
      	<fieldset id="typeAcces"><legend></legend> <!-- Titre du fieldset -->
      	<p>
      	    <BOUCLE_groupes_menu_mots6(GROUPES_MOTS){id_groupe=6}>
      		<label for="Besoins" title="Vous pouvez sélectionner un type d'accès" >Accès :</label>
      		<select name="motcle[]" size="1" id="Besoins" tabindex="30" onfocus="this.className='jecherche';" onblur="this.className='jaichoisi';">
      	<!-- <optgroup label="choisir une catégorie"> --><!-- label, c'est le nom de l'optgroup, ici ; donc c'est différent de la balise label for -->
      			<option VALUE="vide" selected="selected">vide</option>
      			<BOUCLE_menu_mots6(MOTS) {id_groupe=6}{par titre}>
      			<option VALUE="#ID_MOT">[(#TITRE|supprimer_numero)]</option>
      			</BOUCLE_menu_mots6>
      	<!--</optgroup>-->
      		</select>
      	    </BOUCLE_groupes_menu_mots6>		
      	</p>
      	</fieldset>
      
      
      	<fieldset id="typeCout"><legend></legend> <!-- Titre du fieldset -->
      	<p>
      	    <BOUCLE_groupes_menu_mots1(GROUPES_MOTS){id_groupe=1}>
      		<label for="Besoins" title="Vous pouvez sélectionner un type de coût" >Coût :</label>
      		<select name="motcle[]" size="1" id="Besoins" tabindex="40" onfocus="this.className='jecherche';" onblur="this.className='jaichoisi';">
      	<!-- <optgroup label="choisir une catégorie"> --><!-- label, c'est le nom de l'optgroup, ici ; donc c'est différent de la balise label for -->
      			<option VALUE="vide" selected="selected">vide</option>
      			<BOUCLE_menu_mots1(MOTS) {id_groupe=1}{par titre}>
      			<option VALUE="#ID_MOT">[(#TITRE|supprimer_numero)]</option>
      			</BOUCLE_menu_mots1>
      	<!--</optgroup>-->
      		</select>
      	    </BOUCLE_groupes_menu_mots1>		
      	</p>
      	</fieldset>
      
          <input type="submit" id="valid" value="" title="Cliquez sur ce bouton pour lancer votre recherche" tabindex="50"/>
      
      </div>
      <div id="piedFormActivites"></div>
      </form>
      <div style="display: block; clear: left; ">&nbsp;</div>
    • Et voici le traitement et l’affichage des réponses :

      [(#REM)*********************** Début de la zone d 'affichage des articles trouves dans la recherche multicritères.*********************]
      
      <div id="resultat_recherche">
      
      	<div id="nouvelle_recherche">
      	<a href="#URL_RUBRIQUE" title="Nouvelle Recherche">Nouvelle recherche</a>
      	</div>
      
      		[(#REM) On rappelle les mots clés sélectionnés par l'utilisateur. ]
      		[(#REM) Ca ne s'affiche pas au chargement de la page. Ca ne s'affiche que si la boucle motcleM est appelée, càd si on a cliqué sur le submit du formulaire.]
      		[(#REM) Si on n'a rien choisi dans les selects et qu'on clique submit, l'affichage renvoie "vous avez choisi d'utiliser 0 mot clé" et "0 article trouvé".]
      
      		#SET{ajouteun,1}
      		#SET{addition,0}
      
      		<B_motcleM>
      		<div class="cartouche">
      		<h1><:resultats_recherche:></h1>
      		<p>&nbsp;</p>
      		<p><strong>Dans votre recherche, vous avez choisi d'utiliser [(#GET{addition})]  [(#GET{addition}|=={0}|?{'mot clé.',[(#GET{addition}|>{1}|?{'mots clés :','mot clé :'})]})] </strong></p>
      		<ol>
      		<BOUCLE_motcleM(POUR) {tableau #ENV**{motcle}}>
      			<p class="soustitre">
      			<BOUCLE_multi(MOTS) {id_mot=#VALEUR}>
      			<li>[(#TYPE|supprimer_numero)] : <em><a href="#URL_MOT">[(#TITRE|supprimer_numero)][(#LOGO_MOT|image_reduire{20,20})]</a></em></li>
      			#SET{addition, #GET{addition}|plus{#GET{ajouteun}}}
      			</BOUCLE_multi>
      			</p>				
      		</BOUCLE_motcleM>
      		</ol>
      		</div>
      
      
      
      				[(#REM) Puis on construit le tableau qui contient tous les articles qui correspondent à au moins 1 mot clé sélectionné]
      
      				#SET{art_select,#ARRAY}
      				<B_select>
      	 	   		<BOUCLE_select(POUR) {tableau #ENV**{motcle}} >
      	      			<BOUCLE_ARTICLESSELECT(ARTICLES) {id_secteur=38} {id_mot=#VALEUR} >
       		       		#SET{art_select, #GET{art_select}|push{ #ID_ARTICLE }}
          	   			</BOUCLE_ARTICLESSELECT>
          			</BOUCLE_select>
        				</B_select>
        				<//B_select>
       				[(#REM) Pour afficher le résultat du tableau, ajouter ici  [(#GET{art_select}|foreach)]   ]
      
      
      
      				[(#REM) On finit par lister les articles qui apparaissent au moins une fois dans le tableau art_select (voir boucle BOUCLE_rangement) et le nombre de mots-clefs correspondant (voir boucle BOUCLE_ingr) ]
      
      				#SET{un, 1}
      
      				#SET{compteur_1, #ARRAY}
      				#SET{compteur_2, #ARRAY}
      				#SET{compteur_3, #ARRAY}
      				#SET{compteur_4, #ARRAY}
      
      				<B_rangement>
      
      				[(#REM) Chaque article nouveau qui passe dans la boucle BOUCLE_rangement vient du tableau art_select (càd que c'est un article relié à AU MOINS un mot clé parmi les mots clé sélectionnés).]
      				<BOUCLE_rangement(ARTICLES) {id_article IN #GET{art_select}}>
      
      				[(#REM) Le compteur de mots clés sélectionnés reliés à l'article est une variable dont la valeur démarre à zéro pour chaque article nouveau qui passe dans la boucle BOUCLE_rangement.]
      				#SET{compteur_sup,0}
      
      		    	[(#REM) Pour chaque article qui passe, on récupère l'id de l'article dans la variable article ci-dessous.]
      		    	#SET{article,#ID_ARTICLE}
      
      						[(#REM) on regarde dans le tableau art_select si le même article apparaît plusieurs fois.]
      						[(#REM) Explication : un même article peut appraître plusieurs fois, parce que art_select liste les articles qui on AU MOINS un mot clé parmi les mots clé sélectionnés ;]
      						[(#REM) donc si un article a 4 mots clés (A, B, C et D), il apparaît 1 fois pour A, 1 fois pour A+B, 1 fois pour A+B+C, 1 fois pour A+B+C+D ; donc ça fait 4 fois.]
      	
      						<BOUCLE_ingr(POUR) {tableau #GET{art_select}}>
      
      							[(#REM) #VALEUR correspond à un #ID_ARTICLE dans le tableau art_select (on peut l'afficher avec #CLE=>#VALEUR) .]
      							[(#REM) On récupère l'id de l'article dans la variable valeur.]
      			        		#SET{valeur,#VALEUR}
      
      							[(#REM) Chaque fois que la soustraction des 2 id d'articles est égale à zéro, ça veut dire que les id étaient identiques.]
      				
      							[(#REM) On fait la soustraction.]
      			        		#SET{dif, #GET{valeur}|moins{#GET{article}}}
      		        
      		   		     		[(#REM) Si le résiultat = 0, alors on incrémente la variable compteur_sup de 1 grâce à son addition avec la variable un. ]
      			        		[(#GET{dif}|=={0}|oui) #SET{compteur_sup, #GET{compteur_sup}|plus{#GET{un}}}]
      
      							[(#REM) A la fin (au sortir de BOUCLE_ingr), compteur_sup a une valeur maximale, qui correspond au nombre maximum de mots clés sélectionnés auxquels l'article qui passe dans BOUCLE_rangement est relié.]
      
      		 		    	   	[(#REM) On peut aussi afficher ici #GET{compteur_sup} pour vérifier combien il vaut.]
      		        		
      			     	 	</BOUCLE_ingr>
      			
      	
      				[(#REM) Ci-dessous, j'ai une ligne par compteur numéroté.]
      				[(#REM) Ca va me permettre de classer l'article en fonction du nombre maximum de mots clés sélectionnés auxquels il est relié.]
      				[(#REM) Chaque compteur numéroté est un tableau ARRAY vide au départ.]
      				[(#REM) La boucle BOUCLE_ingr m'a donné le nombre maximal de mots clé reliés à l'article en train de passer dans la boucle BOUCLE_rangement.]
      				[(#REM) Ce nombre, c'est la valeur de compteur_sup. ]
      				[(#REM) Si la valeur de compteur_sup = 4, je colle le id de l'article dans le tableau compteur_4. Si sa valeur = 3, je colle le id de l'article dans le tableau compteur_3. Etc. ]
      
      				[(#GET{compteur_sup}|=={4}|oui) #SET{compteur_4, #GET{compteur_4}|push{#ID_ARTICLE}}]
      				[(#GET{compteur_sup}|=={3}|oui) #SET{compteur_3, #GET{compteur_3}|push{#ID_ARTICLE}}]
      				[(#GET{compteur_sup}|=={2}|oui) #SET{compteur_2, #GET{compteur_2}|push{#ID_ARTICLE}}]
      				[(#GET{compteur_sup}|=={1}|oui) #SET{compteur_1, #GET{compteur_1}|push{#ID_ARTICLE}}]	
      
      
      				[(#REM) Mon formulaire contient 4 select, chacun pour un groupe de mots, les options des select c'est pour les mots du groupe).]
      				[(#REM) Mes select ne sont pas multiples, donc un seul mot de chaque groupe sera sélectionné. Cela me fait 4 mots clés sélectionnables au max.]
      				[(#REM) C'est pour ça qu'ici j'ai fait 4 compteurs numérotés.]
      				[(#REM) Si les selects étaient multiples (plusieurs mots sélectionnables dans un select-groupe), ou si on avait des cases à cocher, on pourrait s'amuser à proposer des centaines de mots clés sélectionnables.]
      				[(#REM) Donc il faudrait remplacer 4 par le nombre maxi de mots clés sélectionnables (ex: 150), puis créer des compteurs numérotés dégressifs (149,148, etc.).]
      				[(#REM) Mais intellectuelmlement, l'utilisateur ne peut suivre que si on lui propose que peu de critères-groupes de choix. ]
      				[(#REM) Avec des selects multiples, ou des cases à cocher, il faudrait donc, si les mots clés sont nombreux, ranger ces mots clés dans des critères-groupes de choix au sein desquels un seul choix n'est possible.]
      				[(#REM) L'important, c'est de s'organiser pour ne pas avoir trop de mots clés à gérer ici.]
      
      				[(#REM) Si je modifie mon formulaire, je dois ajouter (ou enlever des compteurs numérotés ci-dessous. ]		
      	
      				[(#REM) Pour voir le tableau des compteurs numérotés écrire ici : [(#GET{compteur_4}|foreach)]<br /> [(#GET{compteur_1}|foreach)]<br /> [(#GET{compteur_2}|foreach)]<br /> [(#GET{compteur_3}|foreach)]<br />  ]
      
      
      
      
      		
      		
      				</BOUCLE_rangement>
      				</B_rangement>
      				<//B_rangement>
      
      		[(#REM) Code optionnel "après" de la boucle B_motcleM (ne s'affiche que si la boucle B_motcleM contient au moins une réponse).]
      		[(#REM) Ca ne s'affiche pas au chargement de la page. ]
      		[(#REM) Ca ne s'affiche que si la boucle motcleM est appelée (càd si on a cliqué sur le submuit du formulaire).]
      
      
      		[(#REM) On affiche le nombre d'articles trouvés dans la boucle rangement.]
      		<div class="cartouche">
      <hr />
      		<h2>[(#_rangement:GRAND_TOTAL)] [(#_rangement:GRAND_TOTAL|>{1}|?{'articles trouvés :','article trouvé.'})] </h2>
      <hr />
      		</div>
      
      		
      		[(#REM) On affiche les articles trouvés en fonction des mots clés correspondants à ceux sélectionnés par l'utilisateur.]
      		[(#REM) Pour le faire, on va chercher les résultats dans les tableaux compteurs numérotés. On a donc ci-dessous 4 boucles affichage groupe numérotées.]
      		[(#REM) rappel #GET{addition}, c'est le Total des mots clés cochés dans la recherche.]
      		
      
      			[(#REM) --------------- Affichage groupe 4: articles reliés à 4 mots clés. ---------------------]
      			[(#REM) --------------------------------------------------------------------------------------- ]
      
      			<B_affichage_groupe4>
      <div class="">
      			[(#ANCRE_PAGINATION|vide)]
      				<h2><h2>[(#_affichage_groupe4:TOTAL_BOUCLE)] [(#_affichage_groupe4:TOTAL_BOUCLE|>{1}|?{'articles ont','article a'})] une correspondance de 4 mots clés sur [(#GET{addition})] : </h2>
      <p>&nbsp;</p>
      				<ul>
      				<BOUCLE_affichage_groupe4(ARTICLES) {id_article IN #GET{compteur_4}} {par date} {inverse}  {pagination 5}>
      				<li>
      						[(#LOGO_ARTICLE{#URL_ARTICLE}|image_reduire{50,50})]
      	                    <a href="#URL_ARTICLE"><h3>[(#TITRE|supprimer_numero)]</h3></a>
      	                    <small>[(#DATE|affdate_jourcourt)][, <:par_auteur:> (#LESAUTEURS)]</small>
      	            </li>
      
      
      					[(#REM) Ci-dessous, les mots clé sélectionnés qui sont associés à l'article.]
      					[(#REM) Pour que l'utilisateur sache sur la base de quel(s) mot(s) clé(s) cet article peut être intéressant à aller voir.]
      
      					<small>Mots correspondants : </small>
      
      					[(#REM) On reliste les mots clés sélectionnés par l'utilisateur, mais on ne les affiche pas de suite.]
      					<B_motcleM_gr_4>
      					<BOUCLE_motcleM_gr_4(POUR) {tableau #ENV**{motcle}}>
      					
      							[(#REM) Pour les lister, on reprend la même boucle mots qu'au début, mais on lui ajoute le critère {id_article=#ID_ARTICLE} .]
      							<B_MC_selected_article_gr_4>
      							<BOUCLE_MC_selected_article_gr_4(MOTS) {id_mot=#VALEUR} {id_article=#ID_ARTICLE}>
      							<a href="#URL_MOT"><em><small>[(#TITRE|supprimer_numero)] - </small></em></a>
      
      							</BOUCLE_MC_selected_article_gr_4>
      							</B_MC_selected_article_gr_4>					
      				
      					</BOUCLE_motcleM_gr_4>
      					</B_motcleM_gr_4>
      <br />
      <br />
      	
      	            </BOUCLE_affichage_groupe4>
      
      				</ul>
       			[<p class="pagination">(#PAGINATION{page})</p>]
      			<p>~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~</p>
      			</div>
      				</B_affichage_groupe4>
      				[(#REM) <em>Pas d'articles reliés.</em> ]
      				<//B_affichage_groupe4>	
      
      
      
      			[(#REM) --------------- Affichage groupe 3: articles reliés à 3 mots clés. ---------------------]
      			[(#REM) --------------------------------------------------------------------------------------- ]
      
      			<B_affichage_groupe3>
      <div class="">
      			[(#ANCRE_PAGINATION|vide)]
      				<h2>[(#_affichage_groupe3:TOTAL_BOUCLE)] [(#_affichage_groupe3:TOTAL_BOUCLE|>{1}|?{'articles ont','article a'})] une correspondance de 3 mots clés sur [(#GET{addition})] : </h2>
      <p>&nbsp;</p>
      				<ul>
      				<BOUCLE_affichage_groupe3(ARTICLES) {id_article IN #GET{compteur_3}} {par date} {inverse}  {pagination 5}>
      				<li>
      						[(#LOGO_ARTICLE{#URL_ARTICLE}|image_reduire{50,50})]
      	                    <a href="#URL_ARTICLE"><h3>[(#TITRE|supprimer_numero)]</h3></a>
      	                    <small>[(#DATE|affdate_jourcourt)][, <:par_auteur:> (#LESAUTEURS)]</small>
      	            </li>
      
      
      					[(#REM) Ci-dessous, les mots clé sélectionnés qui sont associés à l'article.]
      					[(#REM) Pour que l'utilisateur sache sur la base de quel(s) mot(s) clé(s) cet article peut être intéressant à aller voir.]
      
      					<small>Mots correspondants : </small>
      
      					[(#REM) On reliste les mots clés sélectionnés par l'utilisateur, mais on ne les affiche pas de suite.]
      					<B_motcleM_gr_3>
      					<BOUCLE_motcleM_gr_3(POUR) {tableau #ENV**{motcle}}>
      					
      							[(#REM) Pour les lister, on reprend la même boucle mots qu'au début, mais on lui ajoute le critère {id_article=#ID_ARTICLE} .]
      							<B_MC_selected_article_gr_3>
      							<BOUCLE_MC_selected_article_gr_3(MOTS) {id_mot=#VALEUR} {id_article=#ID_ARTICLE}>
      							<a href="#URL_MOT"><em><small>[(#TITRE|supprimer_numero)] - </small></em></a>
      							</BOUCLE_MC_selected_article_gr_3>
      							</B_MC_selected_article_gr_3>					
      				
      					</BOUCLE_motcleM_gr_3>
      					</B_motcleM_gr_3>
      <br />
      <br />
      	
      	            </BOUCLE_affichage_groupe3>
      
      				</ul>
       			[<p class="pagination">(#PAGINATION{page})</p>]
      			<p>~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~</p>
      			</div>
      				</B_affichage_groupe3>
      				[(#REM) <em>Pas d'articles reliés.</em> ]
      				<//B_affichage_groupe3>		
      
      
      
      			[(#REM) --------------- Affichage groupe 2: articles reliés à 2 mots clés. ---------------------]
      			[(#REM) --------------------------------------------------------------------------------------- ]
      
      			<B_affichage_groupe2>
      <div class="">
      			[(#ANCRE_PAGINATION|vide)]
      				<h2>[(#_affichage_groupe2:TOTAL_BOUCLE)] [(#_affichage_groupe2:TOTAL_BOUCLE|>{1}|?{'articles ont','article a'})] une correspondance de 2 mots clés sur [(#GET{addition})] : </h2>
      <p>&nbsp;</p>
      				<ul>
      				<BOUCLE_affichage_groupe2(ARTICLES) {id_article IN #GET{compteur_2}} {par date} {inverse}  {pagination 5}>
      				<li>
      						[(#LOGO_ARTICLE{#URL_ARTICLE}|image_reduire{50,50})]
      	                    <a href="#URL_ARTICLE"><h3>[(#TITRE|supprimer_numero)]</h3></a>
      	                    <small>[(#DATE|affdate_jourcourt)][, <:par_auteur:> (#LESAUTEURS)]</small>
      	            </li>
      
      
      					[(#REM) Ci-dessous, les mots clé sélectionnés qui sont associés à l'article.]
      					[(#REM) Pour que l'utilisateur sache sur la base de quel(s) mot(s) clé(s) cet article peut être intéressant à aller voir.]
      
      					<small>Mots correspondants : </small>
      
      					[(#REM) On reliste les mots clés sélectionnés par l'utilisateur, mais on ne les affiche pas de suite.]
      					<B_motcleM_gr_2>
      					<BOUCLE_motcleM_gr_2(POUR) {tableau #ENV**{motcle}}>
      					
      							[(#REM) Pour les lister, on reprend la même boucle mots qu'au début, mais on lui ajoute le critère {id_article=#ID_ARTICLE} .]
      							<B_MC_selected_article_gr_2>
      							<BOUCLE_MC_selected_article_gr_2(MOTS) {id_mot=#VALEUR} {id_article=#ID_ARTICLE}>
      							<a href="#URL_MOT"><em><small>[(#TITRE|supprimer_numero)] - </small></em></a>
      
      							</BOUCLE_MC_selected_article_gr_2>
      							</B_MC_selected_article_gr_2>					
      				
      					</BOUCLE_motcleM_gr_2>
      					</B_motcleM_gr_2>
      <br />
      <br />
      	
      	            </BOUCLE_affichage_groupe2>
      
      				</ul>
       			[<p class="pagination">(#PAGINATION{page})</p>]
      			<p>~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~</p>
      			</div>
      				</B_affichage_groupe2>
      				[(#REM) <em>Pas d'articles reliés.</em> ]
      				<//B_affichage_groupe2>		
      
      
      
      			[(#REM) --------------- Affichage groupe 1: articles reliés à 1 mot clé. ---------------------]
      			[(#REM) --------------------------------------------------------------------------------------- ]
      
      			<B_affichage_groupe1>
      <div class="">
      			[(#ANCRE_PAGINATION|vide)]
      				<h2>[(#_affichage_groupe1:TOTAL_BOUCLE)] [(#_affichage_groupe1:TOTAL_BOUCLE|>{1}|?{'articles ont','article a'})] une correspondance de 1 mot clé sur [(#GET{addition})] : </h2>
      <p>&nbsp;</p>
      				<ul>
      				<BOUCLE_affichage_groupe1(ARTICLES) {id_article IN #GET{compteur_1}} {par date} {inverse}  {pagination 5}>
      				<li>
      						[(#LOGO_ARTICLE{#URL_ARTICLE}|image_reduire{50,50})]
      	                    <a href="#URL_ARTICLE"><h3>[(#TITRE|supprimer_numero)]</h3></a>
      	                    <small>[(#DATE|affdate_jourcourt)][, <:par_auteur:> (#LESAUTEURS)]</small>
      	            </li>
      
      
      					[(#REM) Ci-dessous, les mots clé sélectionnés qui sont associés à l'article.]
      					[(#REM) Pour que l'utilisateur sache sur la base de quel(s) mot(s) clé(s) cet article peut être intéressant à aller voir.]
      
      
      					<small>Mots correspondants : </small>
      
      					[(#REM) On reliste les mots clés sélectionnés par l'utilisateur, mais on ne les affiche pas de suite.]
      					<B_motcleM_gr_1>
      					<BOUCLE_motcleM_gr_1(POUR) {tableau #ENV**{motcle}}>
      					
      							[(#REM) Pour les lister, on reprend la même boucle mots qu'au début, mais on lui ajoute le critère {id_article=#ID_ARTICLE} .]
      							<B_MC_selected_article_gr_1>
      							<BOUCLE_MC_selected_article_gr_1(MOTS) {id_mot=#VALEUR} {id_article=#ID_ARTICLE}>
      							<a href="#URL_MOT"><em><small>[(#TITRE|supprimer_numero)] - </small></em></a>
      
      							</BOUCLE_MC_selected_article_gr_1>
      							</B_MC_selected_article_gr_1>					
      				
      					</BOUCLE_motcleM_gr_1>
      					</B_motcleM_gr_1>
      <br />
      <br />
      
      	
      	            </BOUCLE_affichage_groupe1>
      
      				</ul>
       			[<p class="pagination">(#PAGINATION{page})</p>]
      			<p>~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~</p>
      			</div>
      				</B_affichage_groupe1>
      				[(#REM) <em>Pas d'articles reliés.</em> ]
      				<//B_affichage_groupe1>		
      
      
      
      
      
      
      		[(#REM) Balises de fin de la boucle B_motcleM. ]
      		</B_motcleM>
      		<//B_motcleM>
      
      	
      </div> <!-- Fin de la div id="resultat_recherche" -->
      
      [(#REM)*********************** Fin de la zone d 'affichage des articles trouves dans la recherche multicritères.*********************]

      Pardon à ceux qui trouveront mes nombreux commentaires pénibles. Je débute en spip et j’ai besoin de m’y retrouver facilement. Merci de me dire si j’ai commis une erreur dans le code.

    • christophe noisette

      Comme je viens de passer en spip3, je ne peux plus utiliser le plugin en tant que tel. Donc j’ai essayé d’utiliser les deux fichiers qu’Isabelle propose. Donc tout d’abord, merci pour ce partage.
      Maintenant, j’ai bien entendu quelque question.
      Pourquoi tu appelles la rubrique 15 dans le formulaire de recherche, à deux reprises ?
      1)

      2) plus bas, Car je ne vois pas alors comment tu peux appeler ta page de résultat que tu proposes ? Si cet appel de la rubrique 15 sert à limiter la recherche multicritère à une rubrique, c’est merveilleux, mais cela ne me dit pas comment je peux appeler ma page de résultat.

      En espérant pouvoir remettre, d’une façon ou d’une autre, une recherche multicritère par mot-clé rapidement sur mon nouveau site spip,
      Amitiés
      Christophe

    • J’ai beaucoup modifié (rallongé) ce code depuis mon post.
      Les réponses aux questions :
      1) Le formulaire n’appelle pas 2 fois la rubrique 15 ; la seconde occurrence est avec un input type hidden pour stocker la valeur qui passe dans l’environnement ensuite. D’autres boucles la récupèrent après, avec d’autres variables qui y passent aussi.
      2) Je n’ai pas de page recherche.html distincte. Le clic sur submit envoie des infos dans la barre d’adresse, les boucles traitent cet environnement, et tout est renvoyé sur la page rubrique 15 html, dans une zone dédiée (les boucles ont des conditions : il se passe X, la page n’affiche que Y, etc.).

      Au final, ça marche, avec SPIP bonux installé sur SPIP 2.1.10 et le plugin Table sorter pour les résultats sous forme de tableaux triables.

      Sur mon site, j’ai fait un traitement des résultats en distinguant des tableaux listant les correspondances totales et des tableaux pour correspondances partielles, en rapport avec le ou les mots clés choisis au départ par l’utilisateur. C’est vraiment du sur mesure, par rapport à des besoins pour mon site, avec pas mal d’emboîtements de code. Le code actuel est donc un peu trop long pour être posté ici. Mais je ne doute pas de votre futur succès. Isabelle.

    • Bonjour et milles merci Prad, ta recherche multicritère des mots clés avec le checkbox m’a beaucoup aidé. je l’ai utilisé en spip3 et ca marche nickel. Maintenant j’utilise gis4 et j’aimerai que la recherche marche sur la carte aussi, sur la carte doit s’afficher seuls les articles dont leurs mots clés ont été choisis ? Merci de votre aide

    • Bonjour
      merci Prad et isabelle pour ces contributions !!!!

      Je cherche a ce que le formulaire reste visible avec les données saisies j’ai tenté ceci mais cela ne fonctionne a cause des []
      <option VALUE="#ID_MOT" [(#ENV{motcle[]}|=={#ID_MOT}?{"SELECTED"})] >[(#TITRE|supprimer_numero)]</option>

      Une piste une idée ?

      Merci !!!!

    • Bonjour ;
      J’ai trouvé une piste sous spip 3
      [(#ENV{motcle\[\]}|=={#ID_MOT}?{"SELECTED"})]
      ce qui permet l’acceptation des crochets dans la balise #ENV ;
      Malheureusement cela ne fonctionne pas
      autre píste
      #EVAL{chr('91')}#EVAL{chr('93')}
      mais cela n’a pas de résultat et génère une erreur....

      Merci

    • Bonjour, j’ai le même problème pour conserver la sélection sur le formulaire, avez vous réussi à gérer ce pb de [] ?
      Merci

    • Salut Stephan,

      Voici ce que j’utilise et qui fonctionne très bien pour conserver la sélection d’un formulaire. Ici l’exemple d’un bouton de radio, mais ça fonctionne de la même manière pour une case à cocher.

      <li><input type="radio" name="id_mot" value="#ID_MOT" [(#EXPOSE|oui) checked="checked"] />[(#TITRE|supprimer_numero)]</label></li>
    • Bonjour Isabelle,
      c’est tout a fait ce qu’il me faut, sauf que ...
      ma recherche multi criteres doit porter sur les evenements et que les mots clés associés à l’evenement le sont via CHAMPS EXTRAS : le visiteur par le moyen de editer_evenement_public selectionne les mots clés pour un nouvel evenement, j’aimerai utiliser ces mots clés dans la recherche, mais j’ai beau tester, parcourir les forums je ne comprends pas comment y arriver.

      Peux tu m’aider un peu ?

    • Bonjour,
      j’ai peut être trouvé mon bonheur avec ce tuto « Recherche ciblée par critères sur SPIP ».-) :
      http://www.yume-design.com/Recherche-ciblee-par-criteres-sur

    Répondre à ce message

  • Christophe Noisette

    Bonjour
    je reviens hanter un peu le forum car un mystère vient d’apparaître sur mon site. J’ai installé la recherche multicritère et j’en suis globalement satisfait. Mais certaines requêtes ne donnent pas de résultat alors qu’elles devraient. Ainsi, par exemple, je ne trouve aucun article ayant les mots clés FRANCE et COLLECTIVITES TERRITORIALES... mais je trouve 121 articles ayant le mot clé COLLECTIVITES TERRITORIALES (seul). Si je demande FRANCE et un autre mot du même groupe que collectivités, comme par exemple AOC, ou Associations, j’ai des résultats qui sont cohérents avec mes articles. Je n’arrive pas à comprendre pourquoi la première combinaison ne donne aucun résultat.

    J’ai installé, par ailleurs, le fichier par prad (infogm.org/spip.php ?page=rechercheZ) et là, si je fais une recherche avec les deux mots clés, je trouve 67 articles. Si quelqu’un a envie de se pencher sur ce souci, cela me serait d’une aide considérable.

    En vous remerciant,
    Cordialement
    Christophe Noisette, Inf’OGM

    Répondre à ce message

  • Bonjour
    quelqu’un serait-il m’expliquer comment trier le résultat de cette recherche par date. Il faut modifier le fichier result_rec_mc qui est dans /modele/. Comme ce n’est pas des boucles SPIP, je suis un peu perdu. Merci d’avance.
    Et encore merci aussi pour ce super plugin ;)
    Cordialement
    Christophe

    Répondre à ce message

  • Bonjour,
    Ce code fonctionne bien, mais je n’arrive pas a afficher uniquement les mots clés de chaque groupes qui ont au moins un article indexé et visualiser le nombre d’articles indexes pour chaque mot cle.

    Merci

    Répondre à ce message

  • Merci Prad pour cette boucle qui correspond très exactement à ce que je cherchais, et qui m’enlève une sacrée épine du pied...

    Répondre à ce message

  • Bonjour,
    J’ai activé le plugin (version 0.1 [34505] ) sur un spip en 2.10. Je peux changer la config sur cette page : /ecrire/ ?exec=cfg&cfg=Recherche multicritere

    Par contre je ne peux pas modifier les paramètres car l’appel de la page /ecrire/ ?exec=rec_mc donne le message d’erreur :

    Fatal error: Call to undefined function debut_page() in \plugins\recherche_multicriteres\exec\rec_mc.php  on line 43

    et la balise n’est pas interprétée sur le site public.

    Répondre à ce message

  • 1

    apparement une version compatible spip 2 existe.

    elle est fontionnelle sur le site de l’auteur du plugin . par contre il est impossible de la télécharger rofl :s

    • Bonjour,

      J’ai essayé d’installer ce plugin sur un site sous spip2.0.8.

      Voici le message d’erreur lorsque j’essaye d’exécuter le fichier http://www[MONSITEWEB]/ecrire/AddGroupmotDsRub.php
       :
      Warning : main(inc.php3) [function.main] : failed to open stream : No such file or directory in /home/sfenweb/sfenjg.org/ecrire/AddGroupmotDsRub.php on line 43

      Warning : main(inc.php3) [function.main] : failed to open stream : No such file or directory in /home/sfenweb/sfenjg.org/ecrire/AddGroupmotDsRub.php on line 43

      Warning : main() [function.include] : Failed opening ’inc.php3’ for inclusion (include_path=’. :/usr/local/lib/php’) in /home/sfenweb/sfenjg.org/ecrire/AddGroupmotDsRub.php on line 43

      J’ai néanmoins esayé de remplir la table à la main (INSERT INTO sfendb.spip_rubriques_groupes (id_groupe ,id_rubrique) VALUES (’3’, ’16’) ; ) - je veux faire une recherche sur le groupe de mo n°3 depuis la rubrique 16. Mais rien ne change. Ce plugin est-il vraiment compatible spip 2.0 ?

      Merci à tous

    Répondre à ce message

  • 1

    Bonjour !

    Voila, je développe actuellement un site en spip 2.06 et j’ai découvert le plugin recherche multicritères qui correspond exactement à ce que je cherche.

    Apres avoir testé, je ne parviens pas à l’installer

    Fatal error : Call to undefined function : spip_abstract_showtable() in c :\program files\easyphp1-8\www\spip\plugins\recherche_multicriteres\base\rec_mc_upgrade.php on line 16

    Le problème ne se pose pas avec une version 1.92 de spip.

    Pourtant j’ai vu des sites en spip2 qui utilisent ce plugin......

    Quelqu’un aurait-il déjà rencontré ce pb ou une idée à suggérer ?

    Cordialement !

    Merci d’avance.

    Mike

    • Christophe Noisette

      Bonsoir,
      j’ai exactement le même problème. Je suis en 2.0.10 et les plugins installés sont :

      Agenda 2.0 : Version : 2.0.4 [33103] — stable
      cfg : moteur de configuration : Version : 1.14.1 [31734] — stable
      Le Couteau Suisse - Version : 1.8.09.14 [32581] — stable
      Activer le plugin Lecteur Flash pour MP3 - Version : 0.2 — stable
      Menus deroulants - Version : 0.1 — en développement
      SPIP Bonux 2.0 - Version : 1.8.5 [33049] — stable
      Squelette par mot clef pour Spip V2.x - Version : 1.0 [33025] — en développement

      C’est bien étrange car j’ai aussi vu des sites Spip 2.0 chez qui le plugin fonctionnait...

      Merci pour votre aide
      Cordialement

    Répondre à ce message

  • 2

    j’ai migré mon site hier en spip 2.0.3 ... ma hantise était ce plugin, et j’avais vaguement testé la solution sans plugin proposé par un internute qui fonctionnait très bien, ceci dit au passage. Pour information, j’utilise le plugin pour une base de données de 1000 concerts où l’on peut faire des recherches sur plein de critères (une des 200 chansons du groupe, la ville, le pays, le mois, la salle, la première partie, etc etc....). Verdict : même pas besoin de solution, le plugin passe !!!!! cf en ligne ! Autant dire que je suis ravie et que ça m’a épargné bien des peines.

    • François Daniel Giezendanner

      Bonjour Marjorie,

      Pouvez-vous :

      • indiquer où vous avez téléchargé le plugin qui fonctionne
      • indiquer une page web de votre site où cette recherche multicritère est en fonction

      Meilleurs messages

      François Daniel Giezendanner

    • je vous réponds avec beaucoup de retard. Toutes mes excuses.

      Le plugin fonctionne ici, sur un site en spip 2.0.9 :

      http://www.radiohead.fr/spip.php?page=rechercheconcerts

      la page est longue à charger (j’ai beaucoup de mots clés...).

      Je vais jamais mis à jour le plugin depuis son installation !

    Répondre à ce message

  • François Daniel Giezendanner

    Bonjour,

    En fait j’avais fait un petit point de situation ici :

    ... Il y avait cet article :

    mais il n’est plus accessible

    Quelqu’un envisage-t-il sa mise à jour pour SPIP 2 ?

    Cordialement

    FDG

    Répondre à ce message

  • François Daniel Giezendanner

    Je crois me souvenir que le plugin « Recherche multi-critère par mots-clés » bénéficiait d’un article sur SPIP contrib que je ne retrouve nulle part. L’article a-t-il été supprimé ?

    On trouve par conte le plugin ici :

    Qui est valable pour SPIP 1.9

    Quelqu’un peut-il donner des informations sur l’adaptation de ce plugin pour SPIP 2 et la documentation y relative ?

    Meilleurs messages

    François Daniel Giezendanner

    Répondre à ce message

  • Bonjour, petite question concernant les possibilités de ce plugin : Le nombre de mots clés à afficher est-il limité (par les performances serveurs). Si j’ai cinq critères de tri comportant chacun 200 mots clés. La page ne sera-t-lle pas trop lourde à afficher ?? Merci...

    Répondre à ce message

  • 2

    technique pour faire une recherche multicriteres sans utiliser de plugins.
    Fonctionne avec les versions spip integrant IN.

    1) Le formulaire presentant les mots clés, par groupe de mots clés

    <form method="post">
          <input type="hidden" name="page" value="sommaire" />
          <BOUCLE_groupes(GROUPES_MOTS)>
          <h1>#TITRE</H1>
          <BOUCLE_mots(MOTS){id_groupe}>
          [(#TITRE|supprimer_numero)] <input type="checkbox" name="motcle[]" value="#ID_MOT" />
          </BOUCLE_mots>
          </BOUCLE_groupes>
          <br />
          <input type="submit" />
    </form>

    2) les boucles affichant les articles correspondant. La 1re boucle recupere les articles ayant un mot clé non selectionné dans le formulaire. Puis la 2e boucle affiche les articles qui n’ont pas été selectionnés dans la 1re, ceci grace a doublons :

    <BOUCLE_doublons(ARTICLES){id_mot !IN #ENV**{motcle}}{doublons}>
    </BOUCLE_doublons>
    <BOUCLE_resultat(ARTICLES){doublons}>
    <h4>#TITRE</h4>
    </BOUCLE_resultat>

    A noter : le champ input page a pour valeur sommaire : l’envoi du formulaire mene sur cette page. Changez cette page à votre convenance.

    Jujubre

    • Bonjour,

      Merci pour cette solution. Mais elle affiche tous les articles possédant un ou plusieurs des mots-clé sélectionnés.

      Je cherche une solution limitant l’affichage aux seuls articles possédant tous les mots-clé sélectionnés (et sans essayer la version SPIP2 et le plugin Bonux, comme Idoric, qui me priverait de plugins inconciliables avec Spip).

      Je n’y arrive pas, pouvez-vous m’aider ?

      D’avance merci !

    • Bonjour Fabrice,
      dans mon cas (utilisé sous spip 1.9.2g) :

      Dans les critères de ma boucle, j’ai utilisé :

      {id_mot=#ENV{id_mot1}}{id_mot=#ENV{id_mot2}}{id_mot=#ENV{id_mot3}}

      Suite à la requéte :

      <BOUCLE_mot1(MOTS){id_mot=#ENV{id_mot1}}>#SET{mot1,#TITRE}</BOUCLE_mot1>
      		<BOUCLE_mot2(MOTS){id_mot=#ENV{id_mot2}}>#SET{mot2,#TITRE}</BOUCLE_mot2>
      		<BOUCLE_mot3(MOTS){id_mot=#ENV{id_mot3}}>#SET{mot3,#TITRE}</BOUCLE_mot3> 

      Après avoir saisi le formulaire :

      <form name="formrest" method="GET" action="spip.php" >
      			<input type="hidden" name="page" value="#ENV{page}" >
      			
      			<h1 style="font-size: 20px; font-weight: bold;margin: 2px 0 5px 0"><:criteres_de_selection:></h1>
      			
      			<div style="display: block; float: left; font-weight: bold; width:200px ; text-align: center; margin-left:20px"><:par_destination:></div><div style="display: block; float: left; width:200px;font-weight: bold; text-align: center;; margin-left:20px"><:par_duree_des_sejours:></div><div style="display: block; float: left; width:200px; font-weight: bold; text-align: center;; margin-left:20px"><:par_type_hebergement:></div><br>
      			<select name="id_mot1" style="display: block; float: left; width:200px; margin-left:20px">
      				<option value=""><:faites_votre_choix:></option>
      				<BOUCLE_choixmots1(MOTS){id_groupe=4}>
      				<option value="#ID_MOT" [(#ENV{id_mot1}|=={#ID_MOT}|?{'selected',''})]> #TITRE</option>
      				</BOUCLE_choixmots1>
      			</select>
      			<select name="id_mot2" style="display: block; float: left; width:200px; margin-left:20px">
      				<option value=""><:faites_votre_choix:></option>
      				<BOUCLE_choixmots2(MOTS){id_groupe=3}{par titre}>
      				<option value="#ID_MOT" [(#ENV{id_mot2}|=={#ID_MOT}|?{'selected',''})]> #TITRE</option>
      				</BOUCLE_choixmots2>
      			</select>
      			<select name="id_mot3" style="display: block; float: left; width:200px; margin-left:20px">
      				<option value=""><:faites_votre_choix:></option>
      				<BOUCLE_choixmots3(MOTS){id_groupe=5}>
      				<option value="#ID_MOT" [(#ENV{id_mot3}|=={#ID_MOT}|?{'selected',''})]> #TITRE</option>
      				</BOUCLE_choixmots3>
      			</select>
      			   <input type="hidden" name="lang" value="#LANG" >
      			<input type="submit" value="<:valider:>">
      			</form>

      En espérant que celà réponde à ta question

      Bonne continuation à tous les spipiens qui font vivre ce formidable outil

    Répondre à ce message

  • Je recommence :

    <BOUCLE_motcle(POUR)tableau #ENVmotcle>

    <BOUCLE_doublons(ARTICLES) !id_mot=#VALEURdoublons/>

    </BOUCLE_motcle>

    <BOUCLE_resultat(ARTICLES)doublons>

    <h4>#TITRE</h4>

    </BOUCLE_resultat>

    Répondre à ce message

  • @Jujubre

    Je n’ai pas réussi à faire marcher la deuxième partie de ton explication (le !IN semble se comporter étrangement), mais j’ai fait ça à la place avec l’aide du plugin Bonux et le tout fonctionne très bien pour moi :




    #TITRE

    Répondre à ce message

  • 1

    Bonjour a tous, j’aimerai savoir comment afficher le logo de l’article dans la page searchresult lorsque celle ci affiche le résultat de la recherche.

    merci

    • Savez vous si une version existe pour SPIP 1.9.2 ?
      ou quelles adaptations faire pour que cela fonctionne ?
      Par avnce, merci pour votre aide précieuse.

    Répondre à ce message

  • 11

    Bonjour et merci pour cette contrib ultra utile qui contourne un point faible de Spip... très fort...

    J’ai cherché à faire évoluer le script. On peut l’adapter assez facilement à n’importe quel squelette mais je sèche sur un point.
    Comment obtenir un seul résultat contenant la liste des articles correspondante au choix du visiteur et pas les autres eventualités de résultat...

    Par exemple : 3 groupes de mots-clef :mc1, mc2, mc3... on obtient LE résultat unique qui correspond aux critères de choix mc1+mc2+mc3.

    Pour le moment on peut par exemple obtenir le genre de résultat ci dessous :

    x résultats pour la sélection :

    > mc1+mc2+mc3

    > mc2+mc3

    > mc1+mc2

    > mc3 (c’est un exemple, bien sur...)

    Et je cherche à n’obtenir que mc1+mc2+mc3 quitte à avoir 0 réponse.
    Pour cela il faut modifier la requete : $sql = "select count(*) as num... etc (du moins c’est ma déduction...)
    soit modifier une variable $listidmot... et là... bin je sèche méchamment et je l’avoue, pas assez musclé en PHP et SQL... si j’ai la soluce avant vous, je vous la mets en ligne, promis...

    Et quitte à casser les pieds à tout le monde, j’aimerais bien aussi rajouter le sous-titre après le titre sans tout faire boguer... Deux défis pour le prix d’un... c’est Noël !!!

    Cette contrib est à mon avis une base pour améliorer grandement la vie des spipeurs... je suis sur qu’elle va faire son chemin...

    Vive SPIP !!!

    Louis.

    • Merci pour le commentaire,

      Cette contrib.est en cours de réécriture pour être adaptée à la fois à SPIP 1.7 et SPIP 1.8, avec comme modifications :

      $_POST utilisé au lieu de $_GET,
      possibilité de limiter la recherche à la rubrique en cours,
      recherche avec « et » et « et/ou » au choix donc possibilité d’avoir comme tu le souhaites des résultats correspondants exactement aux mots-clés recherchés et ayant tous les mots-clés donc, c’est une des demandes récurentes.
      Possibilité aussi de faire des recherches limitées à une certaine date et diverses améliorations ou corrections de bugs (sans grande conséquence).

      Voilà un peu les avancées prévues pour la nouvelle version d’ici 3 semaines environs (je sais ça fait longtemps que je promets une nouvelle version, mais ça vaut le coup d’attendre encore un peu, elle arrive...)

      Paul
      http://www.netdeveloppeur.com

    • Bonjour Paul et bonjour à tous,

      merci pour ta réponse... ça va sembler interminable mais je supporterai bien une attente de trois semaines, pas de problème... je guette la nouvelle version et encore une fois, si je trouve quelque chose de mon coté, j’enverrais ma version...

      Bon courage et vive Spip !

      Louis.

    • Vivement la fin octobre alors !

    • Salut,

      Nous sommes le 2 novembre, la nouvelle version est prête, il me manque juste à écrire la contribution, donc encore quelques jours de patience...Merci.

      Paul
      http://www.netdeveloppeur.com

    • Merci Paul, de nous tenir au courant. Je n’ai pas abouti de mon coté. Je laisse faire les pros... total respect !!!

    • Bonjur,
      Est-il prévu de modifier cette contrib pour qu’elle soit compatible avec spip 1.9 ?
      J’ai pu créer la table à la main et changer 1 ligne de script mais je suis bloquée sur la page
      ecrire/AddGroupmotDsRub.php ?rub=0

      "call to undefine function spip_query() in AddGroupmotDsRub.php on line 215

      merci
      dd

    • résolu ton problème ?

    • Bonjour,

      Merci pour cette contrib.

      Le résultat apparaît dans une page blanche sans style. Je voudrais que ça apparaissent dans une page article, ou au moins avec les CSS, mon bandeau, etc. Je ne sais pas faire ça. J’ai appliqué les css mais ça ne fait pas appraître mon bandeau par exemple. Et quand j’essaie de placer le code de article.html dans searchresult.html ben ça marche pas.

      Merci d’avance pour le coup de main

    • Bonjour louis,

      Je voulais savoir quel version de spip tu utilise ?

      Merci

    • Bonjour louis,

      Je voulais savoir quel version de spip tu utilise ?

      Merci

    Répondre à ce message

  • Peut on l’adapter à spip 1.9.2

    Répondre à ce message

  • 5
    François Daniel Giezendanner

    Bonjour,

    Très belle contribution.

    Envisagez-vous de la transformer en plugin ?

    FDG

    • j’aimerais également le plugin si vous le développez !
      merci pour cette contribe

    • ivandps

      merci !

      ça fonctionne impec

    • François Daniel Giezendanner

      Bonjour,

      j’ai lu rapidement l’article : http://www.spip-contrib.net/Recherche-avancee-sous-SPIP

      Bravo, excellent plugin, mais je ne vois pas ce qui est proposé pour faire une « Recherche multi-critère par mots-clés » avec plusieurs mots-clés !

      Pouvez-vous nous en dire plus sur ce point SVP.

      Meilleurs messages.

      FDG

    • ivandps@yahoo.fr

      Bonjour

      j’aurais aimé pouvoir sélectionner une ou plusieurs rubriques, un ou plusieurs mots-clés, un groupe de mots-clés... ce qui correspond à priori à votre contribe mais pas au plugin « recherche avancée » sus mentionné (déjà excellent par ailleurs).

      Merci

    Répondre à ce message

  • Bonjour,
    serait-il possible de mettre à jour cette contribution pour la version 1.9 ne comportant plus de fichiers php3.
    Je ne trouve pas non plus l’équivalent du fichier inc.php3.
    Par quel fichier a-t-il été remplacé dans la version 1.9.

    Répondre à ce message

  • J’ai découvert il y a peu via les messages ci-dessous qu’il y avait sur le site du développeur une version plus récente :
    http://www.netdeveloppeur.com/tutoriaux-et-astuces-spip/spip-recherche-multicriteres-article34.html
    Une belle amélioration est de pouvoir valider le critère "Tous les mots doivent être présents" (parfait pour mon usage).

    Seulement j’aimerai pouvoir faire une sélection différente :
    Que tous les mots-clef, à l’intérieur d’un groupe, se cumulent ( « et/ou » au lieu de « et », à l’intérieur de chaque groupe de mots-clef ).

    Par exemple, avec 2 groupes de mots-clef et 2 mots-clef dans chaque :

    En l’état (avec $allword = 1) :
    Resultat = ( mc1G1 et mc2G1 ) et ( mc1G2 et mc2G2 )

    En l’état (avec $allword = 0) :
    Resultat = ( mc1G1 et/ou mc2G1 ) et/ou ( mc1G2 et/ou mc2G2 )

    J’aimerai (et n’arrive point à le faire) avoir :
    Resultat = ( mc1G1 et/ou mc2G1 ) et ( mc1G2 et/ou mc2G2 )

    D’avance merci aux éventuels champions du php...

    Hubert

    Répondre à ce message

  • 1

    Bonjour,

    Savez-vous si cette contrib est adaptable aux dernières versions de SPIP ? Ou s’il en existe une équivalente ?

    Merci d’avance

    — 
    S@m

    • Je me pose la même question !

      J’ai essayé avec SPIP 1.9.1
      Problème : Le fichier AddGroupmotDsRub.php contient la ligne de code suivante :
      include (« inc.php3 »)
      Or il n’y a plus de fichier inc.php3 !

    Répondre à ce message

  • bonjour
    je dois realiser un site concernant la vente de livre, avec le logiciel NAMO .
    ma premiere question est la suivante puis je inserer ces lignes alors que namo est en HTML ?

    Répondre à ce message

  • 2
    Maître Dedoy

    Bonjour, cette contrib est tout à fait magnifique !

    Je suis en train de réaliser un petit site en intranet chez moi sur des recettes de cuisine. Cette contrib me permettrait de sélectionner les différents ingrédients (=mots-clés) que j’ai en ma possession et de voir les recettes que je peux faire avec cela.

    Mais voilà. Je n’arrive pas à ajouter les groupes de mots-clés à tout le site (rub=0). Il n’y a qu’en sélectionnant une rubrique (rub !=0) que les groupes de mots-clés s’affichent correctement. Sinon rien rien est affiché...

    Comment faire ?

    • Maître Dedoy

      Je viens de trouver la raison grâce à une des réponses plus bas. Il faut mettre 0 à la place de ’0’ sinon erreur mysql.

      De plus, je voudrais savoir s’il est possible de classer par ordre alphabétique les mots-clés au lieu du classement par id_mot ?

    • Si je me souviens bien, dans « inc-search.php », il faut remplacer « order by ...id_mot,... » par « order by spip_groupes_mots.titre, spip_mots.titre » dans les $sql.
      Sur mon site, ça fonctionne :

    Répondre à ce message

  • 1

    Bonjour
    j’aimerais faire en sorte que les résultats d’une recherche multicritère (génial la contrib’ au passage) soient différents... Je souhaiterais avoir tous les articles avec TOUS les mots cléfs, puis TOUS les articles avec un mots clés et éventuellement en fin de page les articles avec un seul mot clé, mais ensemble, et donc pas comme présentement éclaté en fonction des rubriques. Est ce possible ?
    Cordialement
    Christophe Noisette
    www.infogm.org

    • Tu peux déjà faire ça avec le script, c’est ce qu’il fait par défaut, il présente d’abord les articles qui ont tous les mots-clés...
      Tu peux trier les résultats de 2 façons : soit par ID de rubrique, ce qui ne sert pas à grand chose d’ailleurs, soit par nombre de mots clés trouvés.
      Je suis en train de repencher dessus pour l’améliorer notamment suite au demande de « et » exclusif et je vais ajouter la possibilité de limiter par date d’articles et correction du bug des titres d’articles quand tu mets 10.espace ou un .espace dans le titre, celui-ci est coupé.

      Voilà à surveiller pour une mise à jour prochaine.

      @+

      Paul

    Répondre à ce message

  • bonjour
    lorsque l’on insere le inc-search.php3 dans une rubrique N
    peut-on restreinte facilement la recherche dans cette rubrique seulement ?
    apparement la recherche se fait sur la totalité du site.....

    Répondre à ce message

  • 6

    Bonjour,
    Pour ma part, j’ai un petit problème avec cette contribution. Quand je sélectionne un mot-clé dans chacun des groupes j’ai toute la combinaison des possibles qui s’affiche. cf. lien

    • le lien c’est ici

    • Paul SANCHES

      salut,

      Qu’est-ce que tu souhaites obtenir exactement comme résultats ?

    • Richard S

      Et bien, je souhaite ne voir apparaître que les résultats conditionnés par ET et non par ET puis par OU.

    • Ok je vois, laisse-moi voir si c’est facilement faisable et si oui je le ferai.

    • Super ! Merci.

    • Gandalve

      J’attends patiemment une réponse ...

      C’est vrai que l’idéal c’est d’avoir des résultats avec uniquemùent ET comme condition.....

    Répondre à ce message

  • 8

    Bonjour je découvre SPIP. J’ai installé la version 1.7.2 en local avec EasyPHP. J’ai souhaité tester votre contrib multi-critères et je me heurte à un certain nombre de problèmes que je suis incapable de corriger.

    Mon site est organisé en 4 rubriques : R1, R2, R3 et R4. Dans ces rubriques un certain nombre d’articles auxques sont attachés des mots clés organisés en groupe : GMC1, GMC2 et GMC3.

    Je souhaite avoir un formulaire qui me permette de retrouver un article en sélectionnant un ou plusieurs mots clés indépendamment des rubriques.

    J’ai donc suivi la contribution livrée dans spip-contrib.net :

    J’ai placé dans votre répertoire ecrire les fichiers :
    requete.php
    AddGroupmotDsRub.php

    J’ai placé à la racine, les 3 fichiers :
    inc-search.php
    searchresult.php3
    searchresult.html

    J’ai écrit dans le fichier FormulaireMot.php3 (à la racine de mon site) les lignes suivantes :

    <?php
            $id_rubrique=0;
            include ("inc-search.php");
    ?>

    J’ai créé la table spip_rubriques_groupes à partir de requete.php
    puis j’ai lancé AddGroupmotDsRub.php. Là ne sachant pas trop, dans chaque rubrique, j’ai coché toutes les cases. J’ai aussi tout coché dans la partie ’multisearch’

    J’ai voulu alors lancer : http://www.monsite/FormulaireMot.php3 et j’ai obtenu l’erreur suivante :
    Warning : Acc�s refus� pour l’utilisateur : ’ODBC@localhost’ (mot de passe : NON) in c :\program files\easyphp\www\inc-search.php on line 9

    Warning : MySQL Connection Failed : Acc�s refus� pour l’utilisateur : ’ODBC@localhost’ (mot de passe : NON) in c :\program files\easyphp\www\inc-search.php on line 9

    Warning : MySQL : A link to the server could not be established in c :\program files\easyphp\www\inc-search.php on line 9
    il n’y a pas de groupe de mots associ�s � cette rubrique : 0

    Je me suis dit qu’il fallait peut-etre installer l’option de la contrib.
    J’ai exécuté la requete : ALTER TABLE spip_groupes_mots ADD is_multisearch TINYINT DEFAULT ’0’ NOT NULL ;
    (j’ai été obligé de mettre 0 à la place de ’0’ pour ne pas avoir d’erreur)

    J’ai relancé : http://www.monsite/FormulaireMot.php3 avec toujours la même erreur.

    Que faut-il faire ? Je ne sais pas vraiment.

    Auriez-vous une idée ?

    Merci de votre aide.

    Philippe Le Roy.

    • Dom Lepaisant

      As-tu recalculé ta page ou bien vidé le cache.
      J’ai eu le même message d’erreur et un simple recalcul et tt est rentré ds l’ordre

      Dom

    • J’ai vidé la cache à partir de l’interface d’administration (et par sécurité directement depuis l’explorateur).

      Mais j’ai toujours les mêmes erreurs qui apparaissent.

      Pourrais-tu me filer ton fichier multicritere.php3 et m’indiquer à quel en droit de ton arborescence tu le positionnes ?

      Merci de ton aide.

      Philippe Le Roy (leroy.philippe@laposte.net)

    • Paul Sanches

      Tu as mis un mot de passe à ta base de données mysql ?

    • Paul Sanches

      En fait il ya bien un problème avec la recherche indépendante d’une rubrique.
      Il faut pour qu’elle fonctionne, que tu mettes dans la TABLE « spip_groupes_mots » le champs « is_multisearch » à 1 pour chaque groupe de mots. Et là, je te garantie que ça marche.

      Faut que je trouve une soluce automatique

    • Paul Sanches

      J’ai trouvé :
      la solution, il suffit dans le fichier inc-search.php, ligne 7 de remplacer : where is_multisearch = 1 par where is_multisearch = 0
      et c’est tout, plus besoin de mettre tout à 1.

    • Merci de t’intéresser au problème mais ça ne fonctionne toujours pas. J’ai toujours les mêmes erreurs qui apparaissent. J’ai tenté de renommer le inc_search.php en inc_search.php3 mais sans succès.

      J’ai tenté de tout réinstaller, mais lors de la restauration, (meme en prenant soin de lancer le script requete.php avant la restauration), j’avais pas mal d’erreur.

      Je continue mes recherches.

      A+

    • Dom Lepaisant

      Bjr

      il est ici

      A noter que je suis obligé de forcer l’affichage par un recalcul de la page

      Cordialement

      Dom

    • Paul Sanches

      Salut,

      Quand vous souhaitez utiliser la recherche multicritères sur une page indépendante d’une rubrique comme par exemple la page sommaire.html :

      -  créer un fichier rubzero.php3
      qui contient :

      <?php
      $fond = "rubzero";
      $delais = 0;
      include ("inc-public.php3");
      ?>

      -  créer un fichier rubzero.html
      qui contient :

      <?php
              $id_rubrique=0;
              include ("inc-search.php");
      ?>


      -  inclure ensuite le code suivant dans sommaire.html, là où vous souhaitez voir apparaitre la recherche multicritères

      <INCLURE(rubzero.php3)>

      Et voilà vous obtenez normallement une recherche multicritères par mots-clés sans avoir à recalculer à chaque fois la page sommaire.

    Répondre à ce message

  • 1

    Bonjour,
    il y a sûrement quelquechose que j’ai loupé quelquepart !

    qui pourra m’aider ?

    Merci d’avance

    Jean

    Voci le message que j’obtiens :

    Votre message pour la liste liste-ie-tendances a été rejeté.
    Le message vous est donc renvoyé.
    
    Votre message :
    Received: from siga.inst-elevage.asso.fr (siga.inst-elevage.asso.fr [195.101.239.16])
    	by ieparis5.inst-elevage.asso.fr (8.12.5/8.12.5) with ESMTP id j29Ehfmj015336
    	for <liste-ie-tendances@ieparis5.inst-elevage.asso.fr>; Wed, 9 Mar 2005 15:43:41 +0100
    Received: from calypso.acta-informatique.fr ([195.101.239.11])
              by siga.inst-elevage.asso.fr (Lotus Domino Release 5.0.11)
              with ESMTP id 2005030913154744:83288 ;
              Wed, 9 Mar 2005 13:15:47 +0100 
    Received: from [172.21.3.13] (localhost [127.0.0.1])
    	by calypso.acta-informatique.fr (8.9.1b+Sun/8.9.1) with ESMTP id NAA18167
    	for <liste-ie-tendances@inst-elevage.asso.fr>; Wed, 9 Mar 2005 13:25:44 +0100 (MET)
    Message-ID: <422EEA19.3070403@free.fr>
    Date: Wed, 09 Mar 2005 13:20:41 +0100
    From: Caillette-Free <jean.caillette@free.fr>
    User-Agent: Mozilla Thunderbird 1.0 (Windows/20041206)
    X-Accept-Language: fr, en
    MIME-Version: 1.0
    To: liste-ie-tendance <liste-ie-tendances@inst-elevage.asso.fr>
    Subject: Tendances 145
    X-MIMETrack: Itemize by SMTP Server on SIGA/Inst-Elevage(Release 5.0.11  |July 24, 2002) at
     09/03/2005 13:15:47,
    	Serialize by Router on SIGA/Inst-Elevage(Release 5.0.11  |July 24, 2002) at
     09/03/2005 13:15:48,
    	Serialize complete at 09/03/2005 13:15:48
    Content-Transfer-Encoding: 7bit
    Content-Type: text/html; charset=ISO-8859-1
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
      <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
    </head>
    <body bgcolor="#ffffff" text="#000000">
    <font size="-1">Le n&deg; 145 de Tendances est disponible<br>
    <br>
    adresse de la page :<br>
    <br>
    <a class="moz-txt-link-freetext" href="http://www.inst-elevage.asso.fr/html1/rubrique.php3?id_rubrique=292">http://www.inst-elevage.asso.fr/html1/rubrique.php3?id_rubrique=292</a><br>
    <br>
    Login : conjoncture-tendances<br>
    <br>
    Mot de passe : EHJWLWWK<br>
    <br>
    Vous en souhaitant bonne lecture.<br>
    <br>
    Le Webmestre<br>
    <br>
    </font>
    </body>
    </html>
    • J’ai fait une grossière erreur de copier-coller ce message est à détruire !
      avec toutes mes excuses

      Jec

    Répondre à ce message

  • 1
    Dom Lepaisant

    Ca, c’est une contrib du tonnerre de dieu !
    Je viens d’installer à l’instant en local sous Easy Php sans problème et pour mon site, ce sera vraiment d’une utilité terrible (+ de 100 mots-clé)

    Je fignole un peu et je mets en ligne

    Que du bonheur

    Merci beaucoup

    Dom

    • Dom Lepaisant

      On peut voir le résultat ici
      La page de résultats n’est pas encore CSSisée.

      -  Le tout, depuis le téléchargement jusqu’à affichage sur le site m’a pris au bas mot 1 heure .

      -  Je vais maintenant essayer de l’adapter à la page d’accueil de mon site.

      Merci encore à Paul pour cette exellente contrib

      Dom

    Répondre à ce message

  • 2

    je suis encore novice pour ce qui est du php. je vais peut etre avoir l’air idiote mais tant pis je pose quand meme ma question : qu’est ce qu’un site SPIP ?
    je suis un peu perdue dans tt ça. dsl

    • je voudrai egalement savoir où est ce que je doit créer le répertoire ecrire.
      est ce normal que les fichiers AddGroupmotDsRub.php, inc-search.php et requete.php se présente sous forme de microsoft picture it ! document, que searchresult.php soit sous forme de document HTML et que searchresult.php soit sous forme de document php3 (s’ouvrant avec le bloc note) ?
      vous devez vous dire que j’y connait vraiment rien...

    • studio multimedia

      Pour tes documents php3 s’ouvrant avec le bloc note,voici la solution donnée par l’équipe d’easy php.

      http://www.easyphp.org/

      « par défaut Windows rajoute l’extension .txt aux fichiers créés sous Notepad. Pour empecher cela, dans l’Explorer aller dans Outils/Option des dossiers/Affichage et décocher « Cacher les extensions des fichiers dont le type est connu ». »

      Pour le reste je te laisse aller voir ce site
      http://www.spip.net/

    Répondre à ce message

  • 1

    Le lien de démo ne marche plus.

    • Paul Sanches

      Oui exact, je suis en train de refaire mon site, en attendant, on peut voir une démo un peu modifiée ici

    Répondre à ce message

  • 2

    Bougrement intéressant... j’ai donc essayé et j’obtiens ça quand je tente de charger la page où j’ai placé les 3 lignes de PHP.

    "
    ERREUR DANS LE SQUELETTE
    erreur d’execution de la page,

    Parse error : parse error, unexpected ’&’ in /home/httpd/vhosts/div-yezh.org/subdomains/asso/httpdocs/inc-public.php3(126) : eval()’d code on line 73


    Je précise que la table s’est bien créée dans MySQL et que j’ai bien des mots clés dans mes rubriques.

    Que faire ?

    • Paul Sanches

      Salut, je ne comprend pas pourquoi tu as un parse error.

      Est-ce que tu arrives à accéder à cette page AddGroupmotDsRub.php sans erreurs ?
      As-tu attribué des mots-clés aux articles ?
      Tes mots-clés sont-ils des phrases avec des caractères du type ’ ou " ?

      Paul

    • J’ai trouvé l’erreur... qui n’a rien à voir avec Spip et ta contrib mais tient à un bug de Mac OS 10-3 Panther. Je m’explique :

      Sous Mac OS 10 donc, jai copié sur la présente contrib le code à insérer dans ma page, à savoir

      <?php 
                  include ("inc-search.php"); 
       ?>

      et ce que j’ai collé était ceci :

      <?php 
      Ý Ý Ý Ý include ("inc-search.php"); 
       ?>

      Etonnant non ? Les « Ý Ý Ý Ý » sont en plus et invisibles.

      Pour ceux à qui la même aventure arriverait, j’ai repéré l’erreur en utilisant la fonction de debugage de Spip 1,8 et en affichant le code.

      Il n’y a plus qu’à dire « Merci Spip et ses développeurs » et merci à toi, Paul, pour ta contrib. qui fonctionne parfaitement.

    Répondre à ce message

  • 1

    Fantastique !!
    Merci.

    Répondre à ce message

  • 1

    Salut Paul,

    Félicitations pour la qualité du travail. L’installation s’est passée sans aucun problème. Juste une remarque. J’ai voulu appliquer la recette en option. J’ai donc créé la colonne supplémentaire dans la table spip_groupes et rajouté le $id_rubrique=0 à mon sqelette cible.

    Aucun affichage ! En fait, un rapide examen du fichier inc-search ;php révèle que seuls les groupes ayant la valeur is_multisearch = 1 (valeur par defaut=0) sont sélectionnés par le formulaire. Ceci est encore mieux, puisqu’il est possible de n’utiliser que quelques groupes.

    Ais-je bien compris ?

    • Salut,

      Oui c’est bien ça tu décides quels groupes de mots tu souhaites voir apparaitre sur telle page de rubrique ou article d’ailleurs, je viens de tester aussi sur un article, aucun PB.

      Merci en tout cas pour ton message.

      En plus, je ne savais même pas que cette contrib. avait été validée, merci aux admins.

      @+

      Paul

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom