Seite 1 von 1
Volltextsuche
Verfasst: Di 11. Nov 2003, 11:01
von jacke
Hallo,
ich habe die Volltextsuche aus der 4.3 (glaube ich) im die 4.4 eingebaut. Funzt natürlich nicht. Ich bekomme nicht mal das Feld zum Eingeben des suchbegriffes.
Muss hier das Modul auch Datenbankmäßig angepasst werden?
$cfg zu con
oder zu $con
Danke!
Jacke
Verfasst: Di 11. Nov 2003, 11:08
von timo
Der ganze Code wäre eventuell ganz praktisch

Verfasst: Di 11. Nov 2003, 11:15
von jacke
Hier isser:
Code: Alles auswählen
/*Funktion:
Das Modul durchsucht Titel, Kommentar und Content nach den eingegebenen Suchbegriffen. Diese werden per ODER verknüpft.
Geschützte Seiten werden nur bei eingeloggtem User aufgelistet. Die Liste wird nach Anzahl der Treffer sortiert.
Konfiguration:
Schriftart Link und Text gelten jeweils für die Liste der gefundenen Seiten.
Zusatzangaben werden unter dem Link ausgegeben. Bei der Auswahl "Textausschnitt" werden die ersten 100 Zeichen ausgegeben.
Linkziel gibt das Target für den Link an, falls die Seiten in einem anderen Frame oder neuen Fenster angezeigt werden sollen.
Erweiterung:
Das Modul sollte noch um folgende Punkte erweitert werden:
- Anzahl der Links pro Seite einstellbar
- Abwechselnder Tabellenhintergrund einstellbar
- Variabel UND bzw. ODER Verknüpfung bei der Suche (für den User wählbar)
- zu durchsuchender Inhalt (Titel, Kommentar, Text) einstellbar (für User oder Konfiguration)
Falls mir jemand dabei helfen möchte oder das übernehmen möchte... bitte melden (ICQ: 95176001)
History:
04.07.2003 - Anpassung Contenido 4.3.1 Beta - Carsten Hallwachs c.ha@gmx.de
16.09.2002 - Fehlermeldung beseitigt, wenn ein Leerzeichen am Ende des Suchbegriffs stand (danke Svaen)
16.09.2002 - Statt der Zusammenfassung wurde der Titel angezeigt (danke Svaen)
16.09.2002 - Multisort erweitert. (danke Frank)
18.09.2002 - noch etwas MySQL-tauglicher gemacht durch das ersetzen von deutschen Umlauten (danke an Peter)
-------------------------------------------------------------------------------------------------------------------------------
*/
TITEL:
Suchmodul v1
BESCHREIBUNG:
Bietet eine Volltextsuche. Durchsucht Titel,Beschreibung und Content.
(c) webmaster@zu-hause.biz 16.09.2002
INPUT:
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:
<?php
echo "<center><table width=\"80%\" border=\"1\"><tr><td align=center>
<form name=\"suche\" method=\"POST\" action=\"".$auth->url()."\" >
<input type=\"text\" size=\"9\" style=\"width:120px\" name=\"suche\" value=\"$suche\">
<INPUT TYPE=\"submit\" VALUE=\"Suchen\"></FORM></td></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,B.idcat AS idcat,C.parentid AS parentid,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')";
$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&lang=$lang&parent=".$db->f("parentid")."&subid=".$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><a href=\"".$results[$i][link]."\" id=\"fontCMS_VALUE[0]\"";
if("CMS_VALUE[3]"){echo "TARGET=\"CMS_VALUE[3]\" ";}
echo ">".$results[$i][title]."</a> <span id=\"fontCMS_VALUE[1]\">(".$hits[$i]." Treffer)<BR>";
echo $results[$i][text]."</span></td></tr>";
}
} else { echo "<tr><td align=center>Keine passenden Seiten gefunden</td></tr>"; }
} else { echo "<tr><td align=center>Keine passenden Seiten gefunden</td></tr>"; }
}
echo "</table></center>";
?>
Jacke
Verfasst: Di 11. Nov 2003, 11:22
von timo
Funktioniert bei mir bestens. Hast du im Output-Bereich eine leere Zeile am Ende eingefügt?
Verfasst: Di 11. Nov 2003, 11:43
von gunwalt
kann ich bestätigen. Allerdings tauchen auf der Ausgabeseite zwischen den einzelnen Worten Pluszeichen auf, obwohl ich in der Vorkonfiguration unter Zusatzangaben "nichts" eingestellt habe.
Gruss
Guntram
Verfasst: Di 11. Nov 2003, 11:48
von timo
Da mußt du vor der Ausgabe des Textes ein "urldecode" einfügen -> daher kommen die Pluszeichen.
Verfasst: Di 11. Nov 2003, 11:58
von jacke
Danke, waren wohl die Leerzeilen - warum auch immer.
wenn nur alles so leicht wäre.
Jacke
Verfasst: Di 11. Nov 2003, 13:16
von gunwalt
Hallo Thilo,
das steht drin, wenn das die Zeile ist
case 2: $results[$num][text] .= substr(strip_tags(rawurldecode($db->f
("content"))),0,100)."...";
Gruss
Guntram
eine frage dazu,,,
Verfasst: So 13. Jun 2004, 13:35
von 00zwiebel
dieser beitrag ist zwar schon etwas älter aber vielleicht antwortet mir ja noch jemand:
kann man diese volltextsuche so modifizieren, dass das suchergebnis in einem anderen modul angezeigt wird. oder wenigstens in einer ganz neuen seite.
hat wohl irgendwas mit dem linkziel zu tun, aber wie definiere ich da. blank?
Verfasst: Do 15. Jul 2004, 17:21
von #ayshe
Also ich komme auch nicht mit dem Modul zurecht, und die Erklärung weiter oben hilft mir nicht bzw. ich verstehe irgendwas nicht.
Bei mir wird das Suchfeld nicht angezeigt.
Mein Output-Code sieht so aus:
Code: Alles auswählen
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : Volltextsuche
* Author : webmaster@zu-hause.biz
* Copyright :
* Created : 16-09-2002
* Modified : 04-07-2003
************************************************/
echo "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"8\">
<tr><td>Suchbegriff: <b>$suche</b><br></td></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,B.idcat AS idcat,C.parentid AS parentid,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')";
$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&lang=$lang&parent=".$db->f("parentid")."&subid=".$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>Seite: <a href=\"".$results[$i][link]."\" class=\"fontCMS_VALUE[0]\"";
if("CMS_VALUE[3]"){echo "TARGET=\"CMS_VALUE[3]\" ";}
echo "><b>".$results[$i][title]."</b></a> <span class=\"fontCMS_VALUE[1]\">(".$hits[$i]." Fundstellen)<BR>";
echo "<i>".$results[$i][text]."</i></span></td></tr>";
}
} else { echo "<tr><td>Keine Seiten gefunden</td></tr>"; }
} else { echo "<tr><tdKeine Seiten gefunden</td></tr>"; }
}
echo "</table>";
?>
Wär nett, wenn mir jemand helfen kann
Gruß,
#ayshe
Kommentar weglassen und alles klappt bestens
Verfasst: So 21. Nov 2004, 00:11
von Garfieldt
Hatte dasselbe Problem, nachdem ich den Kommentar weggelassen habe klappt jedoch alles bestens! Hier mein Output Code:
Code: Alles auswählen
<?php
echo "<center><table width=\"80%\" border=\"1\"><tr><td align=center>
<form name=\"suche\" method=\"POST\" action=\"".$auth->url()."\" >
<input type=\"text\" size=\"9\" style=\"width:120px\" name=\"suche\" value=\"$suche\">
<INPUT TYPE=\"submit\" VALUE=\"Suchen\"></FORM></td></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,B.idcat AS idcat,C.parentid AS parentid,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')";
$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&lang=$lang&parent=".$db->f("parentid")."&subid=".$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><a href=\"".$results[$i][link]."\" id=\"fontCMS_VALUE[0]\"";
if("CMS_VALUE[3]"){echo "TARGET=\"CMS_VALUE[3]\" ";}
echo ">".$results[$i][title]."</a> <span id=\"fontCMS_VALUE[1]\">(".$hits[$i]." Treffer)<BR>";
echo $results[$i][text]."</span></td></tr>";
}
} else { echo "<tr><td align=center>Keine passenden Seiten gefunden</td></tr>"; }
} else { echo "<tr><td align=center>Keine passenden Seiten gefunden</td></tr>"; }
}
echo "</table></center>";
?>
[/code]
Suche mit ohne + zeichen
Verfasst: So 21. Nov 2004, 00:23
von Garfieldt
Mit urlrecode sieht das ganze dann so aus:
Code: Alles auswählen
<?php
echo "<center><table width=\"80%\" border=\"1\"><tr><td align=center>
<form name=\"suche\" method=\"POST\" action=\"".$auth->url()."\" >
<input type=\"text\" size=\"9\" style=\"width:120px\" name=\"suche\" value=\"$suche\">
<INPUT TYPE=\"submit\" VALUE=\"Suchen\"></FORM></td></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,B.idcat AS idcat,C.parentid AS parentid,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')";
$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&lang=$lang&parent=".$db->f("parentid")."&subid=".$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><a href=\"".$results[$i][link]."\" id=\"fontCMS_VALUE[0]\"";
if("CMS_VALUE[3]"){echo "TARGET=\"CMS_VALUE[3]\" ";}
echo ">".$results[$i][title]."</a> <span id=\"fontCMS_VALUE[1]\">(".$hits[$i]." Treffer)<BR>";
echo urldecode($results[$i][text])."</span></td></tr>";
}
} else { echo "<tr><td align=center>Keine passenden Seiten gefunden</td></tr>"; }
} else { echo "<tr><td align=center>Keine passenden Seiten gefunden</td></tr>"; }
}
echo "</table></center>";
?>