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> > <:info_rechercher:>> <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">« [(#RECHERCHE)][(#DESCRIPTIF)] »</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.
Discussions par date d’activité
11 discussions
Bonjour,
Il manque tout de même quelque chose d’important pour que le tout fonctionne correctement (peut-être ton système fonctionnait correctement avant la 2.0)
Dans la page recherche.html (celle qui affiche les résultats, pas le formulaire...), il faut ajouter un nouveau filtre à la boucle concernée afin que le critère que tu lui transmet à l’aide de ton formulaire modifié soit interprété. En respectant ton exemple, ça donnerait :
Dans cet exemple, j’ai mis « ? » après le critère traditionnel « recherche » et après « descriptif ». Cela permet de traiter tout de même la recherche, même si un seul des deux champs est complété...
Bien à vous !
Répondre à ce message
Voici, encore, une de mes réponses tardives... Il faut que tu créés un squelette recherche2.html et que tu appelles ce squelette dans tes autres squelettes. Maintenant, pour ce qui concerne la façon de créer la balise de recherche qui te permettra d’appeler ton squelette, jette un coup d’oeil sur cette doc : http://www.spip.net/fr_article903.html
Répondre à ce message
Bonjour mtfkarukera
Merci cette réponse.
Mais non, en fait l’idée c’est d’avoir 2 formes de recherche distinctes : dans l’entete de toutes les pages du site un champ de recherche simple qui exclut un secteur spécifique, et une page de « recherche avancée » qui restreint la recherche à un secteur spécifique et à certains champs extras.
Or le fait d’avoir d’avoir placé le fichier recherche.html dans le répertoire « squelettes/formulaires » altère le champ de recherche simple.
Donc la questions serait plutôt comment faire une recherche avancée en utilisant un autre nom de squelette que « recherche.html » ou bien comment faire un formulaire de recherche avancée qui renvoie vers une page resultat-recherche-avancee.html au lieu de recherche.html
En espérant être clair.
Merci bcp
Répondre à ce message
Bonjour
Bravo et merci pour ce tuto. Ca m’est vraiment très précieux.
Je bute à présent sur un nouveau problème :
Comment peut-on distinguer « recherche » de « recherche avancée » de telle sorte qu’on puisse utiliser le moteur de recherche natif de SPIP en mode simple et/ou utliser la recherche avancée sur un autre squelette en mode « recherche avancée » ?
Auriez-vous une idée de la méthode pour obtenir deux modes recherche ?
Merci bcp
Bonjour Mickael,
Si je l’ai bien comprise, ta question n’est pas en lien avec le plugin, mais plutôt liée au squelette. C’est justement en lien avec ce qui m’était dit précédemment. Ce tuto répond-t-il à ta demande ?
http://www.spip.net/fr_article3347.html
Sinon... Le moteur de recherche, dans sa présente version, permet déjà une utilisation en mode simple et une utilisation en mode avancé. Si aucun critère de « filtre » n’est sélectionné, le moteur de recherche se comporte comme le moteur natif de spip.
Répondre à ce message
Bonjour Livier,
Toutes mes excuses pour cette réponse très tardive. Je vais essayer de répondre, au mieux, à tes questions et je te remercie pour tes encouragements, que je perçoit en tant que tel, d’ailleurs.
Pour commencer, il faut, oui, travailler avec le dossier /squellettes. Les champs que j’utilise me sont propres. Il vaudrait mieux que tu t’intéresses au code que je donne dans l’article, à titre d’exemple.
Dans mon moteur de recherche, le champs #DESCRIPTIF contient des informations sur le CODE NSF des formations, mais cela ne te sera d’aucune utilité. Tu peux lui attribuer le label de ton choix (par exemple « TYPE DE NOIX DE COCO », « MOLECULE ACTIVE », « TAILLE DES BOUTONS DE FIEVRE » et j’en passe, selon ton intérêt. Il faut juste sélectionner le champs sql qui contient l’information que tu veux « filtrer » dans ta recherche. Ce peux être, aussi, un champs extra que tu aurais créé.
Oui, dans la page de résultat, je n’ai changé que le fil d’ariane.
Dans le fichier php, ce bout de code permet, si mes souvenirs sont bons (c’est Gaston qui l’a trouvé), de retenir le choix effectué dans l’environnement.
Voilà, n’hésites pas à me demander plus d’infos.
Répondre à ce message
Bonjour,
Je me suis inspiré de ton article, mais sans le comprendre entièrement ... et pour faire une recherche avancée utilisant mot clef et rubrique ;-)
Peux tu nous dire plus précisément ce que font les éléments de code que tu nous offre ?
- Dans le formulaire tu semble t’intéresser au DESCRIPTIF de chaque article (C’est quoi le code NSF ?)
- dans la page de résultat tu ne changes que le fil d’Arianne ?!?
- dans le fichier recherche.php, je ne comprend pas ce que tu fais :(
Même sans faire un plugin, tu peux encore nous aider, mais n’appelle pas ton zip « plugin ... » mais « exemple... »
Effectivement comme dit Phil, on doit mettre ces fichiers dans le répertoire « squelettes » qui est fait pour ça, l’explication dans ton article en sera simplifiée par rapport aux précautions que tu nous y donne actuellement.
Ces petites critiques sont des encouragements ...
Répondre à ce message
Phil, c’est bon. Je me suis documenté sur ce dossier /squelettes. En effet, c’est tout à fait ce qu’il faut faire. Je vais modifier le texte en fonction de cela. Je te remercie.
Romy, j’ai parlé de recherche « sans mot-clés » car, jusqu’ici, toutes les contribution que j’ai trouvé, autour de la création d’un moteur de recherche, consistait à exploiter la fonctionnalité « mots-clés » de spip. Le fait est que, dans le cas présent, il n’était pas possible, pour moi, de les utiliser (pas de façon aisée, en tout cas). J’ai dû faire « sans mots-clés ».
En définitive, le moteur de recherche « sans mot-clés » est un moteur de recherche qui ne se base pas sur la fonctionnalité « mots-clés » de spip pour faire une recherche avancée.
Je ne pense pas non-plus, si c’est bien ce que tu suggères, que cette appellation soit la plus adéquate. Je crois même avoir utilisé, en d’autres occasions, d’autres termes pour le décrire.
Que proposerais-tu comme appellation ? J’avoue ne pas en être satisfait non-plus...
Répondre à ce message
Qu’est-ce qu’une « recherche sans mots-clés » ???
Répondre à ce message
Salut Phil,
Excuse mon ignorance, mais je ne connais pas ce répertoire. Je ne l’ai pas dans mon répertoire spip.
Tu peux m’expliquer s’il te plaît. C’est quoi ce répertoire ? Faut-il le créer ? Comment reparamétré spip en fonction ? Quelles utilisations peut-on en faire ?
Je te remercie.
@+
Répondre à ce message
on n’est pas obligé de modifier le squelette de spip
il suffit de copier les fichiers dans /squelettes et les repertoires équivalents et il n’y a aucun risque
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 : |