Seite 1 von 1

Ausgabe von Suchergebnissen in einen anderen Container

Verfasst: Fr 29. Nov 2002, 20:32
von maec
Hallo alle zusammen,

ich bin grad dabei meinen ersten Versuch mit Contenido zu wagen und bin bisher ganz gut weit gekommen. Doch jetzt hab ich ein kleines Problem. Ich hab das Volltextsuche Modul eingebaut und es einem Container zugewiesen. Dieser ist in einer rechten Seitenleiste. Die Ausgabe erfolgt direkt unter dem Such-Form. Ich möchte aber die Ausgabe gerne in meinem mittleren Bereich ausgeben. Die Seite ist ohne Frames, nur durch Tabellen realisiert und dadurch "relativ" komplex.

Nach meiner Vermutung müsste die Seite neu aufgerufen werden und die Augabe der Suchergebnisse in einem anderen Container erfolgen.

Wie kann man das am besten realisieren???

Vielen Dank!

Verfasst: So 1. Dez 2002, 20:26
von Eisi
Als learning-by-doing-Laie würd mir folgendes zusammenbasteln und die Suchergebnisse in einen String schreiben und den an anderen Stelle ausgeben. Also bspw. statt echo "blablaa Suchergebnisse blabla" im Suchmodul, bloß $suchergebnis = "blablaa Suchergebnisse blabla" und an der Stelle wo es hin soll dann echo $suchergebnis.

Wenn der String leer ist, wird nichts ausgegeben. Der String kann auch das komplette Ausgabe-Layout (Tabellen, etc.) enthalten.

Wie sehen das die Profis? :)

Verfasst: So 1. Dez 2002, 21:33
von idea-tec
dann hast du das Problem, dass du den Content der Seite hast und dann die Suchergebnisse oder umgedreht...

was man natürlich auch machen kann ist, dass man in den Layouts die suchstring-abfrage und den content in eine else-if-abfrage packt ... entweder die suchabfrage (wenn gesetzt) oder den content...

Verfasst: Mo 2. Dez 2002, 16:43
von maec
Ja, ich glaube das mit der Varible und der If ... else Anweisung ist ne gute Idee. Ich hab auch mal ein paar Tage drüber geschlafen und da ist mir eingefallen, dass ja die Seite neu geladen wird. Ich dachte zwar an eine Java-Script Anweisung, aber warum einfach mit PHP wenn es auch umständlich geht :D

Ich werd mich gleich mal ransetzen und es mal ausprobieren. Wenn die Seite dann mal online ist, könnt Ihr ja das Ergebnis mal ansehen. Link folgt hier.

Vielen lieben Dank an Euch!

Bis bald

Verfasst: Di 3. Dez 2002, 13:08
von Sven777b
sorry dass ich mich erst jetzt melde...
ich hatte anfangs mal vor, zu dem Suchmodul auch ein Quicksearch-Modul einzubauen. Also einfach nur das Suchfeld.

letztlich teilst du das Suchmodul nur in zwei Teile:
Teil 1 (nur Eingabefeld):

Code: Alles auswählen

Kein Input

OUTPUT:
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></table>";
Teil 2 (das Suchmodul)

Code: Alles auswählen

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:
if($suche){
	echo "<center><table width=\"80%\" border=\"1\">";
	$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.idside AS idside,A.summary AS comment,B.idcat AS idcat,C.parentid AS parentid,D.value AS content,A.idsidelang AS sideid ";
	$sql .= "FROM $cfgTab_side_lang AS A,$cfgTab_cat_side AS B,$cfgTab_cat AS C,$cfgTab_content AS D ";
	$sql .= "WHERE A.idside=B.idside AND A.idsidelang=D.idsidelang 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 $cfgTab_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")."&idside=".$db->f("idside")."";
			$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>";
};
Nennen wir den ersten Teil mal "Eingabe" und den zweiten Teil mal "Ausgabe". Du kannst jetzt Eingabe und Ausgabe auf jeder Seite einbinden. Bei Frameset musst du entsprechend das Formular-Ziel ändern.
Durch die IF-Abfrage am Anfang des Ausgabe-Moduls erfolgt nur dann eine Ausgabe, wenn auch was in die Eingabe eingegeben wurde. Somit kannst du deine Suchfunktion überall anbieten.
Alternativ kannst du natürlich auch im Eingabe-Modul den FORM-Link ändern auf die normale front_content.php und dann idcat, idside und subid per hidden-Feld übergeben. Somit kannst du die Ausgabe der Suchergebnisse z.b. auf einer Unterseite einbauen. Wenn du die darüberliegende Kategorie noch versteckst bzw. Oflline schaltest, ist die Seite im normalen Betrieb unsichtbar.

Ich hoffe das klappt so wie ichs jetzt geschrieben habe - ich konnte es grad nich testen.

Verfasst: Sa 28. Dez 2002, 21:24
von ZIZO
@Sven777b
funktioniert einwandfrei

Verfasst: Fr 10. Jan 2003, 15:33
von JUG
Sven777b hat geschrieben:[...]Alternativ kannst du natürlich auch im Eingabe-Modul den FORM-Link ändern auf die normale front_content.php und dann idcat, idside und subid per hidden-Feld übergeben.[...]
Kannst du das büdde büdde für Dummies erklären? :roll:

Verfasst: Fr 10. Jan 2003, 18:30
von Sven777b
damit meinte ich , dass man den oberen Teil so gestalten kann:

Code: Alles auswählen

$ziel_idside = 10;
$ziel_idcat = 2;
$ziel_subid = $idcat;
echo "<center><table width=\"80%\" border=\"1\"><tr><td align=center> 
<form name=\"suche\" method=\"POST\" action=\"front_content.php\" > 
<input type=\"text\" size=\"9\" style=\"width:120px\" name=\"suche\" value=\"$suche\">
<input type=\"hidden\" name=\"idcat\" value=\"$ziel_idcat\">
<input type=\"hidden\" name=\"idside\" value=\"$ziel_idside\">
<input type=\"hidden\" name=\"subid\" value=\"$ziel_subid\">
<INPUT TYPE=\"submit\" VALUE=\"Suchen\"></FORM></td></tr></table>"; 
das hat quasi den Effekt, dass das Formular umgeleitet wird auf die angegebene Seite. Dort kannst du dann das Ausgabe-Modul platzieren.
id_cat und id_side bekommst du im Backend in der Seitenübersicht raus, indem du mal über einen Link zu der entsprechenden Seite fährst. Die Subid wird automatisch definiert, weil das meist die idcat ist, von der du kommst. subid wird nur für das Standard-Hauptmenü benötigt.

Suche Modul erweitert

Verfasst: Sa 15. Feb 2003, 12:47
von JSIT
Hallo!
ich habe die Version etwas erweiter um nicht die Seite suchen zu müssen per Maus ;-)

hier meine Quicksuche!

Code: Alles auswählen

TITEL: Suche Quick

INPUT:
echo "<select name=\"CMS_VAR[1]\" size=\"7\">";
if ("CMS_VALUE[1]" != 0) {echo "<option value=\"0\">--- aktuell ---</option>";} else {echo "<option value=\"0\" selected>--- aktuell ---</option>";}
$sql = "SELECT A.idcat, A.level, C.name FROM $cfgTab_cat_tree AS A, $cfgTab_cat AS B, $cfgTab_cat_lang AS C WHERE A.idcat=B.idcat AND B.idcat=C.idcat AND C.idlang='$lang' AND B.idclient='$client' ORDER BY A.idtree";
$db->query($sql);
while ($db->next_record()) {$spaces = "";
  for ($i=0; $i<$db->f("level"); $i++) {
  $spaces = $spaces . "&nbsp;&nbsp;";}
if ( $db->f("idcat") == "CMS_VALUE[1]") {echo "<option value=\"".$db->f("idcat")."\" selected>$spaces ".$db->f("name")."</option>";} else {echo "<option value=\"".$db->f("idcat")."\">$spaces ".$db->f("name")."</option>";}}
echo "  </select>";

OUTPUT:
$ziel_idcat = "CMS_VALUE[1]"; 
$ziel_subid = $idcat; 
echo "<form name=\"suche\" method=\"POST\" action=\"front_content.php\"> 
<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tr><td>
<input type=\"text\" size=\"9\" name=\"suche\" value=\"$suche\" id=\"sucheinputquick\"></td><td><INPUT TYPE=\"image\" SRC=\"".$cfgPathFrontendImg."suche.gif\" WIDTH=\"18\" HEIGHT=\"19\" BORDER=\"0\" VALUE=\"Suchen\" id=\"suchegoquick\"></td></tr></table>
<input type=\"hidden\" name=\"idcat\" value=\"$ziel_idcat\">
<input type=\"hidden\" name=\"subid\" value=\"$ziel_subid\">
</FORM>"; 
Ich habe einen neuen Strukturbaum angelegt mit den Hidden Seiten und leite die Suchergebnisse auf die Seite Suchen um, die unter "extern" liegen.
Ich habe alles mit CSS formatiert, so kann man das Design gut anpassen ;-)

Viel Spass
Jörg