IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

améliorer les données d'un moteur de recherche


Sujet :

JavaScript

  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Par défaut améliorer les données d'un moteur de recherche
    Bonjour,

    Alors voilà je suis un débutant en javascript. Je cherche à développer un moteur de recherche interne à un site internet. J'ai réussi à trouver un script de moteur, ça pas de problème, mais en plus du champ de recherche libre, je voudrais ajouter un bouton avec une liste de menus déroulants déjà prédéfinis.

    Voici le script de l'appel des fonctions qui premettent la recherche et l'affichage des résultats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    function SearchItem(txt) {
     
    	txt = unescape(txt);
    	txt = txt.replace(/\+/g," ");
    	var n=tjs_base.nb_item;
    	var indice=-1;
    	if (txt=="Saisir un mot clé") {alert("Entrez un mot pour la recherche"); }
    	else{	
    	    document.forms["tjs_search"].elements["mot"].value=txt;
    		var Z=""; var nb=0;
    		for (var i=0; i<n; i++) {
    			if (tjs_base[i].cle.toUpperCase().indexOf(txt.toUpperCase(),0)!="-1") {
    				Z+="<A target='"+tjs_base.target+"' href='"+tjs_base[i].page+"'>"+tjs_base[i].desc+"</A> <SMALL>("+tjs_base[i].page+")</SMALL><BR>"
    				nb++;
    			}
    		}
    		if (nb>0) {
    			if (nb==1) {Z="Un résultat trouvé pour la recherche sur [<B>"+txt+"</B>] : <BR>"+Z;}
    			else {Z=nb+" résultats trouvés pour la recherche sur [<B>"+txt+"</B>] : <BR>"+Z;}
    		}else{Z="Aucun résultat pour la recherche sur [<B>"+txt+"</B>]<BR>Vérifiez l'orthographe ou essayez un autre mot clé !";}
    		document.write(Z);
    	}
    }
     
    function TJS_Search(f) {
    	if (f.mot.value!=""){f.submit();}	
    }
     
    function TJS_PrintResult() {
    	var url=document.location.href;
    	if (url.indexOf("?mot=",0) > 0) {
    		var mot=url.substring(url.indexOf("?mot=",0)+5);
    		SearchItem(mot);
    	}
    }

    Voici maintenant le script de mon champ de recherche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <font size="-1" color="#000099">
            <input name="mot" size=20 maxlength=35 value="Saisir un mot clé" onFocus="if (this.value=='Saisir un mot clé') {this.value=''}" onBlur="if (this.value==''){this.value='Saisir un mot clé'}">
            </font>
    Et celui de mon bouton qui active la recherche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <INPUT TYPE="button" name="bouton" VALUE="Rechercher" onClick="TJS_Search(this.form)">
    Lorsque j'essaie donc de mettre un champ avec des requêtes prédéfinies, le message d'alerte "veuillez entrer un mot pour la recherche" (présent au début du script pour l'appel des fonctions) apparaît. Voici le script du bouton en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <select name="select" size="1" multiple onFocus="if (this.value=='Saisir un mot clé') {this.value=''}" onBlur="if (this.value==''){this.value='Saisir un mot clé'}">
              <option>1</option>
              <option>2</option>
              <option>3</option>
            </select>
    Quelqu'un d'expérimenté peut-il m'aider à corriger ce bug, et surtout à comprendre d'où il vient ?

    Encore merci d'avance

  2. #2
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Par défaut
    Salut

    Tu as ce message qui s'affiche, c'est bien ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (txt=="Saisir un mot clé") {alert("Entrez un mot pour la recherche"); }
    Donc ça veut dire que txt=="Saisir un mot clé"

    Dans ton select :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <select name="select" size="1" multiple onFocus="if (this.value=='Saisir un mot clé') {this.value=''}" onBlur="if (this.value==''){this.value='Saisir un mot clé'}">
    <option>1</option>
    <option>2</option>
    <option>3</option>
    </select>
    Le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onBlur="if (this.value==''){this.value='Saisir un mot clé'}"
    fait que si la valeur du select est vide, alors on met "Saisir un mot clé" à la place

    Pour finir, aucune option de ton select n'a de valeur, donc c'est toujours vide, donc on remplace toujours par "Saisir un mot clé" et donc message d'erreur.


    Essaie en remplacant ton select par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <select name="select" size="1" multiple onFocus="if (this.value=='Saisir un mot clé') {this.value=''}" onBlur="if (this.value==''){this.value='Saisir un mot clé'}">
    <option value="test 1">1</option>
    <option value="test 2">2</option>
    <option value="test 3">3</option>
    </select>

    Et n'oublie pas la balise CODE dans tes messages !

  3. #3
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Par défaut
    Bonjour,

    Merci tout d'abord pour ta réponse.

    J'ai remplacé mon select par le code select que tu m'a donné, mais rien n'y fait, le script 'alert' se met toujours en route lorsque j'active la recherche, j'ai donc le message "veuillez saisir un mot clé".

    Je me demande si il ne faut pas modifier la fonction de recherche qui existe déjà :

    <code>

    function TJS_Search(f) {
    if (f.mot.value!=""){f.submit();}
    }


    </code>


    En rajoutant une autre condition du style :

    <code>

    function TJS_Search(f) {
    if (f.mot.value!=""){f.submit();
    if (f.mot.value!="1"){f.submit();}
    }

    </code>

    Ou un truc du genre pour chaque valeur prédéfinie dans le champ de formulaire (j'ai pris là le chiffre 1 comme exemple).

    Qu'en penses-tu ?

  4. #4
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Par défaut
    Le soucis vient du fait que ton script attend une donnée dans le champ "mot" :

    C'est le champ "mot" du formulaire "f" qui est testé.

    Ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function TJS_PrintResult() {
    	var url=document.location.href;
    	if (url.indexOf("?mot=",0) > 0) {
    		var mot=url.substring(url.indexOf("?mot=",0)+5);
    		SearchItem(mot);
    	}
    }
    C'est le parametre "mot" de l'url qui est utilisé !

    Or ton select s'apelle "select" :

    Donc ça peut pas marcher...

    En passant, il vaut mieux eviter de donner des nom qui ont deja une signification aux controles HTML, appelles plutot ton select "motPredefini" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="motPredefini"

    Ensuite, la solution serait de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function TJS_Search(f) {
    	if ( (f.mot.value!="") || (f.motPredefini.value!="") )
            {
               f.submit();
            }	
    }
    et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function TJS_PrintResult() {
    	var url=document.location.href;
            var mot = "";
            var motPredefini = "";
    
            // On lit le mot passé en parametre dans l'URL
    	if (url.indexOf("?mot=",0) > 0) {
    		mot=url.substring(url.indexOf("?mot=",0)+5);
    	}
    
            // On lit le mot predefinit passé en parametre dans l'URL
    	if (url.indexOf("?motPredefini=",0) > 0) {
    		motPredefini=url.substring(url.indexOf("?motPredefini=",0)+12);
    	}
    
            // On recherche sur l'un ou sur l'autre :
           if (mot != "")
               SearchItem(mot);
           else
               SearchItem(motPredefini);
    }
    Mais très franchement, le script de recherche me parait être du bricolage : du javascript qui verifie des parametres dans un formulaire de la page, qui envoit cette page au serveur puis qui recupere les memes parametres dans l'URL... y'a moyen de faire beaucoup mieux et plus simple !

    En plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mot=url.substring(url.indexOf("?mot=",0)+5);
    Ca veut dire que si d'autres parametres sont à la suite, ça va les traiter comme faisant parti du même mot-cle... pas fameux !


    Du, le plus simple serait : lors de la selection d'un mot predefini dans la liste, charger la valeur de se mot dans le champ mot et envoyer le formulaire, en utilisant l'evenement onChange (ou onSelect, je sais plus) de la balise <select>

  5. #5
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Par défaut
    je te remercie de cette piste que je vais exploiter sur le champ

Discussions similaires

  1. base de données pour un moteur de recherche
    Par a.elidrissi dans le forum Autres composants
    Réponses: 10
    Dernier message: 22/05/2012, 15h32
  2. [MySQL] mettre le formulaire et les resultats d'un moteur de recherche sur la meme page
    Par VIRGINIE87 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/08/2010, 09h42
  3. Réponses: 4
    Dernier message: 03/08/2006, 16h25
  4. comment faire ma base de donnée pour un moteur de recherche
    Par HoB dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 04/05/2004, 15h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo