Recherche avancée - Sans Mots-clés

Comment créer son moteur de recherche avancée, sous spip, en utilisant les contenus des champs sql... Ou comment se passer des mots-clés dans son moteur de recherche.
IMPORTANT - ATTENTION : Nous espérons que d’autres développeurs plus chevronés nous aident à en faire un plugin propre.

J’ai parcouru le site (de façon non-exhaustive, je le crains) et je n’ai pas trouvé de contribution similaire à celle que je vais soumettre ici.

J’aurais souhaité que cette contribution soit le début de la création d’un plugin (chose que je ne sais pas faire) ou plutôt, de l’évolution d’un plugin existant (chose que je ne sais pas faire non plus).

Quoi qu’il en soit, voici quel était mon problème et quelle solution (la contrib) mon pote Gaston y a apporté.

Dans le cadre d’un portail spip que je développe, j’ai utilisé le plugin Import CSV pour importer de nombreux articles dans ma base de données (environ 800). Or il m’était impossible d’importer, en même temps, les mots-clés liés à chaque article et il était hors de question de saisir un à un les mots-clés de chaque article puisque le contenu de la base change à peu près chaque mois.

J’ai compris, qu’en principe, n’importe quel champ (qui ne soit susceptible de prendre qu’un nombre fini de valeurs), dans n’importe quelle table sql, représentait, potentiellement, un groupe précis de mots-clés bien identifiables.

Par conséquent, j’ai entrepris de modifier le plugin « Recherche Avancée 5 » pour l’adapter à mon besoin... Mais je n’y suis pas parvenu... Ou du moins, cela ne fonctionnait pas... D’où l’entrée en scène de mon pote Gaston qui, lui, à modifié directement le squelette, à défaut d’avoir réussi, lui non plus, à modifier le plugin. En tout cas, ça marche ! Enfin, à quelques exceptions près... On a un problème avec les champs contenant certains caractères spéciaux... je les ai supprimés et cela fonctionne bien.

L’idée maintenant, c’est de pouvoir en faire un plugin propre (en tout cas beaucoup moins artisanal que notre méthode), qui ne nécessite pas de toucher au squelette (ce qui posera, évidemment, quelques problèmes futurs, parfaitement prévisibles).

Voici la méthode qui a été appliquée :

Elle consiste, dans un premier temps, à copier les fichiers suivants, dans un répertoire /squelettes, à la racine du site : squelettes-dist/recherche.html, squelettes-dist/formulaires/recherche.html et squelettes-dist/formulaires/recherche.php. Il suffit, ensuite, de les modifier en suivant ces exemples :

POUR LE FICHIER : squelettes/formulaires/recherche.html

Il faut introduire, entre la deuxième et la troisième balise input, le code figurant dans l’exemple suivant. Ici, c’est le champ « DESCRIPTIF » qui a été sélectionné et il a pour contenu les codes NSF des formations (à titre d’exemple) :

	<B_surdescriptif>
    		<label>CODE NSF</label>
			<select name="descriptif" >
				<Option value="" style="color:silver">Tous</option>
<BOUCLE_surdescriptif(ARTICLES)>[<Option value="(#DESCRIPTIF|supprimer_tags|unique)" style="display:block" [(#ENV{descriptif}|=={#DESCRIPTIF|supprimer_tags}?{"SELECTED"})]>#DESCRIPTIF </option>]</BOUCLE_surdescriptif>
			</select>
    </B_surdescriptif>

Il faut recommencer cette manip, autant de fois que nécessaire, en changeant, bien sûr, le nom de la boucle et celui des champs, en les remplaçant par ceux des champs que l’on souhaite exploiter.

Ensuite...

POUR LE FICHIER : squelettes/recherche.html

Il faudra modifier le Fil d’Ariane, comme ceci (toujours en prenant le même exemple, moins les quelques personnalisations de polices que j’y ai introduites)...

[(#REM) Fil d'Ariane ]
		<div id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a> &gt; <:info_rechercher:>&gt; <strong class="on"> [(#RECHERCHE)] [(#DESCRIPTIF)]</strong></div>
		<div class="cartouche">
			<h1><span style="font-family: Comic Sans MS; text-transform: uppercase"><:resultats_recherche:></span></h1>
			<p class="soustitre">&#171;&nbsp; [(#RECHERCHE)][(#DESCRIPTIF)] &nbsp;&#187;</p>
		</div>

ENFIN, POUR LE FICHIER : squelettes/formulaires/recherche.php

Il faut rajouter une ligne, entre la ligne 26 et la ligne 27, comme ceci :

                        'surtitre' => _request('surtitre'),

Ca y est ! C’est fait ! Un joli moteur de recherche tout neuf qui permet de naviguer en fonction d’un contenu variable, dans un champ, et fonctionnel sur toutes les tables sql existant dans la base... It is good !

Mesdemoiselles, Mesdames, Messieurs... J’attends vos commentaires et vos propositions sur une création de plugin.

Une bonne partie des scripts présentés ici ont été adaptés à partir du plugin « Recherche Avancée 5 » de Viglino Jean-Marc. Voir ici : http://www.spip-contrib.net/Recherche-avancee-sous-SPIP

Regarder le moteur de recherche à l’action ICI

Discussion

11 discussions

  • Merci Yohann !

    Euh... Il y a comme un problème dans l’affichage de cette page. Le menu latéral apparaît en bas, à gauche, plutôt qu’à droite. C’est bizarre !

    Je m’excuse de n’avoir pas réagit depuis la dernière fois. Je suis occupé à refaire mon site pour l’adapter à la nouvelle version 2.09, suite au problème de sécurité identifé. J’en profite pour le faire évoluer un peu et je travaille toujours à l’amélioration du plugin.

    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