Présentation
Vous avez déjà remarqué l’option recherche avancée dans votre moteur de recherche favori... elle vous permet de limiter votre recherche à un certain nombre d’options... Malheureusement, votre SPIP en est dépourvu en standard. Cette contribution va remédier à cet état de fait.
Comment ça marche ?
La recherche de SPIP
Tout d’abord, remarquons que la recherche de SPIP (fichier dist/rechercher.html) est basé sur une boucle :
<BOUCLE_articles(ARTICLES) {recherche} {par points} {inverse} {pagination}>
Restreindre la zone de recherche
Il suffit donc d’y ajouter un argument rubrique pour limiter la recherche à la rubrique en question :
<BOUCLE_articles(ARTICLES){recherche}{par points}{inverse}{rubrique?}{pagination}>
Le « ? » permet de conserver le fonctionnement du squelette d’origine (si aucune rubrique n’est précisée). En fait, on utilisera plutôt {branche?}
pour une recherche dans la rubrique et ses sous-rubriques.
Vous pouvez faire l’essai : copier le fichier de la dist dans votre répertoire « squelettes », modifiez le, et lancez une recherche en ajoutant à la fin de la ligne &id_rubrique=1
pour vous limiter à la rubrique 1.
Usage de mot clef
De la même manière, on peut restreindre la recherche à un mot clé que l’on précisera lors de l’appel : {id_mot?}
Selon la durée
Maintenant, cherchons à introduire une condition sur la durée : c’est le critère age qui intervient, mais {age?}
ne marchera pas, à moins que l’on ne veuille une date en particulier. On cherche plutôt à avoir tous les articles parus après une date donnée, donc quelque chose comme {age<#ENV{depuis}}
où depuis a été passé en argument dans la recherche. Mais on perd le comportement initial du squelette (si on ne précise pas l’age en question). J’ai donc choisis une valeur par défaut : {age<#ENV{depuis,1E100}}
en espérant que personne n’aura écrit un article il y a plus de 1E100 jours ;-)
Par points
Enfin, notons que la recherche est triée par points, mais que l’on peut assez facilement utiliser un tri différent : {par #ENV{tri, points}}
en utilisant une variable passée dans l’environnement.
On peut donc facilement ajouter quelques critères à sa recherche SPIP.
Il reste à définir un formulaire pour envoyer la requête facilement...
Un formulaire de recherche avancée
Le formulaire en question est utilisé en lieu et place du formulaire standard dans le squelette de la recherche, à condition que l’option avancee=1
lui ait été envoyée. Il se présente ainsi :
Il a été placé dans le fichier formulaires/recherche-avancee.html afin que vous puissiez le modifier plus facilement et introduire les spécificités propres à votre site, car suivant la configuration de celui-ci, le nombre de rubriques ou de mots clé, vous aurez peut-être à le modifier, au risque d’avoir des menus à rallonge ou des critères qui ne vous satisferont pas.
Et pour y accéder plus facilement, j’ai placé un lien dans le fichier formulaires/recherche.html de la dist.
Finalisation
Mais que serait une bonne recherche sans une bonne présentation ? Pour cela, j’y ai introduit un filtre google_like (voir Google Like et Google Like II) et j’ai transformé les points SPIP en pourcentage plus lisible pour le commun des mortels.
Il ne restait plus qu’à ajouter deux image pour donner un peu de couleurs, faire un fichier de style pour une meilleur intégration dans votre site, mettre une icône dans la barre de recherche standard, un fichier de langue pour les traductions et à empaqueter le tout dans un plugin pour faciliter l’installation...
Et voilà le résultat ...
Remerciements
Merci à J-Ph Guihard pour la validation du code html, css et le passage en SPIP v2.xx, suite aux remarques sur le forum
Dernière mise à jour :
- 04/10/2010 Validation html et css, mise à jour du code pour SPIP 2.xx par J-Ph Guihard
- 19/01/2009 Ajout d’options sur les mots-clés (par groupe ou sans le mot clé...)
- 04/05/2008 Bug dans le fichier recherche_avancee_fonctions.php
- 05/09/2007 Problème d’affichage en version 1.9.3 dev
- 29/08/2007 Gestion des Résultats dans la langue de la requête suite aux remarques d’Abelass.
- 13/08/2007 Première version (1.9.2b)
Discussions par date d’activité
50 discussions
Bonjour,
est ce que ce plugin fonctionne tout de même sur spip 2.0 ?
Merci !
Répondre à ce message
bonjour, j’aime beaucoup cette contrib, j’ai réussi à modifier pour exclure des groupes de mot clé mais j’aimerai que ça ressemble aux pages de mon site (spip 2.01+eva web) et non à un formatage brut, je ne sais pas dans quel fichier bricoler et quoi bricoler.
est-il possible que ça figure dans un bloc plutôt qu’une page entière.
C’est pour ne pas égarer l’utilisateur.
Par ailleurs, si on ne met rien dans la recherche, ça serait pas mal que ça liste (pour les mots clé par exemple dans une rubrique).
Je suis débutant dans spip, css, html... pas facile....
Merci d’avance
Yvan
La recherche SPIP appelle la page recherche.html il vous suffit donc de la modifier pour qu’elle tienne compte du style de votre site.
Par contre SPIP ne sait pas rechercher une chaine vide... Il me semble que la v2 autorise une recherche conditionnelle, il faudrait alors mettre un ? dans le critère de recherche (dans le squelette, remplacer recherche par recherche ? mais je n’ai pas testé.
@+
Bonjour,
Je suis preneur de la méthode pour exclure certains groupe de mots clé dans le fichier recherche-avancee.html
Il me semble que ça doit se trouver là :
Bonjour,
Il suffit de lui préciser les groupes qu’on ne veut pas voir :
<BOUCLE_surgmot(GROUPES_MOTS){id_groupe!=10}>
ou
<BOUCLE_surgmot(GROUPES_MOTS){id_groupe !IN 5,10,12}>
par exemple...
Voir l’utilisation de critère IN dans les boucles.
@+
Répondre à ce message
Merci beaucoup, Jean-Marc.
Je me jette à l’eau, alors !
(je débute sur Spip, c’est passionnant mais les débuts sont un peu dur, dur :)
Bonjour, je cherche à modifier le fichier recherche-avancee.html pour exclure certains groupes de mots clés pour qu’ils n’apparaissent pas. Il me semble qu’il faudrait modifier ce code mais ne sait pas comment.
Idem pour exclure certains mots-clés mais ça doit être pareil.
Merci d’avance
Répondre à ce message
Bonjour,
Je vois que cette contrib est compatible spip 1.9.2.
Quelqu’un l’a-t-il déjà testée avec une version 2.0.10 ?
Testé sur SPIP2.02. Cela devrait marcher aux problèmes de mise en page près. Il faut revoir le css...
@+
Répondre à ce message
Bonjour,
J’ai installé le plugin et suivi les instructions pour obtenir une recherche avancée (c’est surtout la limitation des rubriques qui m’intéresse) mais quand je lance une recherche, aucun résultat apparait. Ma base de données est bien remplie pourtant.
Ma page apparait comme je l’ai habillée mais c’est au niveau fonctionnalité que ca ne marche pas.
Auriez-vous connaissance d’un bug à ce niveau ?
J’utilise une version 1.9.2 de spip.
Répondre à ce message
Je cherche à adapter à mon site, je rame un peu... Par contre, le truc bizarre c’est que la recherche classique (formulaire recherche dans page sommaire Eva-Web) ne fonctionne plus...
En tout cas, c’est un outil génial. Bravo
Bonjour,
Il se peut que Eva-Web surcharge déjà la fonction de recherche, ce qui peut provoquer des conflits avec le plugin...
Bon courage...
Répondre à ce message
Bonjour,
Nous rencontrons un problème de pagination sur notre site : seule la 1re page s’affiche...
Quand on clique sur un autre numéro de page de résultats, on affiche encore et toujours la 1re page.
Ex. page 2 de la recherche :
http://munci.org/spip.php?page=recherche&lang=fr&recherche=munci&debut_articles=7#pagination_articles
Voyez vous d’où le pbm peut venir ?
Merci !
Je dirais qu’il manque un passage de paramètre debut_articles dans le INCLURE de votre squelette de recherche :
Sinon, depuis la v2, le parametre env permet de transmettre tout l’environnement en ajax (voir http://www.spip.net/fr_article3753.html).
@+
Là je suis scotché... réponse positive 2 mns après mon post, vraiment bravo et merci !
J’en profite pour vous poser une dernière question : je constate qu’il y a à la fin des URL des pages trouvées le filtre ?var_recherche=(mot recherché)
N’est-il pas prévu un focus quelconque (highlight, surlignement...) du mot recherché dans ces pages ?
Ou bien alors avons-nous encore un petit pbm dans nos squelettes ?
Merci !
(et bravo pour cet excellent plugin)
Le mot recherché s’affiche dans un style particulier. Pour cela, il faut définir une classe spip_surligne dans son css (munci.css pour vous)...
Par exemple, pour surligner :
@+
Ok c’est corrigé pour çà, merci !
En fait je voulais parler du surlignement du mot recherché dans les articles...
Mais il est possible que ca soit écrasé par un autre style du squelette article.
Même punition... il faut passer l’environnement aux inclusions ;-)
Autre oubli de notre part en effet (honte)... merci.
Mais... pas de chance... malheureusement ca ne suffit pas ;-(
Répondre à ce message
Merci Jean-Marc,
j’ai réglé mon matter grace à vous. Je vous souhaite bonne continuation...
Répondre à ce message
Je n’ai pas malheureusement pas réussi à trouver, depuis l’interface de gestion, où créer un nouvel article pour le lier à celui-ci. J’ai parcouru les commentaires (de façon non-exhaustive, je le crains) et je n’ai pas trouvé de contribution similaire à celle que je vais soumettre ici.
Je voulais proposer que cette contribution soit le début de la création d’un plugin (chose que je ne sais faire) ou plutôt, de l’évolution du plugin existant (chose que je ne sais faire non-plus).
Quoi qu’il en soit, voici quel était mon problème et quelle solution (la contrib) que mon pote Gaston y a apporté.
Je développe un site, sous spip, bien sûr, pour recenser l’ensemble de l’offre de formation sur mon département... Jusqu’ici, cela n’intéresse personne...
Mais cela a son importance puisque, après avoir trouvé le moyen d’alimenter mon site en données, assez facilement (par un jeu de boucles et de plugins), j’étais coincé pour exploiter ces données dans le moteur de recherche natif de spip et je n’ai pas trouvé de plugins qui répondent exactement à mes besoins. Le plugin « Recherche Avancée » se rapprochait néanmoins beaucoup de la solution, excepté que je n’utilise pas de mots-clé.
Ce point de détails n’est pas anodin et renvoie à la nature de l’activité de mon site (recenser l’offre de formation)... qui prend son importance, désormais. Je travaille, en effet, depuis une base excel transmise par un partenaire, que je convertis en CSV et que j’importe dans ma base sql. Ce qui me permet de rédiger environ 800 articles, en quelques clics. J’ai rajouté quelques champs à la table « articles » pour l’aménager à mes besoins et j’ai affiché ces champs dans le fichier article.html de la dist. Dans ces conditions, il est, en effet, or de questions de tagger, un a un, les 800 articles qui, de toutes façons, changent à peu près chaque mois. Il me fallait donc trouver d’autres options de recherche pour naviguer « horizontalement » dans mon site spip.
J’ai compris, qu’en principe, n’importe lequel de ces champs (ne pouvant prendre, pour la plupart, qu’un nombre fini de valeurs) représentait, par conséquent, un groupe de mot-clés précis bien identifiables.
J’ai donc entrepris de modifier le plugin 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, à modifier directement le squelette (oui, je sais, c’est mal), à défaut d’avoir réussit, 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é 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 à modifier les fichiers suivants : squelettes-dist/recherche.html, squelettes-dist/formulaires/recherche.html et squelettes-dist/formulaires/recherche.php
POUR LE FICHIER : squelettes-dist/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 champs « DESCRIPTIF » qui a été sélectionné et il a pour contenu les codes NSF des formations (à titre d’exemple) :
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-dist/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 introduite)...
ENFIN, POUR LE FICHIER : squelettes-dist/formulaires/recherche.php
Il y 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 champs, et fonctionnel sur toutes les tables sql possibles... Is good !
Mesdemoiselles, Mesdames, Messieurs... J’attends vos commentaires et vos propositions sur une création de plugin. Peut-on faire migrer cette discution, si nécessaire, sur une nouvelle page ?
J’ai, finalement, réussi à créer l’article, où je le voulais. Il est proposé à la publication. Il est en mode preview, ici : http://www.spip-contrib.net/Recherche-avancee-Sans-Mots-cles?var_mode=preview
Merci à tous !
Répondre à ce message
Merci Viglino Jean-Marc,
ll me reste juste (pour l’instant) à modifier mes critéres de recherche (noms à coté des champs) pouvez vous m’indiquer le chemin svp ?
Autre chose, j’ai un projet qui prevoit la creation d’alerte mail genre site immobilier, est ce qu’avec le formulaire de contact avancé je pourrais m’en sortir ?
Merci encore une fois, spipement votre !!!!
Bonjour
Si vous voulez modifier les noms des champs, il vous suffit de modifier le fichier de langue : lang/recherche_avancee.fr.
Recopier le dans le fichier de votre squelette lang/local.fr (à créer si besoins) et modifier les noms. Eviter les accents ou codez les (é devient
´
) et les ’ que vous devez faire précéder de \.Par exemple :
'contenant' => 'Pages contenant le texte :',
devient :
'contenant' => 'votre texte :',
Pour le formulaire contact avancé, je n’ai jamais testé.
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 :
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.
Suivre les commentaires : |