Seite 1 von 1

Suchmodul inkl. Suchoptionen

Verfasst: Di 25. Okt 2005, 11:43
von sabsab
Hallo Zusammen!

Ok, Suchmodule gibt es schon einige und entsprechende Nachfragen.

Hat sich jemand schon an ein Suchmodul herangewagt, welches z.B. zur Volltextsuche auch noch Suchoptionen (wie die Suche hier im Forum) beinhaltet?

Sinn und Zweck:
Will suche verfeinern und Artikel ausgeben lassen, die zB. in einem bestimmten Zeitraum erstellt worden sind.

Danke und Gruß
sabsab

Verfasst: Di 25. Okt 2005, 12:06
von Halchteranerin
So eine Suche ist mir zumindest noch nicht begegnet ...

Verfasst: Di 25. Okt 2005, 16:53
von sabsab
Ok, Ansprüche etwas herunterschrauben:

Nutze folgendes Volltext-Modul, wie könnte ich dort ein Dropdown-Menü noch zusätzlich integrieren zB. mit den Kategorien: "groß, mittel, klein" und weitere Kategorien?
Diese Daten sollen in die Suche eingebunden werden.
Denn Nutzer sind häufig sehr ungeduldig und wollen geführt werden

Input (irgendwo soll da ein Fehler sein, funktioniert aber trotzdem)

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 '<form name="suche" method="POST" action="'.$auth->url().'"> 
<table width="100%" border="0" cellspacing="0" cellpadding="0"> 
<tr> 
<td width="70%"><p><input type="text" size="20" style="width:300px" name="suche" value="'.$suche.'" class="Input"><INPUT TYPE="submit" VALUE="Suchen" style="width:80px" class="subheadline"></p></td> 
</tr> 
<tr> 
<td colspan=2 class="text"><input type="radio" name="verknuepfung" value="und" checked>&nbsp;alle Begriffe müssen enthalten sein</td> 
</tr> 
<tr> 
<td colspan=2 class="text"><input type="radio" name="verknuepfung" value="oder">&nbsp;mindestens ein Begriff muss enthalten sein</td> 
</tr> 

</table></center> 
</FO'.'RM>'; 
if($suche){ 
echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">'; 

$ignore_konj = array("und","oder","als","wenn","auch","wo","wie"); 
$ignore_art = array("der","die","das","ein","eine"); 
$ignore = array("ich","du","er","sie","es","wir","ihr","sie"); 
$suche = trim($suche); 
$suchliste = explode(" ",strtolower($suche)); 
$suchliste = array_diff ($suchliste, $ignore_konj, $ignore_art, $ignore); 
$suche = trim(implode(" ",$suchliste)); 
if($verknuepfung=="oder"){ 
$suchregexp = "(".str_replace(" ",")|(",$suche).")"; 
$s=ereg_replace("ü", "%FC",strtolower($suche)); 
$s=ereg_replace("ä", "%E4",$s); 
$s=ereg_replace("ö", "%F6",$s); 
$suchregexp .= "|$s"; 
$sql = "SELECT A.title AS title,A.idart AS idart,A.summary AS comment,B.idcat AS idcat,D.value AS content,A.idartlang AS sideid "; 
$sql .= "FROM ".$cfg["tab"]["art_lang"]." AS A, ".$cfg["tab"]["cat_art"]." AS B, ".$cfg["tab"]["cat"]." AS C, ".$cfg["tab"]["content"]." AS D "; 
$sql .= "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'"; 
$sql .= " AND (D.value REGEXP '".$suchregexp."' OR A.title REGEXP '".$suchregexp."' OR A.summary REGEXP '".$suchregexp."')"; 
} else { 
$sql = "SELECT A.title AS title,A.idart AS idart,A.summary AS comment,B.idcat AS idcat,D.value AS content,A.idartlang AS sideid "; 
$sql .= "FROM ".$cfg["tab"]["art_lang"]." AS A, ".$cfg["tab"]["cat_art"]." AS B, ".$cfg["tab"]["cat"]." AS C, ".$cfg["tab"]["content"]." AS D "; 
$sql .= "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'"; 
while(list($key, $val) = each($suchliste)) { 
$suchregexp = "(".str_replace(" ",")|(",$val).")"; 
$s=ereg_replace("ü", "%FC",strtolower($val)); 
$s=ereg_replace("ä", "%E4",$s); 
$s=ereg_replace("ö", "%F6",$s); 
$suchregexp .= "|$s"; 
$sql .= " AND (D.value REGEXP '".$suchregexp."' OR A.title REGEXP '".$suchregexp."' OR A.summary REGEXP '".$suchregexp."')"; 
} reset($suchliste); 
} 
$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("sideid"); 
$results[$num][link] = "front_content.php?client=".$client."&la"."ng=".$lang."&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(urldecode($db->f("content"))),0,100)."..."; 
}; 
while(list($key, $val) = each($suchliste)) { 
$hits[$num] += substr_count(strip_tags(urldecode(strtolower($db->f("title")))), $val) + 
substr_count(strtolower(strip_tags(urldecode($db->f("comment")))), $val) + 
substr_count(strtolower(strip_tags(urldecode($db->f("content")))), $val); 
// echo $num.': '.$val.'='.$hits[$num].$db->f("content").'<br>'; 
}; reset($suchliste); 
}; 
if(count($hits) > 0){ 
echo '<tr><td class=text><b>Suchergebnisse</b> 
<br><b>für "'.$suche.'"<p> '; 

echo '</b></p></td></tr>'; 
$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 class=text><p><a href=\"".$results[$i][link]."\""; 
if("CMS_VALUE[3]"){echo "TARGET=\"CMS_VALUE[3]\" ";}; 
echo ">".$results[$i][title]."</a> (".$hits[$i]." Treffer)<BR>"; 
echo $results[$i][text]." <a href=\"".$results[$i][link]."\""; 
if("CMS_VALUE[3]"){echo "TARGET=\"CMS_VALUE[3]\">";}; 
echo "><img  src=\"upload/icons/mehr.gif\" border=\"0\"><hr width=\"100%\" color=\"#FFCC66\" size=\"1\"></a></td></tr>"; 
}; 
} else { echo "<tr><td align=left class=text><p><b>Keine passenden Seiten gefunden</b></p></td></tr>"; }; 
} else { echo "<tr><td align=left class=text><p><b>Keine passenden Seiten gefunden</b></p></td></tr>"; }; 
echo '</table>'; 
} 
?>  
Danke und Gruß

Verfasst: Fr 4. Nov 2005, 17:28
von sabsab
hi zusammen!

hat denn keiner eine idee wie man ein solches suchmodul bastelt?
ist das wirklich so kompliziert für contenido?
... für mich leider unmöglich :cry:

gruß
sabsab