SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano

273 Plugins, 191 contribs sur SPIP-Zone, 35 visiteurs en ce moment

Accueil du site > Navigation > Recherche > Recherche multi-critère par mots-clés

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

15 janvier 2005 – par Paul Sanches – 92 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

7 votes

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.)

1ème é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

2ème é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");
?>

3ème é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 :

Zip - 6.2 ko
Recherche multi-critère par mots-clés

En attente de commentaires...

Retour en haut de la page

Vos commentaires

  • Le 27 mars 2010 à 18:55, par prad En réponse à : Recherche multi-critère par mots-clés

    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 :

    1. <form action="#URL_SITE_SPIP/spip.php?page=recherche" method="post">
    2.      <input type="hidden" name="page" value="recherche" />
    3.      <BOUCLE_groupes(GROUPES_MOTS)>
    4.      <ul>
    5.      <li><h3>#TITRE</h3>
    6.         <ul>
    7.                  <BOUCLE_mots(MOTS){id_groupe}><li>
    8.                  <label>#TITRE</label><input type="checkbox" name="motcle[]" value="#ID_MOT" /></li>
    9.                  </BOUCLE_mots>
    10.                  </ul>
    11.         </li>
    12.         </ul>
    13.      </BOUCLE_groupes>
    14.      <br /><br />
    15.      <input type="submit" value="Lancer la recherche" />
    16. </form>

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

    1.                 <B_motcleM>
    2.                 <div class="cartouche">
    3.                         <h1><:resultats_recherche:></h1>
    4.                 <BOUCLE_motcleM(POUR) {tableau #ENV**{motcle}}>
    5.                         <p class="soustitre">«&nbsp;<BOUCLE_multi(MOTS) {id_mot=#VALEUR}>#TYPE : #TITRE</BOUCLE_multi>&nbsp;»</p>
    6.                 </BOUCLE_motcleM>
    7.                 </div>
    8.                 </B_motcleM>
    9.                
    10.                 [(#REM) Multi-criteres : Articles trouves ]
    11.                 <BOUCLE_motcle(POUR) {tableau #ENV**{motcle}}>
    12.                         <BOUCLE_doublons(ARTICLES) {!id_mot=#VALEUR} {doublons} />
    13.                 </BOUCLE_motcle>
    14.                 <B_resultat>
    15.             <h2>#GRAND_TOTAL <:articles:></h2>
    16.                         <div class="menu articles">
    17.                         <ul>
    18.                         <BOUCLE_resultat(ARTICLES){doublons}>
    19.                                 <li>
    20.                                         [(#LOGO_ARTICLE|| style="color: #CA5200;">#URL_ARTICLE|image_reduire{150,100})]
    21.                                         <h3><a href="#URL_ARTICLE">#TITRE</a></h3>
    22.                                 </li>
    23.                         </BOUCLE_resultat>
    24.                         </ul>
    25.                         </div>
    26.                 </B_resultat>
    27.                 </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

    • Le 29 mars 2010 à 18:52, par ? En réponse à : Recherche multi-critère par mots-clés

      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

    • Le 29 mars 2010 à 20:50, par prad En réponse à : Recherche multi-critère par mots-clés

      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

    • Le 24 septembre 2010 à 22:34, par zaa En réponse à : Recherche multi-critère par mots-clés

      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

    • Le 1er août 2011 à 17:14, par Frédéri En réponse à : Recherche multi-critère par mots-clés

      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

    • Le 2 août 2011 à 00:38, par zaa En réponse à : Recherche multi-critère par mots-clés

      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 :

      1.             <form action='http://www.jqsi.qc.ca/spip.php?rubrique94' method='get'>
      2.                 <input type='hidden' name='page' value='rubrique' />
      3.                 <input type='hidden' name='id_rubrique' value='94' />
      4.                 <input type='text' name='recherche' value="[(#ENV{recherche})]" size="40" style="font-size:10px; margin-left:3px;" />
      5.                 <input type="image" src="#CHEMIN{images/loupe2.gif}" align="top" alt="Loupe" />
      6.                 <small style="margin-left:20px;">Raffiner votre recherche en choisissant parmi les mots-cl&eacute;s suivants:</small>
      7.                
      8.                 <table cellpadding="0" cellspacing="0" border="0" align="left" id="navigationHorizAvancee">
      9.                 <tr>
      10.                        
      11.                     <td class="menuActuatorAvancee" height="30" valign="top">
      12.                       <a href="#" onmouseover="ypSlideOutMenu.showMenu('menu01');" onmouseout="ypSlideOutMenu.hideMenu('menu01')">Organisations [(#ID_AUTEUR|?{'(1)', ''})] &nabla;</a>
      13.                       <div>
      14.                         <div id="menu01Container">  
      15.                            <div id="menu01Content" class="menuAvancee">
      16.                               <div id="navigationHoriz01">
      17.                                 <ul>
      18.                                     <BOUCLE_articles_org(ARTICLES){id_rubrique=94}>
      19.                                         <BOUCLE_auteurs_org(AUTEURS){id_article}{unique}>
      20.                                                 <li><input type="radio" name="id_auteur" value="#ID_AUTEUR"  /><label>[(#NOM)]</label></li>
      21.                                                 </BOUCLE_auteurs_org>
      22.                                   </BOUCLE_articles_org>
      23.                                 </ul>
      24.                              </div>
      25.                            </div>
      26.                         </div>
      27.                       </div>    
      28.                     </td>
      29.                                
      30.                     <BOUCLE_groupe_types(GROUPES_MOTS){id_groupe=8}>
      31.                     <?php $total=0;?>
      32.                     <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>
      33.                    
      34.                     <td class="menuActuatorAvancee" height="30" valign="top">
      35.                       <a href="#" onmouseover="ypSlideOutMenu.showMenu('menu02');" onmouseout="ypSlideOutMenu.hideMenu('menu02')">[(#TITRE|supprimer_numero)] <?php if ($total >= 1) { echo '('; echo $total; echo ')';}; ?>  &nabla;</a>
      36.                       <div>
      37.                        <div id="menu02Container">
      38.                          <div id="menu02Content" class="menuAvancee">
      39.                               <div id="navigationHoriz02">                    
      40.                                 <ul>
      41.                                     <BOUCLE_mots_types(MOTS){id_groupe}{par titre}{unique}>
      42.                                        <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>
      43.                                     </BOUCLE_mots_types>
      44.                                 </ul>
      45.                             </div>
      46.                         </div>
      47.                       </div>
      48.                     </div>    
      49.                     </td>
      50.                     </BOUCLE_groupe_types>
      51.        
      52.                    
      53.                     <BOUCLE_groupe_region(GROUPES_MOTS){id_groupe=9}>
      54.                     <?php $total=0;?>
      55.                     <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>
      56.                    
      57.                     <td class="menuActuatorAvancee" height="30" valign="top">
      58.                       <a href="#" onmouseover="ypSlideOutMenu.showMenu('menu03');" onmouseout="ypSlideOutMenu.hideMenu('menu03')"> [(#TITRE|supprimer_numero)] <?php if ($total >= 1) { echo '('; echo $total; echo ')';}; ?>  &nabla;</a>
      59.                       <div>
      60.                        <div id="menu03Container">
      61.                          <div id="menu03Content" class="menuAvancee">
      62.                               <div id="navigationHoriz03">
      63.                                
      64.                                 <BOUCLE_mots_region(MOTS){id_groupe}{par titre}{unique}{doublons}>
      65.                                 <ul>
      66.                                   <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>
      67.                                 </ul>
      68.                                 </BOUCLE_mots_region>
      69.                             </div>
      70.                         </div>
      71.                       </div>
      72.                     </div>    
      73.                     </td>
      74.                     </BOUCLE_groupe_region>
      75.                    
      76.        
      77.                   <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>
      78.                   <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>
      79.        
      80.             </tr>  
      81.             </table>    
      82.             </form>  
      83.         </div>
      84.        
      85.         <B_articles>
      86.             <br /> <br /> <br /><h1>Offre[(#GRAND_TOTAL|=={1}|?{'','s'})] <small>([#GRAND_TOTAL (#GRAND_TOTAL|=={1}|?{'r&eacute;sultat','r&eacute;sultats'})])</small></h1>
      87. <div class="menu articles surlignable">
      88.                                 #ANCRE_PAGINATION
      89.                 <ul>
      90.                 <BOUCLE_articles(ARTICLES){id_rubrique=94}{recherche?}{id_auteur?}{par points, date}{age<date}{mots?}{pagination 40}>  
      91.                     <li>
      92.                         <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>]                                            
      93.                         <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>
      94.                         <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>
      95.                         </div>
      96.                     </li>
      97.                 </BOUCLE_articles>
      98.                 </ul>
      99.                 [<p class="pagination">(#PAGINATION{page})</p>]
      100.             </div>
      101.             <br class="nettoyeur" />
      102.                         </B_articles>
      103.                
      104.                 <br /> <br /> <br />
      105.                 <h1>Offres <small>(aucun résultat)</small></h1>
      106.                
      107.                 <div class="menu articles">
      108.                                         <ul>
      109.                         <li>
      110.                             [<p>Aucun résultats de recherche pour &laquo; <strong>(#RECHERCHE)</strong> &raquo;</p>]
      111.                            
      112.                             <BOUCLE_motscles(POUR) {tableau #ENV**{mots}}>
      113.                                 <p>Aucun résultats de recherche pour
      114.                                 <BOUCLE_motcle_mot(MOTS) {id_mot=#VALEUR} {",&nbsp;"}>
      115.                                      &laquo; <strong>#TYPE: #TITRE</strong> &raquo;
      116.                                 </BOUCLE_motcle_mot>
      117.                                 </p>
      118.                             </BOUCLE_motscles>
      119.                            
      120.                                    
      121.                             <BOUCLE_auteur_fin(AUTEURS){id_auteur}>[<p>Aucun résultats de recherche pour <a href="#URL_AUTEUR">(#NOM)</a></p>]</BOUCLE_auteur_fin>
      122.                                                              
      123.                             <h3>Pour augmenter vos résultats de recherche, tentez une recherche moins précise.</h3>
      124.                    
      125.                         </li>
      126.                     </ul>
      127.                  </div>
      128.                  <br class="nettoyeur" />
      129.                        
      130.                     [(#REM) Articles de la rubrique ]
      131.                     <B_articles_tous>
      132.                     <div class="menu articles">
      133.                         #ANCRE_PAGINATION
      134.                         <h2>Toutes les offres d'emploi actuelles</h2>
      135.                         <ul>
      136.                             <BOUCLE_articles_tous(ARTICLES) {id_rubrique} {par date}{age<date}{pagination}>
      137.                             <li>
      138.                                 <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>]                                            
      139.                         <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>
      140.                         <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>
      141.                         </div>
      142.                             </li>
      143.                             </BOUCLE_articles_tous>
      144.                         </ul>
      145.                         [<p class="pagination">(#PAGINATION)</p>]
      146.                     </div>
      147.                     </B_articles_tous>
      148.                    
      149.                 <//B_articles>
      150.                
      151.                
      152.              
    • Le 3 août 2011 à 13:54, par Frédéri En réponse à : Recherche multi-critère par mots-clés

      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.....

      1. [(#REM) Formulaire qui lsite les mots-clé sélectionnables, ici ceux du groupe 6]
      2.   <form method="post">                                                  
      3.     h2>Votre frigidaire</h2>                                                                                                           
      4.     <ul>                                                                                             
      5.       <BOUCLE_mots(MOTS){id_groupe=6}>                                                                                        
      6.         <li><input type="checkbox" name="motcle[]" value="#ID_MOT"> #TITRE<label>#TITRE</label></li>                                                                                         
      7.       </BOUCLE_mots>                                                                                   
      8.     </ul>                                                                            
      9.     <p>  <input type="submit" name="submit"></p>                                                                                                    
      10.   </form>                                                                  
      11. [(#REM) On commence par rappeler les mots clefs sélectionnés par l'utilisateur]
      12.   <B_motcleM>
      13.     Votre recherche porte sur les ingr&eacute;dients suivants :                            
      14.     <BOUCLE_motcleM(POUR) {tableau #ENV**{motcle}}>                                                      
      15.       <li>&nbsp;<BOUCLE_multi(MOTS) {id_mot=#VALEUR}>#TYPE : #TITRE</BOUCLE_multi>&nbsp;</li>                                  
      16.     </BOUCLE_motcleM>                        
      17.   </B_motcleM>
      18. [(#REM) Puis on construit le tableau qui contient tous les articles qui correspondent à au moins un mot clef sélectionné]
      19.   #SET{art_select,#ARRAY}                    
      20.                        
      21.   <B_select>                                                    
      22.     <BOUCLE_select(POUR) {tableau #ENV**{motcle}} >                                                                                  
      23.       <BOUCLE_ARTICLESSELECT(ARTICLES) {id_mot=#VALEUR} >                                    
      24.         #SET{art_select, #GET{art_select}|push{ #ID_ARTICLE }}                                                                                                            
      25.       </BOUCLE_ARTICLESSELECT>                                                    
      26.     </BOUCLE_select>                                                              
      27.   </B_select>  
      28.  
      29.                                                    
      30. [(#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) ]
      31. #SET{un, 1}                                        
      32.   <B_affichage>
      33.     Avec ces ingrédients vous avez la base pour les recettes suivantes :                        
      34.     <BOUCLE_affichage(ARTICLES) {id_article IN #GET{art_select}}>                                            
      35.       #SET{compteur_sup,0}
      36.       #SET{article,#ID_ARTICLE}                                                
      37.       <BOUCLE_ingr(POUR) {tableau #GET{art_select}} >                      
      38.         #SET{valeur,#VALEUR}                      
      39.         #SET{dif, #GET{valeur}|moins{#GET{article}}}                      
      40.         [(#GET{dif}|=={0}|oui) #SET{compteur_sup, #GET{compteur_sup}|plus{#GET{un}}}]                                                
      41.       </BOUCLE_ingr>                                              
      42.       <B_nbtotal><BOUCLE_nbtotal(MOTS) {id_article=#ID_ARTICLE} {id_groupe=6}> </BOUCLE_nbtotal>                        
      43.      
      44.       <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>                                              
      45.     </BOUCLE_affichage>
      46.   </B_affichage>
    • Le 2 septembre 2011 à 11:14, par isabelle En réponse à : Recherche multi-critère par mots-clés

      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 :

      1. <form name="FormActivites" id="FormActivites" action="#URL_SITE_SPIP/spip.php?rubrique15" method="get">
      2.        
      3. <img id="petitferforge" src="#CHEMIN{images/swirlt-155-38.png}" alt="folder" height="38" width="155" />
      4. <div id="titreFormActivites">Activités - Services</div>
      5. <div id="corpsFormActivites">
      6.             <input type="hidden" name="page" value="rubrique" />
      7.             <input type="hidden" name="id_rubrique" value="15" />
      8.         <fieldset id="typeBesoins"><legend></legend> <!-- Titre du fieldset -->
      9.         <p>
      10.             <BOUCLE_groupes_menu_mots2(GROUPES_MOTS){id_groupe=2}>
      11.                 <label for="Besoins" title="Vous pouvez sélectionner un type de besoins" >Domaine :</label>
      12.                 <select name="motcle[]" size="1" id="Besoins" tabindex="10" onfocus="this.className='jecherche';" onblur="this.className='jaichoisi';">
      13.         <!-- <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 -->
      14.                         <option VALUE="vide" selected="selected">vide</option>
      15.                         <BOUCLE_menu_mots2(MOTS) {id_groupe=2}{par titre}>
      16.                         <option VALUE="#ID_MOT">[(#TITRE|supprimer_numero)]</option>
      17.                         </BOUCLE_menu_mots2>
      18.         <!--</optgroup>-->
      19.                 </select>
      20.             </BOUCLE_groupes_menu_mots2>               
      21.         </p>
      22.         </fieldset>
      23.         <fieldset id="typeCommuneActivites"><legend></legend> <!-- Titre du fieldset -->
      24.         <p>
      25.             <BOUCLE_groupes_menu_mots3(GROUPES_MOTS){id_groupe=3}>
      26.                 <label for="Commune" title="Vous pouvez sélectionner une commune">Commune :</label>
      27.                 <select name="motcle[]" size="1" id="Commune" tabindex="20" onfocus="this.className='jecherche';" onblur="this.className='jaichoisi';">
      28.         <!--<optgroup label="choisir un lieu"> --><!-- label, c'est le nom de l'optgroup, ici ; donc c'est différent de la balise label for -->       
      29.                         <option VALUE="vide" selected="selected">vide</option>
      30.                         <BOUCLE_menu_mots3(MOTS) {id_groupe=3} {par titre}>
      31.                         <option VALUE="#ID_MOT">[(#TITRE|supprimer_numero)]</option>
      32.                         </BOUCLE_menu_mots3>
      33.         <!--</optgroup> -->
      34.                 </select>
      35.             </BOUCLE_groupes_menu_mots3>               
      36.         </p>
      37.         </fieldset>
      38.         <fieldset id="typeAcces"><legend></legend> <!-- Titre du fieldset -->
      39.         <p>
      40.             <BOUCLE_groupes_menu_mots6(GROUPES_MOTS){id_groupe=6}>
      41.                 <label for="Besoins" title="Vous pouvez sélectionner un type d'accès" >Accès :</label>
      42.                 <select name="motcle[]" size="1" id="Besoins" tabindex="30" onfocus="this.className='jecherche';" onblur="this.className='jaichoisi';">
      43.         <!-- <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 -->
      44.                         <option VALUE="vide" selected="selected">vide</option>
      45.                         <BOUCLE_menu_mots6(MOTS) {id_groupe=6}{par titre}>
      46.                         <option VALUE="#ID_MOT">[(#TITRE|supprimer_numero)]</option>
      47.                         </BOUCLE_menu_mots6>
      48.         <!--</optgroup>-->
      49.                 </select>
      50.             </BOUCLE_groupes_menu_mots6>               
      51.         </p>
      52.         </fieldset>
      53.         <fieldset id="typeCout"><legend></legend> <!-- Titre du fieldset -->
      54.         <p>
      55.             <BOUCLE_groupes_menu_mots1(GROUPES_MOTS){id_groupe=1}>
      56.                 <label for="Besoins" title="Vous pouvez sélectionner un type de coût" >Coût :</label>
      57.                 <select name="motcle[]" size="1" id="Besoins" tabindex="40" onfocus="this.className='jecherche';" onblur="this.className='jaichoisi';">
      58.         <!-- <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 -->
      59.                         <option VALUE="vide" selected="selected">vide</option>
      60.                         <BOUCLE_menu_mots1(MOTS) {id_groupe=1}{par titre}>
      61.                         <option VALUE="#ID_MOT">[(#TITRE|supprimer_numero)]</option>
      62.                         </BOUCLE_menu_mots1>
      63.         <!--</optgroup>-->
      64.                 </select>
      65.             </BOUCLE_groupes_menu_mots1>               
      66.         </p>
      67.         </fieldset>
      68.     <input type="submit" id="valid" value="" title="Cliquez sur ce bouton pour lancer votre recherche" tabindex="50"/>
      69. </div>
      70. <div id="piedFormActivites"></div>
      71. </form>
      72. <div style="display: block; clear: left; ">&nbsp;</div>
    • Le 2 septembre 2011 à 11:15, par isabelle En réponse à : Recherche multi-critère par mots-clés

      Et voici le traitement et l’affichage des réponses :

      1. [(#REM)*********************** Début de la zone d 'affichage des articles trouves dans la recherche multicritères.*********************]
      2. <div id="resultat_recherche">
      3.         <div id="nouvelle_recherche">
      4.         <a href="#URL_RUBRIQUE" title="Nouvelle Recherche">Nouvelle recherche</a>
      5.         </div>
      6.                 [(#REM) On rappelle les mots clés sélectionnés par l'utilisateur. ]
      7.                 [(#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.]
      8.                 [(#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é".]
      9.                 #SET{ajouteun,1}
      10.                 #SET{addition,0}
      11.                 <B_motcleM>
      12.                 <div class="cartouche">
      13.                 <h1><:resultats_recherche:></h1>
      14.                 <p>&nbsp;</p>
      15.                 <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>
      16.                 <ol>
      17.                 <BOUCLE_motcleM(POUR) {tableau #ENV**{motcle}}>
      18.                         <p class="soustitre">
      19.                         <BOUCLE_multi(MOTS) {id_mot=#VALEUR}>
      20.                         <li>[(#TYPE|supprimer_numero)] : <em><a href="#URL_MOT">[(#TITRE|supprimer_numero)][(#LOGO_MOT|image_reduire{20,20})]</a></em></li>
      21.                         #SET{addition, #GET{addition}|plus{#GET{ajouteun}}}
      22.                         </BOUCLE_multi>
      23.                         </p>                           
      24.                 </BOUCLE_motcleM>
      25.                 </ol>
      26.                 </div>
      27.                                 [(#REM) Puis on construit le tableau qui contient tous les articles qui correspondent à au moins 1 mot clé sélectionné]
      28.                                 #SET{art_select,#ARRAY}
      29.                                 <B_select>
      30.                                 <BOUCLE_select(POUR) {tableau #ENV**{motcle}} >
      31.                                 <BOUCLE_ARTICLESSELECT(ARTICLES) {id_secteur=38} {id_mot=#VALEUR} >
      32.                                 #SET{art_select, #GET{art_select}|push{ #ID_ARTICLE }}
      33.                                 </BOUCLE_ARTICLESSELECT>
      34.                         </BOUCLE_select>
      35.                                 </B_select>
      36.                                 <//B_select>
      37.                                 [(#REM) Pour afficher le résultat du tableau, ajouter ici  [(#GET{art_select}|foreach)]   ]
      38.                                 [(#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) ]
      39.                                 #SET{un, 1}
      40.                                 #SET{compteur_1, #ARRAY}
      41.                                 #SET{compteur_2, #ARRAY}
      42.                                 #SET{compteur_3, #ARRAY}
      43.                                 #SET{compteur_4, #ARRAY}
      44.                                 <B_rangement>
      45.                                 [(#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).]
      46.                                 <BOUCLE_rangement(ARTICLES) {id_article IN #GET{art_select}}>
      47.                                 [(#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.]
      48.                                 #SET{compteur_sup,0}
      49.                         [(#REM) Pour chaque article qui passe, on récupère l'id de l'article dans la variable article ci-dessous.]
      50.                         #SET{article,#ID_ARTICLE}
      51.                                                 [(#REM) on regarde dans le tableau art_select si le même article apparaît plusieurs fois.]
      52.                                                 [(#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 ;]
      53.                                                 [(#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.]
      54.        
      55.                                                 <BOUCLE_ingr(POUR) {tableau #GET{art_select}}>
      56.                                                         [(#REM) #VALEUR correspond à un #ID_ARTICLE dans le tableau art_select (on peut l'afficher avec #CLE=>#VALEUR) .]
      57.                                                         [(#REM) On récupère l'id de l'article dans la variable valeur.]
      58.                                                 #SET{valeur,#VALEUR}
      59.                                                         [(#REM) Chaque fois que la soustraction des 2 id d'articles est égale à zéro, ça veut dire que les id étaient identiques.]
      60.                                
      61.                                                         [(#REM) On fait la soustraction.]
      62.                                                 #SET{dif, #GET{valeur}|moins{#GET{article}}}
      63.                        
      64.                                                 [(#REM) Si le résiultat = 0, alors on incrémente la variable compteur_sup de 1 grâce à son addition avec la variable un. ]
      65.                                                 [(#GET{dif}|=={0}|oui) #SET{compteur_sup, #GET{compteur_sup}|plus{#GET{un}}}]
      66.                                                         [(#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é.]
      67.                                                 [(#REM) On peut aussi afficher ici #GET{compteur_sup} pour vérifier combien il vaut.]
      68.                                        
      69.                                         </BOUCLE_ingr>
      70.                        
      71.        
      72.                                 [(#REM) Ci-dessous, j'ai une ligne par compteur numéroté.]
      73.                                 [(#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é.]
      74.                                 [(#REM) Chaque compteur numéroté est un tableau ARRAY vide au départ.]
      75.                                 [(#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.]
      76.                                 [(#REM) Ce nombre, c'est la valeur de compteur_sup. ]
      77.                                 [(#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. ]
      78.                                 [(#GET{compteur_sup}|=={4}|oui) #SET{compteur_4, #GET{compteur_4}|push{#ID_ARTICLE}}]
      79.                                 [(#GET{compteur_sup}|=={3}|oui) #SET{compteur_3, #GET{compteur_3}|push{#ID_ARTICLE}}]
      80.                                 [(#GET{compteur_sup}|=={2}|oui) #SET{compteur_2, #GET{compteur_2}|push{#ID_ARTICLE}}]
      81.                                 [(#GET{compteur_sup}|=={1}|oui) #SET{compteur_1, #GET{compteur_1}|push{#ID_ARTICLE}}]  
      82.                                 [(#REM) Mon formulaire contient 4 select, chacun pour un groupe de mots, les options des select c'est pour les mots du groupe).]
      83.                                 [(#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.]
      84.                                 [(#REM) C'est pour ça qu'ici j'ai fait 4 compteurs numérotés.]
      85.                                 [(#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.]
      86.                                 [(#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.).]
      87.                                 [(#REM) Mais intellectuelmlement, l'utilisateur ne peut suivre que si on lui propose que peu de critères-groupes de choix. ]
      88.                                 [(#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.]
      89.                                 [(#REM) L'important, c'est de s'organiser pour ne pas avoir trop de mots clés à gérer ici.]
      90.                                 [(#REM) Si je modifie mon formulaire, je dois ajouter (ou enlever des compteurs numérotés ci-dessous. ]              
      91.        
      92.                                 [(#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 />  ]
      93.                
      94.                
      95.                                 </BOUCLE_rangement>
      96.                                 </B_rangement>
      97.                                 <//B_rangement>
      98.                 [(#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).]
      99.                 [(#REM) Ca ne s'affiche pas au chargement de la page. ]
      100.                 [(#REM) Ca ne s'affiche que si la boucle motcleM est appelée (càd si on a cliqué sur le submuit du formulaire).]
      101.                 [(#REM) On affiche le nombre d'articles trouvés dans la boucle rangement.]
      102.                 <div class="cartouche">
      103. <hr />
      104.                 <h2>[(#_rangement:GRAND_TOTAL)] [(#_rangement:GRAND_TOTAL|>{1}|?{'articles trouvés :','article trouvé.'})] </h2>
      105. <hr />
      106.                 </div>
      107.                
      108.                 [(#REM) On affiche les articles trouvés en fonction des mots clés correspondants à ceux sélectionnés par l'utilisateur.]
      109.                 [(#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.]
      110.                 [(#REM) rappel #GET{addition}, c'est le Total des mots clés cochés dans la recherche.]
      111.                
      112.                         [(#REM) --------------- Affichage groupe 4: articles reliés à 4 mots clés. ---------------------]
      113.                         [(#REM) --------------------------------------------------------------------------------------- ]
      114.                         <B_affichage_groupe4>
      115. <div class="">
      116.                         [(#ANCRE_PAGINATION|vide)]
      117.                                 <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>
      118. <p>&nbsp;</p>
      119.                                 <ul>
      120.                                 <BOUCLE_affichage_groupe4(ARTICLES) {id_article IN #GET{compteur_4}} {par date} {inverse}  {pagination 5}>
      121.                                 <li>
      122.                                                 [(#LOGO_ARTICLE{#URL_ARTICLE}|image_reduire{50,50})]
      123.                             <a href="#URL_ARTICLE"><h3>[(#TITRE|supprimer_numero)]</h3></a>
      124.                             <small>[(#DATE|affdate_jourcourt)][, <:par_auteur:> (#LESAUTEURS)]</small>
      125.                     </li>
      126.                                         [(#REM) Ci-dessous, les mots clé sélectionnés qui sont associés à l'article.]
      127.                                         [(#REM) Pour que l'utilisateur sache sur la base de quel(s) mot(s) clé(s) cet article peut être intéressant à aller voir.]
      128.                                         <small>Mots correspondants : </small>
      129.                                         [(#REM) On reliste les mots clés sélectionnés par l'utilisateur, mais on ne les affiche pas de suite.]
      130.                                         <B_motcleM_gr_4>
      131.                                         <BOUCLE_motcleM_gr_4(POUR) {tableau #ENV**{motcle}}>
      132.                                        
      133.                                                         [(#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} .]
      134.                                                         <B_MC_selected_article_gr_4>
      135.                                                         <BOUCLE_MC_selected_article_gr_4(MOTS) {id_mot=#VALEUR} {id_article=#ID_ARTICLE}>
      136.                                                         <a href="#URL_MOT"><em><small>[(#TITRE|supprimer_numero)] - </small></em></a>
      137.                                                         </BOUCLE_MC_selected_article_gr_4>
      138.                                                         </B_MC_selected_article_gr_4>                                  
      139.                                
      140.                                         </BOUCLE_motcleM_gr_4>
      141.                                         </B_motcleM_gr_4>
      142. <br />
      143. <br />
      144.        
      145.                     </BOUCLE_affichage_groupe4>
      146.                                 </ul>
      147.                         [<p class="pagination">(#PAGINATION{page})</p>]
      148.                         <p>~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~</p>
      149.                         </div>
      150.                                 </B_affichage_groupe4>
      151.                                 [(#REM) <em>Pas d'articles reliés.</em> ]
      152.                                 <//B_affichage_groupe4>
      153.                         [(#REM) --------------- Affichage groupe 3: articles reliés à 3 mots clés. ---------------------]
      154.                         [(#REM) --------------------------------------------------------------------------------------- ]
      155.                         <B_affichage_groupe3>
      156. <div class="">
      157.                         [(#ANCRE_PAGINATION|vide)]
      158.                                 <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>
      159. <p>&nbsp;</p>
      160.                                 <ul>
      161.                                 <BOUCLE_affichage_groupe3(ARTICLES) {id_article IN #GET{compteur_3}} {par date} {inverse}  {pagination 5}>
      162.                                 <li>
      163.                                                 [(#LOGO_ARTICLE{#URL_ARTICLE}|image_reduire{50,50})]
      164.                             <a href="#URL_ARTICLE"><h3>[(#TITRE|supprimer_numero)]</h3></a>
      165.                             <small>[(#DATE|affdate_jourcourt)][, <:par_auteur:> (#LESAUTEURS)]</small>
      166.                     </li>
      167.                                         [(#REM) Ci-dessous, les mots clé sélectionnés qui sont associés à l'article.]
      168.                                         [(#REM) Pour que l'utilisateur sache sur la base de quel(s) mot(s) clé(s) cet article peut être intéressant à aller voir.]
      169.                                         <small>Mots correspondants : </small>
      170.                                         [(#REM) On reliste les mots clés sélectionnés par l'utilisateur, mais on ne les affiche pas de suite.]
      171.                                         <B_motcleM_gr_3>
      172.                                         <BOUCLE_motcleM_gr_3(POUR) {tableau #ENV**{motcle}}>
      173.                                        
      174.                                                         [(#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} .]
      175.                                                         <B_MC_selected_article_gr_3>
      176.                                                         <BOUCLE_MC_selected_article_gr_3(MOTS) {id_mot=#VALEUR} {id_article=#ID_ARTICLE}>
      177.                                                         <a href="#URL_MOT"><em><small>[(#TITRE|supprimer_numero)] - </small></em></a>
      178.                                                         </BOUCLE_MC_selected_article_gr_3>
      179.                                                         </B_MC_selected_article_gr_3>                                  
      180.                                
      181.                                         </BOUCLE_motcleM_gr_3>
      182.                                         </B_motcleM_gr_3>
      183. <br />
      184. <br />
      185.        
      186.                     </BOUCLE_affichage_groupe3>
      187.                                 </ul>
      188.                         [<p class="pagination">(#PAGINATION{page})</p>]
      189.                         <p>~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~</p>
      190.                         </div>
      191.                                 </B_affichage_groupe3>
      192.                                 [(#REM) <em>Pas d'articles reliés.</em> ]
      193.                                 <//B_affichage_groupe3>        
      194.                         [(#REM) --------------- Affichage groupe 2: articles reliés à 2 mots clés. ---------------------]
      195.                         [(#REM) --------------------------------------------------------------------------------------- ]
      196.                         <B_affichage_groupe2>
      197. <div class="">
      198.                         [(#ANCRE_PAGINATION|vide)]
      199.                                 <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>
      200. <p>&nbsp;</p>
      201.                                 <ul>
      202.                                 <BOUCLE_affichage_groupe2(ARTICLES) {id_article IN #GET{compteur_2}} {par date} {inverse}  {pagination 5}>
      203.                                 <li>
      204.                                                 [(#LOGO_ARTICLE{#URL_ARTICLE}|image_reduire{50,50})]
      205.                             <a href="#URL_ARTICLE"><h3>[(#TITRE|supprimer_numero)]</h3></a>
      206.                             <small>[(#DATE|affdate_jourcourt)][, <:par_auteur:> (#LESAUTEURS)]</small>
      207.                     </li>
      208.                                         [(#REM) Ci-dessous, les mots clé sélectionnés qui sont associés à l'article.]
      209.                                         [(#REM) Pour que l'utilisateur sache sur la base de quel(s) mot(s) clé(s) cet article peut être intéressant à aller voir.]
      210.                                         <small>Mots correspondants : </small>
      211.                                         [(#REM) On reliste les mots clés sélectionnés par l'utilisateur, mais on ne les affiche pas de suite.]
      212.                                         <B_motcleM_gr_2>
      213.                                         <BOUCLE_motcleM_gr_2(POUR) {tableau #ENV**{motcle}}>
      214.                                        
      215.                                                         [(#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} .]
      216.                                                         <B_MC_selected_article_gr_2>
      217.                                                         <BOUCLE_MC_selected_article_gr_2(MOTS) {id_mot=#VALEUR} {id_article=#ID_ARTICLE}>
      218.                                                         <a href="#URL_MOT"><em><small>[(#TITRE|supprimer_numero)] - </small></em></a>
      219.                                                         </BOUCLE_MC_selected_article_gr_2>
      220.                                                         </B_MC_selected_article_gr_2>                                  
      221.                                
      222.                                         </BOUCLE_motcleM_gr_2>
      223.                                         </B_motcleM_gr_2>
      224. <br />
      225. <br />
      226.        
      227.                     </BOUCLE_affichage_groupe2>
      228.                                 </ul>
      229.                         [<p class="pagination">(#PAGINATION{page})</p>]
      230.                         <p>~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~</p>
      231.                         </div>
      232.                                 </B_affichage_groupe2>
      233.                                 [(#REM) <em>Pas d'articles reliés.</em> ]
      234.                                 <//B_affichage_groupe2>        
      235.                         [(#REM) --------------- Affichage groupe 1: articles reliés à 1 mot clé. ---------------------]
      236.                         [(#REM) --------------------------------------------------------------------------------------- ]
      237.                         <B_affichage_groupe1>
      238. <div class="">
      239.                         [(#ANCRE_PAGINATION|vide)]
      240.                                 <h2>[(#_affichage_groupe1:TOTAL_BOUCLE)] [(#_affichage_groupe1:TOTAL_BOUCLE|>{1}|?{'articles ont','article a'})] une correspondance de 1 mot clé sur [(#GET{addition})] : </h2>
      241. <p>&nbsp;</p>
      242.                                 <ul>
      243.                                 <BOUCLE_affichage_groupe1(ARTICLES) {id_article IN #GET{compteur_1}} {par date} {inverse}  {pagination 5}>
      244.                                 <li>
      245.                                                 [(#LOGO_ARTICLE{#URL_ARTICLE}|image_reduire{50,50})]
      246.                             <a href="#URL_ARTICLE"><h3>[(#TITRE|supprimer_numero)]</h3></a>
      247.                             <small>[(#DATE|affdate_jourcourt)][, <:par_auteur:> (#LESAUTEURS)]</small>
      248.                     </li>
      249.                                         [(#REM) Ci-dessous, les mots clé sélectionnés qui sont associés à l'article.]
      250.                                         [(#REM) Pour que l'utilisateur sache sur la base de quel(s) mot(s) clé(s) cet article peut être intéressant à aller voir.]
      251.                                         <small>Mots correspondants : </small>
      252.                                         [(#REM) On reliste les mots clés sélectionnés par l'utilisateur, mais on ne les affiche pas de suite.]
      253.                                         <B_motcleM_gr_1>
      254.                                         <BOUCLE_motcleM_gr_1(POUR) {tableau #ENV**{motcle}}>
      255.                                        
      256.                                                         [(#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} .]
      257.                                                         <B_MC_selected_article_gr_1>
      258.                                                         <BOUCLE_MC_selected_article_gr_1(MOTS) {id_mot=#VALEUR} {id_article=#ID_ARTICLE}>
      259.                                                         <a href="#URL_MOT"><em><small>[(#TITRE|supprimer_numero)] - </small></em></a>
      260.                                                         </BOUCLE_MC_selected_article_gr_1>
      261.                                                         </B_MC_selected_article_gr_1>                                  
      262.                                
      263.                                         </BOUCLE_motcleM_gr_1>
      264.                                         </B_motcleM_gr_1>
      265. <br />
      266. <br />
      267.        
      268.                     </BOUCLE_affichage_groupe1>
      269.                                 </ul>
      270.                         [<p class="pagination">(#PAGINATION{page})</p>]
      271.                         <p>~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~</p>
      272.                         </div>
      273.                                 </B_affichage_groupe1>
      274.                                 [(#REM) <em>Pas d'articles reliés.</em> ]
      275.                                 <//B_affichage_groupe1>        
      276.                 [(#REM) Balises de fin de la boucle B_motcleM. ]
      277.                 </B_motcleM>
      278.                 <//B_motcleM>
      279.        
      280. </div> <!-- Fin de la div id="resultat_recherche" -->
      281. [(#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.

    Répondre à ce message

  • Le 23 février 2011 à 10:11, par Noisette En réponse à : Recherche multi-critère par mots-clés

    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

  • Le 1er novembre 2010 à 11:31, par pat47310 En réponse à : Recherche multi-critère par mots-clés

    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

  • Le 4 juin 2010 à 11:27, par Erto En réponse à : Recherche multi-critère par mots-clés

    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

  • Le 18 février 2010 à 15:45, par DD En réponse à : Recherche multi-critère par mots-clés

    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

  • Le 12 octobre 2009 à 12:10, par ? En réponse à : Recherche multi-critère par mots-clés

    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

    • Le 26 janvier 2010 à 00:52, par Fred En réponse à : Recherche multi-critère par mots-clé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

  • Le 6 mai 2009 à 22:03, par mike En réponse à : le plugin fonctionne-t-il sur spip 2 ?

    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

    • Le 1er décembre 2009 à 21:43, par Christophe Noisette En réponse à : le plugin fonctionne-t-il sur spip 2 ?

      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

  • Le 26 janvier 2009 à 08:48, par marjorie En réponse à : Recherche multi-critère par mots-clés

    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.

    • Le 9 novembre 2009 à 12:52, par François Daniel Giezendanner En réponse à : Recherche multi-critère par mots-clés

      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

    • Le 25 novembre 2009 à 18:29, par marjorie En réponse à : Recherche multi-critère par mots-clés

      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

  • Le 3 septembre 2009 à 15:17, par François Daniel Giezendanner En réponse à : Plugin Recherche multi-critère par mots-clés

    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

  • Le 2 septembre 2009 à 12:03, par François Daniel Giezendanner En réponse à : PLUGIN Recherche multi-critère par mots-clés

    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

Répondre à cet article

Qui êtes-vous ?

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 Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Transaction : créer des formulaires avec paiement en ligne

    13 mars 2011 – 32 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Transaction est une extension du plugin de création de formulaires Formidable pour concevoir des formulaires de paiement en ligne et les connecter aux principales API bancaires françaises. Présentation Transaction introduit 3 nouveaux types de (...)

  • Formulaire de contact avancé

    23 mars 2009 – 1041 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Un formulaire de contact configurable, avec de multiples options.

  • Squelette Multi-Saisons

    19 février 2009 – 226 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Un squelette qui change de couleurs suivant les saisons, un graphisme tout en rondeurs et de très nombreuses options.

  • JQuery Masonry

    15 août 2011 – <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Ce plugin est un portage pour Spip du plugin jQuery Masonry de David DeSandro : http://masonry.desandro.com/ Principe Ce plugin réorganise les blocs de votre page page d’après une grille (de manière verticale et horizontale) pour réduire au maximum (...)

  • Thélia

    26 juin 2007 – 835 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Une approche basée sur l’utilisation conjointe des deux logiciels SPIP et Thélia pour la réalisation de sites de publication et de vente en ligne