Moteur de recherche : afficher le nombre de résultats

Résolu
loicseg Messages postés 168 Date d'inscription dimanche 26 février 2006 Statut Membre Dernière intervention 30 septembre 2011 - 1 juil. 2010 à 13:32
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 - 8 juil. 2010 à 19:29
[b]Bonjour,
j'ai récupéré le code source d'un moteur de recherche sur un site, que j'ai ensuite adapté pour qu'il soit plus beau, etc...
Cependant, je n'arrive pas à afficher le nombre de résultats trouvés lorsqu'une recherche est effectué. :s
Voici ma source (fichier "bdd.js") :/b


// appel de la fonction principal et formatage de l'apres reponse
function validate_form() {
text = document.form.search.value;
jsi = new makeLinks(linksize);
searchLinks(jsi, text);
document.write("<hr>");
document.write("[ + links[q].URL + " + links[q].Name + "]
");
document.write( links[q].Desc + "
");
document.write("
"+links[q].URL +"

");
document.write("
");
continue;
}
if (links[q].Desc.toLowerCase().indexOf(keyword) != -1) {
document.write("
");
document.write("
[ + links[q].URL + " + links[q].Name + "]
");
document.write( links[q].Desc + "
");
document.write("
"+links[q].URL +"

");
document.write("
");
continue;
}
if (links[q].Name.toLowerCase().indexOf(keyword) != -1) {
document.write("
");
document.write("
[ + links[q].URL + " + links[q].Name + "]
");
document.write( links[q].Desc + "
");
document.write("
"+links[q].URL +"

");
document.write("
");
continue;
}
if (links[q].URL.toLowerCase().indexOf(keyword) != -1){
document.write("
");
document.write("
[ + links[q].URL + " + links[q].Name + "]
");
document.write( links[q].Desc + "
");
document.write("
"+links[q].URL +"

");
document.write("
");
continue;
}
}
}


Merci d'avance pour votre aide qui me sera fort utile !

50 réponses

PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
5 juil. 2010 à 15:26
Bonjour,

j'y suis presque il me semble...
oui mais sans bien comprendre car
  if (Total =  = links[q]) // occurrence trouve
    count++; // Increment compteur
ne veut toujours rien dire

solution et explication ? svp
Déjà largement données au cours de ce topic

Parfois il est utile de poser ses valises pour mieux les reprendre

ci dessous en clair ce que tu cherches à faire...
//  =================================================
DEBUT FONCTION ( LINKS : Tableau , MotCle : CHAINE)
  
  DECLARATION et INITIALISATION Compteur à 0
  
  ECRITURE_DOCUMENT de l'Entête

  POUR TOUS les Indices du Tableau LINKS
  
    SI TROUVE MotCle DANS LINKS.CATEGORIE[Indice en Cours] ALORS
      ECRITURE_DOCUMENT des Infos du Lien
      INCREMENTATION du Compteur
      CONTINU à Indice Suivant
    FIN SI
    
    SI TROUVE MotCle DANS LINKS.DESCRIPTION[Indice en Cours] ALORS
      ECRITURE_DOCUMENT des Infos du Lien
      INCREMENTATION du Compteur
      CONTINU à Indice Suivant
    FIN SI  
    
    SI TROUVE MotsCle DANS LINKS.NAME[Indice en Cours] ALORS
      ECRITURE_DOCUMENT des Infos du Lien
      INCREMENTATION du Compteur
      CONTINU à Indice Suivant
    FIN SI    

    SI TROUVE MotsCle DANS LINKS.URL[Indice en Cours] ALORS
      ECRITURE_DOCUMENT des Infos du Lien
      INCREMENTATION du Compteur
      CONTINU à Indice Suivant
    FIN SI      
  
  FIN POUR
  
  RETOURNE le Compteur

FIN FONCTION


je ne penses pas pouvoir t'aider plus...
;O)
3
loicseg Messages postés 168 Date d'inscription dimanche 26 février 2006 Statut Membre Dernière intervention 30 septembre 2011
1 juil. 2010 à 13:38
Pour vous simplifier le travail, voici la source sans les sites :

// appel de la fonction principal et formatage de l'apres reponse
function validate_form() {
text = document.form.search.value;
jsi = new makeLinks(linksize);
searchLinks(jsi, text);
document.write("<hr>");
document.write("[ + links[q].URL + " + links[q].Name + "]
");
document.write( links[q].Desc + "
");
document.write("
"+links[q].URL +"

");
document.write("
");
continue;
}
if (links[q].Desc.toLowerCase().indexOf(keyword) != -1) {
document.write("
");
document.write("
[ + links[q].URL + " + links[q].Name + "]
");
document.write( links[q].Desc + "
");
document.write("
"+links[q].URL +"

");
document.write("
");
continue;
}
if (links[q].Name.toLowerCase().indexOf(keyword) != -1) {
document.write("
");
document.write("
[ + links[q].URL + " + links[q].Name + "]
");
document.write( links[q].Desc + "
");
document.write("
"+links[q].URL +"

");
document.write("
");
continue;
}
if (links[q].URL.toLowerCase().indexOf(keyword) != -1){
document.write("
");
document.write("
[ + links[q].URL + " + links[q].Name + "]
");
document.write( links[q].Desc + "
");
document.write("
"+links[q].URL +"

");
document.write("
");
continue;
}
}
}



Merci encore d'avance.
J'ai essayé avec un truc du genre :
total=0
if (w > -1) total += searchLinks(jsi, text);
}
document.write("</table>
Pages trouvé(s): "+total+"
</html>");

mais sans succés et en plus avec des erreurs...
0
loicseg Messages postés 168 Date d'inscription dimanche 26 février 2006 Statut Membre Dernière intervention 30 septembre 2011
1 juil. 2010 à 15:09
UP svp
PS : je ne sais pas si c'est possible, mais peut-on afficher les résultats sur plusieurs page avec ce genre de script ? Encore merci d'avance !
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
2 juil. 2010 à 18:37
Bonjour,
merci d'utiliser les balises de code, cela facilite la lecture.

Je vais répondre à la première question.
Dans ta fonction searchLinks, incrémente un compteur à chaque fois que tu as une occurrence, demande à la fonction de retourner cette valeur, si tu le demandes gentillement elle le fera sans problème, et dans la fonction appellante tu récupères la valeur à des fins d'affichage.


;O)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
loicseg Messages postés 168 Date d'inscription dimanche 26 février 2006 Statut Membre Dernière intervention 30 septembre 2011
2 juil. 2010 à 19:20
Merci pour ta reponse mais je ne my connais pas trop en javascript, jai surtout modifie ce ki concernai l'apparence avec les balise style. pourrais tu men dire plus ou eventuellement me donner un lien, jai regarder plusieurs site je ne comprend absolument pas comment installer ce que je veux... merci d'avance pour vos réponse et encore merci pour celle ci
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
2 juil. 2010 à 19:41
un petit exemple pour te montrer le mécanisme
<html>
<head>
<script type="text/javascript">
var T_Nombre = [1,2,3,5,2,4,5,6,9,7,3,0];
//-------------------------
function Affiche_Nbr( num_){
  //-- appel fonction et recup compteur
  var Nbr = Get_Nombre( num_);
  //-- Formattage sortie ecran
  var szTmp = "il y a " + Nbr +" chiffre " +num_ +" dans le tableau!";
  //-- Affichage resultat
  alert( szTmp);

}
//-------------------------
function Get_Nombre( num_){
  //-- compteur a zero
  var count = 0;
  //-- Parcours du tableau
  for( var i =0, Max = T_Nombre.length; i < Max; i++){
    if( num_ == T_Nombre[i])  // occurrence trouve
      count++;                // Increment compteur
  }
  //-- return le compteur
  return( count);
}
//-- Appel combien de 5 dans le tableau
Affiche_Nbr( 5);
</script>
</head>


</html>

à adapter à ton besoin...

;O)
0
loicseg Messages postés 168 Date d'inscription dimanche 26 février 2006 Statut Membre Dernière intervention 30 septembre 2011
2 juil. 2010 à 23:58
Merci pour cette réponse,
mon probléme en fait est que je ne sais pas comment définir la variable, je sais ce qu'est une variable, mais je ne sais pas comment la parametrer pour mon cas :s
la javoue que je bloque completement la dessus
0
loicseg Messages postés 168 Date d'inscription dimanche 26 février 2006 Statut Membre Dernière intervention 30 septembre 2011
3 juil. 2010 à 00:08
je pense qu'une certaine partie du code est déjà écrit dans ma source mais pour le reste j'ai vraiment du mal :S pourriez vous m'expliquer un peu plus comment réaliser ce que je veux sans forcément me donner un code deja pret mais plus de pistes pour que je comprenne, et ainsi progresser :) merci d'avance.
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
3 juil. 2010 à 09:01
Bonjour,
l'exemple que je t'ai fourni est, me semble t-il, autoporteur

c'est dans la fonction appelant la fonction searchLinks, dans ton cas validate_form, que tu défini ta variable Total
function validate_form() {
  txt = document.form.search.value;
  jsi = new makeLinks(linksize);
  //---------------------------------------------------------
  //-- Appel de la fonction searchLinks,
  //-- en retour Total vaudra le nombre d'occurrence trouvées
  //---------------------------------------------------------
  var Total = searchLinks(jsi, txt);
  // la suite de la fonction....
}

il va de soit que dans la fonction searchLinks il te faut gérer un compteur comme indiqué dans mon exemple précédent, afin que Total ne soit pas undefined...

;O)
0
loicseg Messages postés 168 Date d'inscription dimanche 26 février 2006 Statut Membre Dernière intervention 30 septembre 2011
3 juil. 2010 à 10:53
Voici ce que j'ai :
(jai retire les commentaires que je pense avoir compris)

function validate_form() {
text = document.form.search.value;
jsi = new makeLinks(linksize);
searchLinks(jsi, text);
var Total = searchLinks(jsi, text);
document.write("<hr>");
document.write("Nouvelle recheche
");
}

function Affiche_Nbr( num_){
var Nbr = Get_Nombre( num_);
//-- Formattage sortie ecran
var szTmp = "il y a " + Nbr +" chiffre " +jsi +" dans le tableau!";
document.write( szTmp);
}


//-- Appel combien d'occurence dans la bdd
Affiche_Nbr( jsi);

//-------

// La fonction de recherche elle-meme
function searchLinks(links, keyword){
var count = 0;
for( var i =0, Max = Total.length; i < Max; i++){
if( jsi_ == Total[i])
count++;
}
return( count);
}



ceci ne fonctionne toujours pas : en fait c pr affiche nbr je ne sais pas quoi mettre :s, je pense que je ne suis pas loin du code mais quelque chose ne vas toujours pas
0
loicseg Messages postés 168 Date d'inscription dimanche 26 février 2006 Statut Membre Dernière intervention 30 septembre 2011
3 juil. 2010 à 10:57
quand j'ecris :

var Total = searchLinks(jsi, text);

la fonction search links est appele deux fois :s
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
3 juil. 2010 à 17:30
Bonjour,
dans la fonction il y a un appel de trop
function validate_form() {
  text = document.form.search.value;
  jsi = new makeLinks(linksize);
  // searchLinks(jsi, text); ==============// LIGNE A SUPPRIMER //==
  var Total = searchLinks(jsi, text);
  document.write("<hr>");
  document.write("Nouvelle recheche
");
} 

la fonction Affiche_Nbr était la pour te montrer le principe des appels, elle n'a rien à faire dans ta source

c'est la fonction searchLinks qu'il faut que tu modifies pour qu'elle te retourne le nombre trouvé
// La fonction de recherche elle-meme
function searchLinks(links, keyword){
  //-- compteur a zero
  var count = 0;
  //-------------------------------------------
  // ICI tu fais tes tests et incrémentes count
  // à chaque fois que tu trouves une occurence
  //-------------------------------------------
  //-- En final on retourne le Nbr d'occurence
  return( count);
}

Total vaudra dans la fonction validate_form.

;O)
0
loicseg Messages postés 168 Date d'inscription dimanche 26 février 2006 Statut Membre Dernière intervention 30 septembre 2011
3 juil. 2010 à 21:33
Je galere vraiment :

function validate_form() {
text = document.form.search.value;
jsi = new makeLinks(linksize);
var Total = searchLinks(jsi, text);
document.write("<hr>");
        document.write(Total+"résultats");
   	document.write("Nouvelle recheche
");
}

function searchLinks(links, keyword){
var count = 0;
for( var i =0, Max = Total.length; i < Max; i++){
    if( links == Total[i])
      count++;         
  }
return( count);
}



je ne comprend pas ce qui ne va toujours pas
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
4 juil. 2010 à 00:17
mais pourquoi changes tu le contenu de ta fonction searchLinks, reprends celle que tu avais au début et rajoutes simplement le compteur...

;O)
0
loicseg Messages postés 168 Date d'inscription dimanche 26 février 2006 Statut Membre Dernière intervention 30 septembre 2011
4 juil. 2010 à 00:40
function validate_form() {
text = document.form.search.value;
jsi = new makeLinks(linksize);
var Total = searchLinks(jsi, text);
document.write("<hr>");
document.write(Total+"Nouvelle recheche
");
}

function searchLinks(links, keyword){


function Get_Nombre( links){
//-- compteur a zero
var count = 0;
//-- Parcours du tableau
for( var i =0, Max = Total.length; i < Max; i++){
if( links == Total[i]) // occurrence trouve
count++; // Increment compteur
}
//-- return le compteur
return( count);
}


aucune erreur générée (enfin il me semble) mais rien ne s'affiche...
desole je ne suis vraiment pas doué :s
0
loicseg Messages postés 168 Date d'inscription dimanche 26 février 2006 Statut Membre Dernière intervention 30 septembre 2011
4 juil. 2010 à 00:47
function validate_form() {
text = document.form.search.value;
jsi = new makeLinks(linksize);
var Total = searchLinks(jsi, text);
document.write("<hr>");
document.write(Total+" resultats
")
document.write("Nouvelle recheche
");
}

function searchLinks(links, keyword){


function Get_Nombre( links){
//-- compteur a zero
var count = 0;
//-- Parcours du tableau
for( var i =0, Max = links.length; i < Max; i++){
if( Total == links[i]) // occurrence trouve
count++; // Increment compteur
}
//-- return le compteur
return( count);
}


toujours sans erreur mais j'obtiens : undefined
0
loicseg Messages postés 168 Date d'inscription dimanche 26 février 2006 Statut Membre Dernière intervention 30 septembre 2011
4 juil. 2010 à 00:53
je ne vois pas d'autre moyen :

function validate_form() {
text = document.form.search.value;
jsi = new makeLinks(linksize);
var Total = searchLinks(jsi, text);
document.write("<hr>");
document.write(Total+" resultats
")
document.write("Nouvelle recheche
");
}

function searchLinks(links, keyword){


function Get_Nombre( links){
  //-- compteur a zero
  var count = 0;
  //-- Parcours du tableau
  for( var i =0, Max = Total.length; i < Max; i++){
    if( links == Total[i])  // occurrence trouve
      count++;                // Increment compteur
  }
  //-- return le compteur
  return( count);
}
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
4 juil. 2010 à 00:59
la fonction validate_form telque tu viens de l'écrire est conforme, à l'exception que tu n'affiches plus le total mais c'est un détail, il te faut ajouter
document.write("</table>
Pages trouvé(s): "+Total+"
</html>");
d'après ton script du début.

Pour la suite OUBLIES les fonctions que j'ai mis pour exemple et reprende la fonction searchLinks que tu avais au début du post, c'est dans celle ci que tu dois gérer le compteur...
je repétes
mais pourquoi changes tu le contenu de ta fonction searchLinks, reprends celle que tu avais au début et rajoutes simplement le compteur...

;O)
0
loicseg Messages postés 168 Date d'inscription dimanche 26 février 2006 Statut Membre Dernière intervention 30 septembre 2011
4 juil. 2010 à 01:04
function searchLinks(links, keyword){
  var count = 0;
  for (var i =0, Max = Total.length; i < Max; i++){
    if( links == Total[i])  // occurrence trouve
      count++;                // Increment compteur
  }
  //-- return le compteur
  return( count);
}


???
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
4 juil. 2010 à 01:10
Non
je parles de celle là
// La fonction de recherche elle-meme 
function searchLinks(links, keyword) {
  // la ligne d'en-tete de la reponse a la base de donnees 
  document.write("[ + links[q].URL +  " + links[q].Name + "]
");
      document.write(links[q].Desc + "
");
      document.write("
" + links[q].URL + "

");
      document.write("
");
      continue;
    }
    if (links[q].Desc.toLowerCase().indexOf(keyword) != -1) {
      document.write("
");
      document.write("
[ + links[q].URL +  " + links[q].Name + "]
");
      document.write(links[q].Desc + "
");
      document.write("
" + links[q].URL + "

");
      document.write("
");
      continue;
    }
    if (links[q].Name.toLowerCase().indexOf(keyword) != -1) {
      document.write("
");
      document.write("
[ + links[q].URL +  " + links[q].Name + "]
");
      document.write(links[q].Desc + "
");
      document.write("
" + links[q].URL + "

");
      document.write("
");
      continue;
    }
    if (links[q].URL.toLowerCase().indexOf(keyword) != -1) {
      document.write("
");
      document.write("
[ + links[q].URL +  " + links[q].Name + "]
");
      document.write(links[q].Desc + "
");
      document.write("
" + links[q].URL + "

");
      document.write("
");
      continue;
    }
  }
}



;O)
0
Rejoignez-nous