Suche zeigt in Übersicht "0 Treffer" obwohls Treff

Gesperrt
schmitt197
Beiträge: 90
Registriert: Fr 14. Nov 2003, 17:56
Kontaktdaten:

Suche zeigt in Übersicht "0 Treffer" obwohls Treff

Beitrag von schmitt197 » Do 13. Okt 2005, 13:09

hi,

ich benutze untenstehendes Suchmodul in Contenido Version 4.4.4.
Es funktioniert alles wunderbar, ABER manchmal stimmt die Anzahl der angezeigten Treffer auf der Ergebnisseite nicht mit dem eigentlichen Ergebnis überein.

Z.B. suche ich nach "blabla" -> Ergebnisseite "Titel der Seite" (0 Treffer)
Wenn ich aber auf die gefundene Seite gehe, steht da mein gesuchter Text "blabla".

Hatte jmd. das Problem selbst schon mal und kann mir weiterhelfen?

Danke
thomas


INPUT:

Code: Alles auswählen

echo "
<table align=\"left\" cellpadding=\"0\" cellspacing=\"0\">
  <tr valign=\"top\">
    <td width=\"202\">Schriftart Link:</td>
    <td><select name=\"CMS_VAR[0]\" size=\"1\">";
    
	if ("CMS_VALUE[0]" != 0) {
		echo "<option value=\"0\">".$lngForm["nothing"]."</option>";
	} else {
		echo "<option value=\"0\" selected>".$lngForm["nothing"]."</option>";
	}
    
	for ($i=1; $i<=50; $i++) {
		if ( $i != "CMS_VALUE[0]" ) {
			echo "<option value=\"$i\">Font $i</option>";
		} else {
			echo "<option value=\"$i\" selected>Font $i</option>";
		}
	}
    
	echo "
	</SELECT></td>
  </tr>  <tr valign=\"top\">
    <td width=\"202\">Schriftart Text:</td>
    <td><select name=\"CMS_VAR[1]\" size=\"1\">";
    
	if ("CMS_VALUE[1]" != 0) {
		echo "<option value=\"0\">".$lngForm["nothing"]."</option>";
	} else {
		echo "<option value=\"0\" selected>".$lngForm["nothing"]."</option>";
	}
	
    for ($i=1; $i<=50; $i++) {
		if ( $i != "CMS_VALUE[1]" ) {
			echo "<option value=\"$i\">Font $i</option>";
		} else {
			echo "<option value=\"$i\" selected>Font $i</option>";
		}
	}
	
    echo "
	</SELECT></td>
  </tr>  <tr valign=\"top\">
    <td width=\"202\">Zusatzangaben: </td>
    <td><INPUT TYPE=\"radio\" NAME=\"CMS_VAR[2]\" VALUE=\"0\" ";
	
    if("CMS_VALUE[2]" == 0) { 
		echo "checked=checked"; 
	}
	echo "> nichts <br>
    <INPUT TYPE=\"radio\" NAME=\"CMS_VAR[2]\" VALUE=\"1\" ";
    
	if("CMS_VALUE[2]" == 1) { 
		echo "checked=checked"; 
	} 
	echo "> Kommentar <br>
    <INPUT TYPE=\"radio\" NAME=\"CMS_VAR[2]\" VALUE=\"2\" ";
    
	if("CMS_VALUE[2]" == 2) { 
		echo "checked=checked"; 
	} 
	echo "> Textausschnitt </td>
  </tr>  <tr valign=\"top\">
    <td width=\"202\">Linkziel: </td>
    <td><INPUT TYPE=\"text\" NAME=\"CMS_VAR[3]\" VALUE=\"CMS_VALUE[3]\"></td>
  </tr>
</table>";
OUTPUT:

Code: Alles auswählen

<?php
echo "<table width=\"217\" border=\"0\" style=\"background-color:#CFCFCF; border-top:0px; border-left:0px; border-right:0px; border-bottom:0px; border-color: #858584; border-style: dashed\">
<tr>
<td align=left style=\"background-color:#B3B3B3; border: 0px; padding-left:20px;height:14px\"><span style=\"color:white; font-family:Arial; font-size:11px\">SUCHE/SEARCH</span></td>
</tr>
<tr><td align=\"left\" valign=\"top\" style=\"background-color:#CFCFCF; border: 0px; border-color: #858584; border-style: dashed; padding:0px 10px 0px 0px\"><form name='suche' method='POST' action='front_content.php?idcat=76'>
<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">
	<tr>
         	<td><input type=\"text\" size=\"9\" style=\"width:120px\" name=\"suche\" value=\"$suche\" valign=\"bottom\"></td>
                 <td><INPUT type=\"image\" src=\"images/finden.gif\" valign=\"bottom\"></td>
         </tr>
</table>
</FORM></td></tr></table>";
?>
Das Suchergebnis wird auf einer eigenen Seite über diesen Code ausgegeben:

Code: Alles auswählen

 <?php
	         echo "<table border=0 cellpadding=0 cellspacing=0><tr>";
	         if($suche){
	         $suche = trim($suche);
	         $suchregexp = "(".str_replace(" ",")|(",$suche).")";
	         $s=ereg_replace("ü", "%FC",strtolower($suche));
	         $s=ereg_replace("ä", "%E4",$s);
	         $s=ereg_replace("ö", "%F6",$s);
	         $suchregexp .= "|$s";
	         $suchliste = explode(" ",strtolower($suche));

	         $sql = "SELECT
	         a.title AS title, a.idart AS idart, a.summary AS comment, a.idartlang AS idartlang,
	         b.idcat AS idcat,
	         c.parentid AS parentid,
	         d.value AS content
	         FROM
	         ".$cfg["tab"]["art_lang"]." AS a,
	         ".$cfg["tab"]["cat_art"]." AS b,
	         ".$cfg["tab"]["cat"]." AS c,
	         ".$cfg["tab"]["content"]." AS d
	         WHERE
	         a.idart = b.idart AND
	         a.idartlang = d.idartlang AND
	         b.idcat = c.idcat AND
	         c.idclient = '$client' AND
	         idlang = '$lang' AND
	         online='1' AND
	         (d.value REGEXP '$suchregexp' OR a.title REGEXP '$suchregexp' OR a.summary REGEXP '$suchregexp')";

	         $db->query($sql);
	         if ($db->num_rows() != 0){
	         for ($i=0; $i<$db->num_rows(); $i++) {
	         $db->next_record();
	         if ($auth->auth["uid"] == "nobody"){
	         $sql2 = "SELECT public FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".$db->f("idcat")."'";
	         $db2 = new DB_Contenido; $db2->query($sql2); $db2->next_record();
	         if($db2->f("public") == 0) continue;
	         };
	         $num = 0 + $db->f("idartlang");
	         $results[$num][link] = "front_content.php?client=$client&lang=$lang&parent=".$db->f("parentid")."&idcat=".$db->f("idcat")."&idart=".$db->f("idart")."";
	         $results[$num][title] = $db->f("title");
	         switch ("CMS_VALUE[2]") {
	         case 0: $results[$num][text] = "";break;
	         case 1: $results[$num][text] = $db->f("comment");break;
	         case 2: $results[$num][text] .= substr(strip_tags(rawurldecode($db->f("content"))),0,100)."...";
	         };
	         for($x=0;$x<count($suchliste);$x++){
	         $hits[$num] += substr_count(strtolower($db->f("title")), $suchliste[$x]) +
	         substr_count(strtolower($db->f("comment")), $suchliste[$x]) +
	         substr_count(strtolower($db->f("content")), $suchliste[$x]);
	         };
	         };
	         if(count($hits) > 0){
	         $hits = array_values($hits);
	         $results = array_values($results);
	         array_multisort ($results, SORT_DESC, SORT_NUMERIC, $hits, SORT_DESC, SORT_NUMERIC);
	         for ($i=0; $i<count($hits); $i++){
	         echo "<tr><td align=left><font size=\"-1\"><a href=\"".$results[$i][link]."\" class='text'";

	         echo ">".$results[$i][title]."</a></font> <span class='text'>(".$hits[$i]." Treffer)<BR>";
	         echo $results[$i][text]."</span></td></tr>";
	         };
	         } else { echo "<tr><td class='text' align=center>Keine passenden Seiten gefunden</td></tr>"; };
	         } else { echo "<tr><td class='text' align=center>Keine passenden Seiten gefunden</td></tr>"; };
	         };
	         echo "</table>";
	         ?>

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Do 13. Okt 2005, 14:47

Link zum Modul haett's auch getan. Das Problem wurde schon mal angesprochen/diskutiert, und wir sind damals zu keinem Ergebnis gekommen, soweit ich mich entsinne.

schmitt197
Beiträge: 90
Registriert: Fr 14. Nov 2003, 17:56
Kontaktdaten:

Beitrag von schmitt197 » Do 13. Okt 2005, 14:51

Danke für die Antwort.

das Originalmodul habe ich hier leider nimmer gefunden :-) , sonst hätte ich den Link gerne gepostet.

Wenns keine Möglichkeit gibt, muss ich die Anzeige der Treffer wohl komplett rausnehmen.

Danke
Thomas

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Do 13. Okt 2005, 14:53

oder du nimmst ein anderes Modul. ;-) Aber das, was ich gerade benutze, zeigt auch keine Trefferanzahl an ...

schmitt197
Beiträge: 90
Registriert: Fr 14. Nov 2003, 17:56
Kontaktdaten:

Beitrag von schmitt197 » Fr 14. Okt 2005, 15:12

hi,

es funktioniert doch.

Mir hat ein Kollege weiterhelfen können.

Es liegt an den Umlauten.

Mit diesem geänderten Code für den Output auf der Suchergebnisseite wird auch bei Umlauten die richtige Trefferanzahl ausgegeben.

Code: Alles auswählen

// old code:

//	         $hits[$num] += substr_count(strtolower($db->f("title")), $suchliste[$x]) +

//	         substr_count(strtolower($db->f("comment")), $suchliste[$x]) +

//	         substr_count(strtolower($db->f("content")), $suchliste[$x]);

// new code:

	         $hits[$num] += substr_count(strip_tags(rawurldecode(strtolower($db->f("title")))), $suchliste[$x]) +

	         substr_count(strip_tags(rawurldecode(strtolower($db->f("comment")))), $suchliste[$x]) +

	         substr_count(strip_tags(rawurldecode(strtolower($db->f("content")))), $suchliste[$x]);
Schönes Wochenende.

Thomas

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Fr 14. Okt 2005, 15:53

mmmmhhhhhh, es waere gut, wenn man beim Originalthread diese Antwort auch posten wuerde, aber da du leider nicht weisst, wo das war ... vielleicht finde ich die damalige Diskussion noch.

Gesperrt