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,
Ce plugin est-il définitivement mort ?
C’est vraiment dommage de ne pouvoir l’utiliser sur les versions récentes de SPIP.
Bonjour,
Je vais aussi avoir besoin de cette fonctionnalité. Savez vous si ce plugin marche en spip 3 ? Avez vous essayé ? Y’a t’il des chances ou absolument aucune ?...
Merci !
le plugin marche en spip3, il sufffit de modifier le fichier xml pour mettre la bonne version
Par contre, je n’arrive pas à introduire le résultat de certaines rubriques.
J’ai les rubriques separes en 2 morceaux pour l’exemple
la boucle surrub pour les rubriques 1,2 et 3
Je l’ai copié en l’appelant surville pour les rubriques 4,5 et 6. L’affichage de la recherche avancée fonctionne, j’ai bien les lignes
limiter à la rubrique
limiter à la ville
mais dans mon résultat de recherche, seul 1 des 2 fonctionnent, l’autre le surville m’affiche tous les resultats quelque soit ma recherche.
si j’écris id_rubrique à la place de id_ville, c’est lui qui fonctionne mais non l’autre.
Quelqu’un peut me débloquer svp ?
Répondre à ce message
Bonjour,
Ce plugin est-il publié sur la zone ? Je ne l’ai pas trouvé. J’aurais aimé y participer, notamment pour l’ajout d’une recherche par branches, dates et groupes de mots, voire pour le porter en SPIP 3.
Bonjour,
Effectivement, le plugin n’est pas sur la zone. Vous pouvez le mettre si vous voulez.
Prévenez-moi, je mettrai le lien dans l’article.
@+
Hello, merci pour la réponse.
Je veux bien mettre le plugin sur la zone, mais j’ai peur de ne pas être en mesure de distinguer le trunk de la branche stable et des éventuelles branches correspondant aux versions 1.9 et 2.0. En l’occurrence je n’ai pas réussi à visualiser à quoi correspondaient les version « recherche-avancee-4 » et « recherche-avancee-5 ». Peut-être qu’il serait préférable que ce soit vous même qui fassiez cette 1re opération ? Je suis dispo pour aider si besoin :-)
Bonjour,
Ce qui change entre la 1.9 et la 2.x, c’est la possibilité en 2.x de faire recherche ? et donc de chercher sans entrer de chaine de recherche (on ne cherche alors que sur les critères) qui n’était pas disponible en 1.9. L’affichage de la page de recherche n’est pas exactement la même (ni les styles entre la -4 et la -5 qui sont d’anciennes versions).
Le plus simple est de ne prendre que la version 2.xx et d’abandonner la 1.9 en l’état...
Je verrai ce que je peux faire ce soir, ou demain...
@+
J’ai mis le plugin sur la zone... (version pour SPIP v2)
@+
Répondre à ce message
Bonjour,
J’aimerai savoir s’il est possible de combiné le plugin recherche avancée avec le plugin champs extra.
J’aimerai faire des champs de recherche spécifiques aux champs que je rajoute dans mes articles.
Comment est-ce que je peux dire à mon moteur de recherche avancée d’aller chercher l’information dans ma table article ?
Bonjour,
Le plugin utilise la recherche classique de SPIP mais je ne sûr qu’elle intègre les champs extra. Il faudrait demander sur le forum du plugin des champs extra.
@+
Merci pour cette réponse.
Est-il possible de récupérer plusieurs valeurs pour un même champs avec la recherche avancée ?
J’aimerai pouvoir récupérer « id_rubrique=4,9 » par exemple au lieu de « id_rubrique=4&id_rubrique=9 ».
J’ai essayé à partir d’un tableau mais, j’ai peut-être fait une erreur, car ça ne marche pas.
Si vous avez un conseil... Je suis tout ouïe^^
id_rubrique IN 4,9 devrait marcher ;-)
Oui mais le problème, c’est que je ne veux pas que ce soit toujours les mêmes rubriques.
C’est à l’internaute de choisir grâce au formulaire. Il sélectionne les rubriques qui l’intéresse et j’aimerai que les identifiants soient récupérer dans un tableau pour pouvoir être passé dans la recherche.
En fait, j’ai fait en sorte, qu’il puisse choisir une sous-rubrique de chaque rubrique. Donc je peux choisir la sous rubrique 1(id=2) de ma rubrique 1 et la sous rubrique 1(id=4) de ma rubrique 2. Mais dans l’url, j’obtiens « id_rubrique=2&id_rubrique=4 » et seule la sous rubrique id=4 est prise en compte.
Si je n’en choisi pas, j’obtiens « id_rubrique=2&id_rubrique= ». J’ai donc tous mes articles de toutes mes rubriques.
Une idée pour résoudre ce problème ?
Bonjour,
Vous devez changer les noms de vos champs (attributs name) car vous avez les même nom : id_rubrique, du coup la seconde écrase la première.
Il faut en nommer une id_rub1 et l’autre id_rub2 (par exemple). Vous aurez alors dans l’url id_rub1=1&id_rub2=4, donc deux variables à récupérer.
Ensuite, vous devrez les concaténer dans une liste dans la page appelée :
Puis dans votre boucle il faut le critère qui utilise le tableau :
Si id_rub2 est vide, il cherche dans la rubrique 1 et dans la 0 (valeur par déffaut). Or la 0 n’existe pas donc il ne cherche que dans 1...
Pour plus d’info, voir l’article sur la balise ARRAY : http://www.spip.net/fr_article4009.html
@+
Merci beaucoup pour cette réponse. Elle m’aide beaucoup mais ça ne marche pas encore.
J’ai suivi tes conseils pour le code et je récupère bien un tableau avec mes identifiants dans la boucle article :
AND ((articles.id_rubrique IN (2,0,11)))
(vu en debug).Mais le problème c’est que ma recherche prend en compte seulement le dernier critère (ici 11).
Et donc si je ne renseigne pas une 3° rubrique (comme par exemple :
AND ((articles.id_rubrique IN (2,0,0)))
) et bien ma recherche ne me renvoie rien du tout.As-tu encore un bon conseil à me donner ?
Bonjour,
Je n’ai pas vraiment d’idée, le critère IN est justement fait pour cela... (voir http://www.spip.net/fr_article4010.html).
Es-tu sûr d’avoir des réponse dans la rubrique 2 ?
Essaye en inversant et en commençant par la rubrique 11...
@+
jmv
C’EST BON !!!
J’ai trouvé l’erreur ! En fait, mes articles se trouvaient dans la sous-sous-rubrique de ma sous-rubrique et c’est pour ça que je ne pouvais pas les afficher (puisque je demandais les articles de ma sous-rubrique).
Merci beaucoup pour ton aide !
Tu m’as permis de résoudre un gros problème qui m’empêchait d’avancer !
Répondre à ce message
Petit problème à l’affichage. Lorsque l’on sélectionne une des deux options pas de soucis. En revanche, si je sélectionne les 2 options en pensant qu’il me restera les critères de l’un et l’autre cumulé (donc restriction) je me retrouve avec les résultats de l’un et les résultats de l’autre. Le tri n’est pas effectué.
Par exemple obtenir la liste des campings (mot clé du groupe type) dans le 03 (mot clé du groupe département). J’obtiens la liste de tous les campings et de tous les logements dans le 03.
Ma boucle d’affichage des articles :
Merci pour votre oeil éclairé :)
Bonjour,
Je confirme le critère utilisé correspond à mot1 OU mot2.
Pour une recherche ET voir le commentaire ici : http://www.spip-contrib.net/Recherc...
ou ici pour le mécanisme de sélection avec les mots-clés : http://www.spip.net/fr_article4139.html.
@+
Si je comprends bien je ne peux pas avoir les deux ? Une recherche sur un seul critère avec les réponses et une recherche avec les 2 critères et tri ?
Bonjour,
Vous pouvez avoir les deux mais c’est plus compliqué et il faut voir les liens que j’ai donné ou demander à la personne qui a fait la remarque sur http://www.spip-contrib.net/Recherche-avancee-sous-SPIP#forum449281 si elle a réussit à faire quelque chose.
@+
Répondre à ce message
Bonjour,
Tout d’abord bravo pour votre plugin.
J’essaie de l’intégrer à mon site pour limiter la recherche à une rubrique (recherche d’emploi)
je base mes entrées sur des groupes de mots clés et c’est bien utile.
Par contre j’aimerais me passer des résultats google-like mais lorsque j’esssaie tout plante. Que dois-je enlever exactement dans les fichiers ?
Merci de votre aide.
Désolée de vous réimportuner, mais pendant que j’y suis, je débute en spip et j’ai du mal à comprendre
le terme « surcharger »...
J’ai déjà mes propres css sur le site et donc j’ai fait comme vous l’indiquiez, copié une partie du code de votre « recherche.html » dans MON « squelette/recherche.html » et mis un de la recherche_avancée dans un squelette de mes rubriques.
Le formulaire "recherche avancées apparait bien mais ma recherche générale
n’est plus formatée comme avant et les résultats de la recherche avancée apparaissent sur la même page et débordent de mon cadre...
Je ne suis pas assez calée pour modifier tout ça n’est-il pas possible que la recherche avancée soit présente uniquement pour ma rubrique et change pas le champ « rechercher » de la page d’accueil du site ?
Merci encore beaucoup pour votre aide.
Bonjour,
Pour supprimer l’effet google_like, il suffit de supprimer la ligne 27 de
recherche_articles.html
, ou de le remplacer par[(#INTRODUCTION)]
si vous voulez un résumé de l’article.Si vous voulez limiter le choix à une seule rubrique, vous devez modifier le fichier
formulaires/recherche_avancee.html
. A la ligne 48, modifier la boucle pour n’avoir que votre rubrique :<BOUCLE_surrub(RUBRIQUES){id_rubrique=xx}>
Sinon, la recherche avancée remplace la recherche générale de SPIP, il est donc normal que le formatage ne soit plus le même. A vous de voir dans vos css ce qui provoque le débordement pour le corriger.
@+
Répondre à ce message
Bonjour,
Pour être complète, il faudrait que la recherche avancée permette également d’exclure certains résultats (mots ou mots-clés, rubriques, etc.) plutôt que de fonctionner seulement par restriction. Par exemple : actuellement on peut limiter une recherche aux rubriques sélectionnées, ce serait bien de pouvoir faire le contraire, soit chercher dans toutes les rubriques excepté celles sélectionnées. Est-ce envisageable ?
Merci, Gef
Bonjour,
Pour l’exclusion de mots-clés, cela est évoqué dans le forum : http://www.spip-contrib.net/Recherc....
On peut reproduire le mécanisme pour d’autres objets (rubriques, etc.).
@+
Répondre à ce message
Bonjour,
J’ai développé un site internet d’utiliser le plugin « Recherche multi-critère par mots-clés »
mais elle était incompatible nouvelles versions de SPIP et a vu la « Recherche avancée »
comme une bonne solution.
Donc je me demandais si vous pouviez m’aider, parce que je veux sur le mot-clé, au lieu il ya
de lister tous les mots clés de tous les groupes de mots clés, séparés font
par groupe et par où l’on peut choisir un mot clé à partir d’un groupe ou une combinaison
mot-clé pour chaque groupe de mots-clés ? Quelqu’un at-il cette fois ?
Merci !
Bonjour,
L’affichage des mots clés se fait dans le formulaire de recherche (fichier
formulaires/recherch_avancee.html
). Il y a là une boucle (_surmot
) qui « choisi » les mots-clés sur lesquels faire la recherche (dans le plugin, cette boucle affiche tous les mots-clés).Vous pouvez copier ce fichier dans votre répertoire squelettes/formulaires et modifier le comportement de la boucle pour afficher les mots-clés autrement.
Par exemple pour limiter aux mots-clés des groupes 2 et 3 :
@+
et si vous avez trois groupes de mots-clés et de créer trois nouveaux champs au lieu d’un ? J’ai essayé d’ajouter deux fois plus et en ajoutant les mots limiter_mot id_groupe dans 1, 2 id_groupe IN IN id_groupe et 3, et est apparue dans le squelette que je veux, mais il ne fonctionne que le premier : (
Bonjour,
Le problème est que les 3 mots-clés ont le même nom (
name="id_mot"
dans les select).Au final, un seul est envoyé à la page
recherche.html
.Vous devez avoir un nom pour chaque select afin de pouvoir les récupérer et modifier le fichier
recherche.html
etrecherche_articles.html
pour tenir compte de ces mots.Si vous avez 3 mots-clés (id_mot, id_mot2 et id_mot3), le code dans
recherche_articles.html
sera :... avec le problème qu’il faut sélectionner au moins un mot-clé car le paramètre optionnel
{id_mot?}
ne marche plus (ou alors il faut faire un test dansrecherche.html
comme pour la gestion de la note_ponderee qui renvoie vers un squelette différent)...En espérant que cela peut vous être utile...
@+
Il a travaillé, merci !
est de changer le filtre generer_url_site par generer_url_entite sur la ligne 150 du fichier recherche.html
Autre piste : http://www.spip-contrib.net/Critere-mots ?
Répondre à ce message
Bonjour et encore merci pour ce plugin !
J’ai installé ce plugin avec le plugin Fulltext et cela marche du tonnerre !
Cependant la présentation des résultats « Google Like » ne semble pas compatible avec les recherches booléennes. Par exemple sur la recherche « Il fait beau », il va présenter un extrait de l’article pour chaque mot demandé sans prendre en compte les guillemets ce qui peut troubler le visiteur.
J’aurai besoin de présenter un seul extrait de l’article présentant la séquence entière demandée, mais je ne vois pas comment faire...
En 2 mots : comment rendre compatible la présentation « Google Like » avec les opérateurs booléens du plugin « Fulltext » ?
Merci beaucoup ! ^^
Bonjour,
Désolé de répondre si tard (vacances de Noël oblige).
La solution se trouve dans le fichier « recherche_avancee_fonctions.php ». Le reformatage dans la fonction recherche_avancee_google_like découpe la recherche :
$qt = explode(" ", $query);
et on surligne mot par mot...Il faudrait un découpage plus intelligent pour conserver les guillemets...
@+
Merci pour cette réponse.
Répondre à ce message
Bonjour,
Super plugin ! Mais je fais fasse à un petit problème avec le filtre « google like » : tous les caractères spéciaux disparaissent (é|è|ê->e, ç->c, à->a...). Une solution, une idée ?
Autre petit désagrément, si l’on clique sur le lien « recherche avancée » depuis le formulaire de recherche, la chaîne saisie dans le champ recherche n’est pas transmise à la page de résultat dans le formulaire de recherche avancée (paramètre recherche vide dans l’url « &recherche= »).
Bonjour,
La recherche se fait (et s’affiche) sans accent... désolé...
Si vous faite une recherche (normale) et qu’ensuite vous cliquez sur recherche avancée, la chaîne de recherche est conservée. Si vous cliquez sur recherche avancée c’est la page vierge de la recherche qui s’affiche.
@+
Répondre à ce message
Bonjour,
J’ai déjà un peu travaillé avec SPIP mais je ne maitrise pas encore bien le langage. Je souhaiterai inclure dans mon site une rubrique qui serait uniquement composé de la recherche avancé, comme on voit dans marmiton.org par exemple, mais garder le « rechercher » simple sur le coté. Je pensais donc créer un article de forme spéciale : article_rechercheavance ( ça je sais faire ) et inclure le formulaire à l’intérieur de cet article, mais je ne sais pas comment faire ceci. Pouvez vous m’expliquer comment faire, ou m’indiquez une meilleure méthode pour réaliser ce projet ?
Cordialement.
Bonjour,
Il existe déjà une page dédiée à la recherche, c’est http://mon-site/spip.php?page=recherche&avancee=1. Il suffit de faire un lien dessus.
Je ne vois pas trop l’intérêt d’une rubrique dédiée à la recherche mais bon... la solution est ici : http://www.spip.net/fr_article3445.html.
Il vous suffit de créer un fichier rubrique=xx.html dans votre répertoire squelettes (où xx est le numéro de la rubrique de recherche) et d’y inclure la page de recherche avancée.
Un truc comme cela doit marcher en v2 :
@+
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 : |