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

  • 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