Suche?

Klaus M.

Suche?

Beitrag von Klaus M. » Mo 7. Jul 2003, 11:11

Das neue Contenido sieht richtig klasse aus, aber was ich vermisse, ist eine Suche. Gibts da eigentlich ein Modul oder weiß jemand zufällig ein Script, dass man da einbinden kann und db-gestützte Inhalte ausliest?

Ciao
Klaus

suupamuh
Beiträge: 23
Registriert: Mi 2. Jul 2003, 14:38
Kontaktdaten:

Beitrag von suupamuh » Mo 7. Jul 2003, 11:43

Sowas such ich auch, hatte auch eine in dem Modularchiv gefunden, leider geht die aber nicht.

HansHansa
Beiträge: 13
Registriert: Sa 21. Jun 2003, 20:41
Kontaktdaten:

Beitrag von HansHansa » Mo 7. Jul 2003, 13:50

Hallo,

Es gab für die Version 4.2 ein Volltexsuche (Suchmodul v1.2), aber dieses Modul funktioniert nicht in der Version 4.3.1.
Auch das Modul "URhere" (zeigt den Pfad bis zum aktuellen Dokument an) funktioniert bei der Version 4.3.1 nicht.

Vielleicht wird es noch was.


Gruß Hansa

Gast

Beitrag von Gast » Di 8. Jul 2003, 22:01

Gibts denn keinen, der sich mal erbarmt und helfen kann? Stimmt schon, eine Suche wäre schon eine wichtige Sache ...

Nächtlicher Gruß
Sören

pit
Beiträge: 96
Registriert: Mo 14. Apr 2003, 10:28
Wohnort: Rotenhain
Kontaktdaten:

Beitrag von pit » Mi 9. Jul 2003, 08:43

BESCHREIBUNG:
Bietet eine Volltextsuche. Durchsucht Titel,Beschreibung und Content.
(c) webmaster@zu-hause.biz 16.09.2002
Suchmodul v1.2 für C4.2 von contenido-module.de

Versuch der Übernahme auf c431b von Pit 07.07.2003

Wahl der Fontgröße weggelassen, Datenbanktabellen angepasst.

INPUT:
echo "<table align=\"left\" cellpadding=\"0\" cellspacing=\"0\">
<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, 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><a href=\"".$results[$i][link]."\" class='text'";
if("CMS_VALUE[3]"){echo "TARGET=\"CMS_VALUE[3]\" ";};
echo ">".$results[$i][title]."</a> <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></center>";
?>



Bei mir funktioniert das so, bin allerdings nur Hobby-Programmierer, vielleicht konnte ich ja helfen.

Gruß Pit

Gast

Beitrag von Gast » Mi 9. Jul 2003, 09:49

Ja funktioniert. Aller besten Dank, aber schick das lieber mal an die Modulabteilung, damit es für alle leichter zu finden ist :D

suupamuh
Beiträge: 23
Registriert: Mi 2. Jul 2003, 14:38
Kontaktdaten:

Beitrag von suupamuh » Mi 9. Jul 2003, 09:53

Lassen sich die Ergebnisse wohl in einer anderen Seite anzeigen ? und wenn ja wie ? Weil da steht "Linkziel" ?

pit
Beiträge: 96
Registriert: Mo 14. Apr 2003, 10:28
Wohnort: Rotenhain
Kontaktdaten:

Beitrag von pit » Mi 9. Jul 2003, 14:36

Mit Link-Ziel ist wohl eher target='_blank' oder ähnliches gemeint (also neue leere Seite)

siehe Code

if("CMS_VALUE[3]"){echo "TARGET=\"CMS_VALUE[3]\"...


Gruß Pit

HansHansa
Beiträge: 13
Registriert: Sa 21. Jun 2003, 20:41
Kontaktdaten:

Beitrag von HansHansa » Mi 9. Jul 2003, 17:06

Hallo pit,

Herzlichen Dank, funktioniert PRIMA :lol:
Kann man auch die Ausgabe der Suchergebnisse ändern?
Also das die Ergebnisse dort angezeigt werden, wo normale Inhalt der Webseite ist?

Gruß Hansa

Kafkaesk
Beiträge: 55
Registriert: So 2. Mär 2003, 19:07
Wohnort: München
Kontaktdaten:

Beitrag von Kafkaesk » Do 10. Jul 2003, 07:25

Super, herzlichen Dank pit! :D

Gruß
Alexander

pit
Beiträge: 96
Registriert: Mo 14. Apr 2003, 10:28
Wohnort: Rotenhain
Kontaktdaten:

Beitrag von pit » Do 10. Jul 2003, 07:36

kleiner Wermutstropfen: Die Anzahl der Treffer die angezeigt wird scheint nicht zu stimmen, muss ich mir noch mal anschauen (vermutlich doppelte Datensätze in der Abfrage).


@Hansa: versteh ich noch nicht ganz: In der erscheinenden Trefferliste klicks Du den Beitrag an und der Artikel wird im Original-layout geöffnet.

Gruß Pit

Kafkaesk
Beiträge: 55
Registriert: So 2. Mär 2003, 19:07
Wohnort: München
Kontaktdaten:

Beitrag von Kafkaesk » Do 10. Jul 2003, 07:40

Stimmt, die Treffer selber sind korrekt, nur die Zahl in Klammern zeigt völligen Blödsinn an.

Danke_pit

Beitrag von Danke_pit » Do 10. Jul 2003, 22:05

Hit pit,

beste Arbeit. Ich hoffe Du wirst die Community noch weiter mit solchen Leckerbissen unterstützen. Dankeschön und Respekt!

Ich glaube was die Anderen meinen ist, ob man das Suchfeld z.B. in den Kopf einer Seite setzen kann und die Ausgabe der Treffer dann im Hauptcontentfeld erscheinen. Also das das Suchfeld auf jeder Seite verfügbar ist, wie z.B. bei www.spiegel.de (ganz oben rechts).

Meinst Du das Trefferproblem in den Griff zu bekommen? Wäre sehr goil.

HansHansa
Beiträge: 13
Registriert: Sa 21. Jun 2003, 20:41
Kontaktdaten:

Beitrag von HansHansa » Fr 11. Jul 2003, 06:11

Hallo pit,

Genau so meinte ich es.

Einen sonnigen Tag
Hansa

pit
Beiträge: 96
Registriert: Mo 14. Apr 2003, 10:28
Wohnort: Rotenhain
Kontaktdaten:

I'll do my very best!

Beitrag von pit » Fr 11. Jul 2003, 08:59

Erst mal vielen Dank für die Blumen, hab halt einfach bestehenden Code ein wenig verändert...

So, @Hansa u.a.:
Hab das mal in zwei Module aufgeteilt, also ein Eingabefeld im Kopfbereich, d.h. dort auch einen Container für das Modul platzieren.

Die Variable $suche wird dann hoffentlich an das zweite Modul übergeben, welches nur noch für die Trefferausgabe zuständig ist.

Hier Modul 1: (hab es mal Kopf-Eingabe-Suchmodul genannt)

INPUT (wie beim vorherigen Suchmodul)
echo "<table align=\"left\" cellpadding=\"0\" cellspacing=\"0\">
<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 "
<table border=\"0\">
<tr>
<td class='navigation' align='right'>
<form name='suche' method='POST' action='front_content.php?idcat=12'>
<input type=\"text\" size=\"12\" style=\"width:120px\" name=\"suche\" value=\"$suche\" class='navigation'>
<INPUT TYPE=\"submit\" VALUE=\"finden\" class='navigation'>
</FORM>
</td>
</tr>
</table>";
?>
//Ende OUTPUT

ACHTUNG:im form-tag muss action auf die Seite verweisen, die die Trefferliste ausgibt (bei mir idcat=12) (also die Ausgabeseite vorher definieren und idcat notieren und dort einfügen evtl. auch idart (wenn mehrere Seiten in der gleichen Kategorie vorkommen). hab dazu leider noch keine bessere Lösung. Evtl. später Auswahl über select-Feld)
Die Seite zur Anzeige der Trefferliste natürlich auch mit einem Container für Modul Ausgabe der Trefferliste ausstatten.

Modul für die Ausgabe der Trefferliste:
INPUT: kein

OUTPUT:
<?php
echo "<table><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><a href=\"".$results[$i][link]."\" class='text'";
if("CMS_VALUE[3]"){echo "TARGET=\"CMS_VALUE[3]\" ";};
echo ">".$results[$i][title]."</a> <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>";
?>

bei mir hat's so funktioniert!
aber vermutlich geht's noch einfacher. Ich hoffe ich hab's verständlich rübergebracht!

P.S. die Anzeige der Anzahl Treffer ist immer noch falsch, arbeite dran! :?

Gesperrt