Volltextsuche für 4.4

fancypants
Beiträge: 10
Registriert: Do 12. Aug 2004, 15:14
Kontaktdaten:

Volltextsuche für 4.4

Beitrag von fancypants » Fr 3. Sep 2004, 13:09

hi leute

ich habe lange nach einer funktionsfähigen Volltextsuche auf dem Forum gesucht!! Doch ich wurde dann fündig und habe diese auch installiert und ein wenig geändert!!

Ich poste jetzt den code einfach mal, da vielleicht noch ein paar auf der suche nach einer volltextsuche sind:

VOLLTEXT-Suche mit Ausgabe im gleichen Fenster:
inkl. "Suchergebnis für "XXXX" Treffer:"X"

Vielleicht hilft es jemandem, vielleicht auch nicht :wink:

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>";

Code: Alles auswählen

OUTPUT:
<?php 

echo '
<font face="verdana" size="1">Suchen Sie etwas bestimmtes? Geben Sie einfach ein Stichwort ein!!<br><br>
<form name="suche" method="POST" action="'.$auth->url().'"> 
<table width="400" border="0" cellspacing="0" cellpadding="0"> 
<tr> 
<td width="270"><input type="text" size="50" name="suche" value="'.$suche.'"></td>
<td align="left"><button type="submit">suchen</button></td> 
</tr> 
</table><br>

</form>'; 
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){ 
//anzahl hits ausgeben
$anzahlhits = count($hits);
echo '<tr><td><font face="verdana" size="2">Suchergebnisse für <b>"'.$suche.'"</b> Treffer: <b>'.$anzahlhits.'</b></td></td>'; 
$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 style=\"text-align:left; padding-bottom:5px;\"><a href=\"".$results[$i][link]."\""; 
if("CMS_VALUE[3]"){echo "TARGET=\"CMS_VALUE[3]\" ";}; 
echo ">".$results[$i][title]."</a> <br />"; 
echo $results[$i][text]; 

echo "</td></tr>"; 
}; 
} else { echo "<tr><td align=center><p><b>Keine passenden Seiten gefunden</b></p></td></tr>"; }; 
} else { echo "<tr><td align=center><p><b>Keine passenden Seiten gefunden</b></p></td></tr>"; }; 
echo '</table>'; 
} 
?>

Johannes W.
Beiträge: 19
Registriert: Sa 28. Aug 2004, 14:23
Wohnort: Karlsruhe
Kontaktdaten:

Nettes Modul, gefällt mir!

Beitrag von Johannes W. » Di 7. Sep 2004, 11:49

Ich werd mal versuchen das so umzubasteln, dass man von einem anderen Modul aus suchbegriffe eingeben kann, die dann an das bestehende Modul weitergereicht werden.

Susanne
Beiträge: 15
Registriert: So 20. Jun 2004, 14:30
Wohnort: Zürich - Schweiz
Kontaktdaten:

Beitrag von Susanne » Di 21. Sep 2004, 21:56

Hallo

Diese Suche habe ich in meine Site eingebaut und nun eine kleine Ergänzung zur besseren Erkennung der Begriffe im Outputteil:

$suche = trim($suche);
...vorher

while(ereg(' ',$suche))
{
$suche = ereg_replace(' ',' ',$suche);
}

...nachher
$suchliste = explode(" ",strtolower($suche));

Die while-Schlaufe eliminiert überschüssige Leerzeichen.
So werden zwei oder mehr Begriffe auch bei unmöglich viel Leerzeichen dazwischen gefunden.
Hilft halt immer noch nicht gegen Schreibfehler ;-)

Tschüss
Susanne

swelpot
Beiträge: 101
Registriert: Mo 26. Jul 2004, 20:42
Wohnort: Rhein-Main
Kontaktdaten:

nächste stufe

Beitrag von swelpot » Fr 24. Sep 2004, 15:18

Hallo zusammen,

erstmal danke an fancypants für den code...

habe hin bei mir auch eingebaut und noch ein weiteres mal erweitert. Vielleicht interessiert sich jmd. dafür...

Der Code selbst ist:
  • neu formatiert,
    ein paar Kommentare sind hinzugekommen,
    Susannes Erweiterung ist dabei (danke...),
    die Ansteuerung des Moduls ist aus anderen Modulen heraus problemlos möglich und
    die Ausgabe ist wie das Hauptnavigationsmodul über ein HTML-Template formatierbar (Klasse Template).

Zum Code:
Das Modul Volltextsuche kann für sich alleine verwendet werden. Der Suchstring wird im Textinput des Formulars eingegeben, das Ergebnis wird im gleichen Modul wieder ausgegeben. Dabei wird es entsprechend den beiden Templates formatiert.
Das Modul Volltextsuche Formular stellt nur das Formular zur Eingabe des Suchstring bereit. Es muss ein anderer Artikel existieren der auf einem Template basiert das o.g. Modul zur Ausgabe der Ergebnisse enthält. In der ersten Codezeile des Moduls Volltextsuche Formular muss der korrekte Link auf eben diesen Artikel angegeben werden.


Modul: Volltextsuche
Input:

Code: Alles auswählen

$linktarget = "CMS_VALUE[1]";
$extratext = "CMS_VALUE[2]";

if($linktarget == "") {
	$linktarget = "_self";
}
if($extratext == "") {
	$extratext = 0;
}
?>
<table>
	<tr>
		<td>Linktarget</td>
		<td>
			<select name="CMS_VAR[1]">
				<option value="_self"<? if(strcmp("_self", $linktarget) == 0) echo " selected"; ?>>gleiches Fenster (_self)</option>
				<option value="_new"<? if(strcmp("_new", $linktarget) == 0) echo " selected"; ?>>neues Fenster (_new)</option>
			</select>
		</td>
	</tr>
	<tr>
		<td>Zusätzlicher Text zum Artikellink</td>
		<td>
			<select name="CMS_VAR[2]">
				<option value="0"<? if($extratext == 0) echo " selected"; ?>>kein zusätzlicher Text</option>
				<option value="1"<? if($extratext == 1) echo " selected"; ?>>Artikelkommentar</option>
				<option value="2"<? if($extratext == 2) echo " selected"; ?>>Anfang des Artikeltextes</option>
			</select>
		</td>
	</tr>
</table>
<?
Output:

Code: Alles auswählen

<?php
//$linkziel = "front_content.php?idcat=15";
$linkziel = $auth->url();

$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"); 

$extratextLength = 200;


$suchtext = $_POST["suchtext"];
?>

<form name="suche" action="<?= $linkziel ?>" method="post">
	<table>
		<tr>
			<td><span style="font-size: 15px">Suche&nbsp;</span></td>
			<td><input name="suchtext" type="text" size="20" value="<?= $suchtext ?>"></td>
			<td><input name="submit" type="submit" value="Go"></td>
		</tr>
	</table>
</form>

<?php
$linktarget = "CMS_VALUE[1]";
$extratext = "CMS_VALUE[2]";

/* DB Instances */
$db = new DB_Contenido;
$db2 = new DB_Contenido;

/* Template Instance */
$tpl = new Template;


if($suchtext != "") {
	while(ereg('  ', $suchtext)) { 
		$suchtext = ereg_replace('  ', ' ', $suchtext); 
	} 
	$suchliste = explode(" ", strtolower($suchtext)); 
	$suchliste = array_diff($suchliste, $ignore_konj, $ignore_art, $ignore); 
	$suchtext = trim(implode(" ", $suchliste)); 

	if($verknuepfung == "oder") { 
		$suchregexp = "(" . str_replace(" ", ")|(", $suchtext) . ")"; 
		$s = ereg_replace("ü", "%FC", strtolower($suchtext)); 
		$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 " .
				"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 . "')"; 
	} // end if($verkuepfung)
	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 " .
				"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'";
					 
		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 . "')"; 
		} // end while
		reset($suchliste); 
	} // end else($verknuepfung)
	
	$db->query($sql); 
	
	if($db->num_rows() != 0){ 
		while($db->next_record()) { 
			if ($auth->auth["uid"] == "nobody"){ 
				$sql2 =	"SELECT " .
							"public " .
						"FROM " .
							$cfg["tab"]["cat_lang"] . " " .
						"WHERE " .
							"idcat = '" . $db->f("idcat") . "'";
				$db2->query($sql2);
				
				if($db2->next_record()) { 
					if($db2->f("public") == 0) {
						continue;
					} // end if(public)
				} // end if(next_record)
			} // end if(auth nobody)
			
			$num = 0 + $db->f("sideid"); 
			$results[$num][link] = "front_content.php?" .
										"client=" . $client .
										"&lang=" . $lang .
										"&idcat=" . $db->f("idcat") .
										"&idart=" . $db->f("idart"); 
			$results[$num][title] = $db->f("title"); 
			
			//anzuzeigenden Text ermitteln
			switch($extratext) { 
				case 0:
					$results[$num][text] = "";
					break; 
				case 1:
					$results[$num][text] = $db->f("comment");
					break; 
				case 2:
					$results[$num][text] = capiStrTrimSentence(strip_tags(urldecode($db->f("content"))), $extratextLength) . "...";
					break; 
			} // end switch
			 
			while(list($key, $val) = each($suchliste)) { 
				$hits[$num] +=	substr_count(strtolower(strip_tags(urldecode($db->f("title")))), $val) + 
								substr_count(strtolower(strip_tags(urldecode($db->f("comment")))), $val) + 
								substr_count(strtolower(strip_tags(urldecode($db->f("content")))), $val); 
			} // end while
			
			reset($suchliste); 
		} // end while(next_record)
	
		if(count($hits) > 0) { 
			//anzahl hits speichern
			$anzahlhits = count($hits);
			 			
			$hits = array_values($hits); 
			$results = array_values($results); 
			array_multisort ($results, SORT_DESC, SORT_NUMERIC, $hits, SORT_DESC, SORT_NUMERIC); 
			
		} // end if(count hits)
	} // end if(num_rows)


	//Ausgabe-----------------
	
	/* Start Output buffer */
	ob_start();

	if(count($hits) > 0) {
		$tpl->reset();
		$tpl->set('s', 'SUCHTEXT', $suchtext);
		$tpl->set('s', 'TREFFER', $anzahlhits);
		
		for($i = 0; $i < count($hits); $i++) { 
			$tpl->set('d', 'ARTIKELNAME', $results[$i][title]);
			$tpl->set('d', 'TARGET', $linktarget);
			$tpl->set('d', 'HREF',  $results[$i][link]);
			$tpl->set('d', 'TEXT',  $results[$i][text]);
			$tpl->next();
		}
		$tpl->generate('templates/search_found.html');
	} // end if(count hits)
	else {
		$tpl->reset();
		$tpl->set('s', 'SUCHTEXT', $suchtext);
		$tpl->generate('templates/search_notfound.html');
	} // end else (count hits)
} // end if(suchtext)

/* Read out buffer */
$html = ob_get_contents();

/* Clean buffer */
ob_end_clean();

/* Output buffer-contents */
echo $html;
?>
Templatedateien(in /cms/templates kopieren)
search_found.html:

Code: Alles auswählen

<div>
	Suchergebnisse für "<span class="h4">{SUCHTEXT}</span>"
	<br>
	Anzahl Treffer: <span class="h4">{TREFFER}</span>
</div>
<br>
<!-- BEGIN:BLOCK -->
<div>
	<a href="{HREF}" target="{TARGET}" class="h4">{ARTIKELNAME}</a><br>
	{TEXT}
</div>
<br>
<!-- END:BLOCK -->
search_notfound.html:

Code: Alles auswählen

<div>
Es wurden keine mit Ihrer Suchanfrage "<span class="h4">{SUCHTEXT}</span>" übereinstimmenden Dokumente gefunden
</div>

Modul: Volltextsuche Formular
nur Output:

Code: Alles auswählen

<?php
$linkziel = "front_content.php?idcat=15";
//$linkziel = $auth->url();
?>

<form name="suche" action="<?= $linkziel ?>" method="post">
	<table>
		<tr>
			<td><span style="font-size: 15px">Suche&nbsp;</span></td>
			<td><input name="suchtext" type="text" size="20"></td>
			<td><input name="submit" type="submit" value="Go"></td>
		</tr>
	</table>
</form>

Viel Spaß damit...

Stefan
Zuletzt geändert von swelpot am Fr 1. Okt 2004, 09:09, insgesamt 1-mal geändert.

swelpot
Beiträge: 101
Registriert: Mo 26. Jul 2004, 20:42
Wohnort: Rhein-Main
Kontaktdaten:

noch eine veränderung

Beitrag von swelpot » Sa 25. Sep 2004, 10:29

Habe noch eine kleine Veränderung eingebaut.
Damit der Text bei zusätzlicher Anzeige des Contents nicht einfach hintereinander "geklatscht" wird, aber auch nicht unnötige Zeilenumbrüche dazwischen sind.
  • Es werden jetzt nicht mehr alle HTML-Tags entfernt, "<br>" "<br/>" und "<br />" bleiben erhalten,
    Textzeilenumbrüche (\r\n) werden durch <br /> ersetzt,
    vor dem ersten Zeichen werden alle Zeilenumbrüche rausgeschmissen und
    im Text werden mehrfach vorkommende Zeilenumbrüche durch einen einzelnen ersetzt.
Die Switchanweisung im Code (Zeile 136-147) wird durch folgendes ersetzt:

Code: Alles auswählen

//anzuzeigenden Text ermitteln
switch($extratext) { 
	case 0:
		$results[$num][text] = "";
		break; 
	case 1:
		$results[$num][text] = nl2br($db->f("comment"));
		break; 
	case 2:
		$results[$num][text] = capiStrTrimSentence(strip_tags(urldecode($db->f("content")), "<br><br/><br />"), $extratextLength) . "...";
		$results[$num][text] = nl2br($results[$num][text]);
		break; 
} // end switch
// unnötige Zeilenumbrüche entfernen
$results[$num][text] = preg_replace("/(?s)^(\<br(.?)(\/?)\>(\\r\\n)?(\&nbsp;|\040)*)+/", "", $results[$num][text]);
$results[$num][text] = preg_replace("/(?s)(\<br(.?)(\/?)\>(\\r\\n)?(\&nbsp;|\040)*)+/", "<br />", $results[$num][text]);
Grüße

Stefan

szeichner
Beiträge: 2
Registriert: Mi 13. Okt 2004, 14:04
Kontaktdaten:

Problem mit der Ausgabe

Beitrag von szeichner » Mi 13. Okt 2004, 14:24

Ich hab ein Problem mit der Ausgabe der Suchergebnisse.
Irgendwie krieg ich das mit Template-Klasse nicht gebacken (bin allerdings auch ein Contenido-Anfänger!!!!)

Nach dem Abschnitt im Output-Bereich:
/* Template Instance */
$tpl = new Template;

ist die Variablen $suchtext leer

In der errorlog.txt steht dann folgender Eintrag:
PHP Fatal error: Cannot instantiate non-existent class: template in C:\apachefriends\xampp\htdocs\contenido\cms\front_content.php(563) : eval()'d code on line 46

Würde mich freuen, wenn mir da jemand weiterhelfen könnte

Danke!

Stefan

swelpot
Beiträge: 101
Registriert: Mo 26. Jul 2004, 20:42
Wohnort: Rhein-Main
Kontaktdaten:

Beitrag von swelpot » Mi 13. Okt 2004, 17:01

aus welchem Grund auch immer ist die Klasse Template noch nicht bekannt... (da kenne ich mich auch zu wenig aus)

Versuchs mal mit der Zeile

Code: Alles auswählen

cInclude("classes", "class.Template.php");
vor der Zeile

Code: Alles auswählen

$tpl = new Template;
grüße

stefan

szeichner
Beiträge: 2
Registriert: Mi 13. Okt 2004, 14:04
Kontaktdaten:

Danke

Beitrag von szeichner » Mi 13. Okt 2004, 18:20

Vielen Dank, jetzt funktioniert's

Grüße
Stefan

Aixtraweb
Beiträge: 100
Registriert: Do 23. Sep 2004, 10:55
Wohnort: Herzogenrath
Kontaktdaten:

Neues Layout erstellt und Kategorien umgestellt ....

Beitrag von Aixtraweb » Di 26. Okt 2004, 20:44

Hallo,

ich hatte die Volltextsuche auch auf meiner Seite, habe dann einiges verändert an Layout und Struktur (z.B. die Servicenavigation herausgenommen (in der war die Suche vorher drinne!)) und nun funktioniert bei mir die Volltextsuche nicht mehr :cry:

Code: Alles auswählen

[26-Oct-2004 21:41:20] PHP Warning:  Failed opening '/home/httpd/vhosts/yogie.de/httpdocs/contenido/classes/class.Template.php' for inclusion (include_path='.:/usr/share/pear') in /home/httpd/vhosts/yogie.de/httpdocs/contenido/includes/api/functions.api.general.php on line 67
[26-Oct-2004 21:41:20] PHP Warning:  Cannot use a scalar value as an array in /home/httpd/vhosts/yogie.de/httpdocs/cms/front_content.php(563) : eval()'d code on line 810
[26-Oct-2004 21:41:20] PHP Warning:  Cannot use a scalar value as an array in /home/httpd/vhosts/yogie.de/httpdocs/cms/front_content.php(563) : eval()'d code on line 810
[26-Oct-2004 21:41:20] PHP Warning:  Cannot use a scalar value as an array in /home/httpd/vhosts/yogie.de/httpdocs/cms/front_content.php(563) : eval()'d code on line 810
[26-Oct-2004 21:41:20] PHP Warning:  Cannot use a scalar value as an array in /home/httpd/vhosts/yogie.de/httpdocs/cms/front_content.php(563) : eval()'d code on line 810
[26-Oct-2004 21:41:20] PHP Warning:  Cannot use a scalar value as an array in /home/httpd/vhosts/yogie.de/httpdocs/cms/front_content.php(563) : eval()'d code on line 810
[26-Oct-2004 21:41:20] PHP Warning:  Cannot use a scalar value as an array in /home/httpd/vhosts/yogie.de/httpdocs/cms/front_content.php(563) : eval()'d code on line 810
[26-Oct-2004 21:41:20] PHP Warning:  Cannot use a scalar value as an array in /home/httpd/vhosts/yogie.de/httpdocs/cms/front_content.php(563) : eval()'d code on line 810
[26-Oct-2004 21:41:20] PHP Warning:  Cannot use a scalar value as an array in /home/httpd/vhosts/yogie.de/httpdocs/cms/front_content.php(563) : eval()'d code on line 810
[26-Oct-2004 21:41:20] PHP Warning:  Cannot use a scalar value as an array in /home/httpd/vhosts/yogie.de/httpdocs/cms/front_content.php(563) : eval()'d code on line 810
[26-Oct-2004 21:41:20] PHP Warning:  Cannot use a scalar value as an array in /home/httpd/vhosts/yogie.de/httpdocs/cms/front_content.php(563) : eval()'d code on line 810
[26-Oct-2004 21:41:20] PHP Warning:  Cannot use a scalar value as an array in /home/httpd/vhosts/yogie.de/httpdocs/cms/front_content.php(563) : eval()'d code on line 810
[26-Oct-2004 21:41:20] PHP Warning:  Argument to array_values() should be an array in /home/httpd/vhosts/yogie.de/httpdocs/cms/front_content.php(563) : eval()'d code on line 822
[26-Oct-2004 21:41:20] PHP Warning:  Argument 4 to array_multisort() is expected to be an array or a sort flag in /home/httpd/vhosts/yogie.de/httpdocs/cms/front_content.php(563) : eval()'d code on line 824
Steht nun in meinem ErrorLog sobald man die Suche startet....

Kann mir jemand bitte helfen?
Mit freundlichen Grüßen
Jörg Knörchen

Meine Hobby-Webseite:
www.mein-foto-abc.de : contenido 4.6.15 - I love it! : www.yogie.de : www.bastelstun.de

swelpot
Beiträge: 101
Registriert: Mo 26. Jul 2004, 20:42
Wohnort: Rhein-Main
Kontaktdaten:

Beitrag von swelpot » Di 9. Nov 2004, 18:13

ich verbinde das mal:

weitere probleme und lösungen hier:
http://www.contenido.de/forum/viewtopic.php?t=6123

grüße

stefan

Damaskus
Beiträge: 54
Registriert: Do 6. Mai 2004, 06:41
Kontaktdaten:

Beitrag von Damaskus » Sa 1. Jan 2005, 14:45

Hi,
die Suchefunktion ist super!
Nur sucht sie in der "Internen" Artikelbezeichnung.
Und gibt diese auch aus.

Mir wäre es allerdings lieber wenn sie in der Headline und in der Subheadline sucht und diese dann ausgibt. Und nicht in der Internen Artikelbezeichnung.

Wie muss ich dazu die Suche abändern?

cyaneo
Beiträge: 76
Registriert: Mi 5. Jan 2005, 19:42
Wohnort: Das findet ihr sowieso nicht, weils so klein ist...
Kontaktdaten:

Beitrag von cyaneo » Fr 7. Jan 2005, 14:15

Nach studium meherer Beiträge zum Thema Volltextsuche bin ich jetz völlig daneben...

Kann bitte jemand das funktionierende, komplette Modul für die Volltextsuche fertig in einem Post veröffentlichen?
**************************************************
Gruss
cyaneo
Zen Cart - The Art of e-Commerce
--------------------------------------------------------------------------------
Wenn jeder dem anderen helfen wollte, wäre allen geholfen.
--------------------------------------------------------------------------------
Ein Problem ist halb gelöst, wenn es klar formuliert ist.
**************************************************

Damaskus
Beiträge: 54
Registriert: Do 6. Mai 2004, 06:41
Kontaktdaten:

Re: nächste stufe

Beitrag von Damaskus » Fr 7. Jan 2005, 14:21

Die hier funktioniert.


Gruß
Damasksu
swelpot hat geschrieben:Hallo zusammen,

erstmal danke an fancypants für den code...

habe hin bei mir auch eingebaut und noch ein weiteres mal erweitert. Vielleicht interessiert sich jmd. dafür...

Der Code selbst ist:
  • neu formatiert,
    ein paar Kommentare sind hinzugekommen,
    Susannes Erweiterung ist dabei (danke...),
    die Ansteuerung des Moduls ist aus anderen Modulen heraus problemlos möglich und
    die Ausgabe ist wie das Hauptnavigationsmodul über ein HTML-Template formatierbar (Klasse Template).

Zum Code:
Das Modul Volltextsuche kann für sich alleine verwendet werden. Der Suchstring wird im Textinput des Formulars eingegeben, das Ergebnis wird im gleichen Modul wieder ausgegeben. Dabei wird es entsprechend den beiden Templates formatiert.
Das Modul Volltextsuche Formular stellt nur das Formular zur Eingabe des Suchstring bereit. Es muss ein anderer Artikel existieren der auf einem Template basiert das o.g. Modul zur Ausgabe der Ergebnisse enthält. In der ersten Codezeile des Moduls Volltextsuche Formular muss der korrekte Link auf eben diesen Artikel angegeben werden.


Modul: Volltextsuche
Input:

Code: Alles auswählen

$linktarget = "CMS_VALUE[1]";
$extratext = "CMS_VALUE[2]";

if($linktarget == "") {
	$linktarget = "_self";
}
if($extratext == "") {
	$extratext = 0;
}
?>
<table>
	<tr>
		<td>Linktarget</td>
		<td>
			<select name="CMS_VAR[1]">
				<option value="_self"<? if(strcmp("_self", $linktarget) == 0) echo " selected"; ?>>gleiches Fenster (_self)</option>
				<option value="_new"<? if(strcmp("_new", $linktarget) == 0) echo " selected"; ?>>neues Fenster (_new)</option>
			</select>
		</td>
	</tr>
	<tr>
		<td>Zusätzlicher Text zum Artikellink</td>
		<td>
			<select name="CMS_VAR[2]">
				<option value="0"<? if($extratext == 0) echo " selected"; ?>>kein zusätzlicher Text</option>
				<option value="1"<? if($extratext == 1) echo " selected"; ?>>Artikelkommentar</option>
				<option value="2"<? if($extratext == 2) echo " selected"; ?>>Anfang des Artikeltextes</option>
			</select>
		</td>
	</tr>
</table>
<?
Output:

Code: Alles auswählen

<?php
//$linkziel = "front_content.php?idcat=15";
$linkziel = $auth->url();

$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"); 

$extratextLength = 200;


$suchtext = $_POST["suchtext"];
?>

<form name="suche" action="<?= $linkziel ?>" method="post">
	<table>
		<tr>
			<td><span style="font-size: 15px">Suche&nbsp;</span></td>
			<td><input name="suchtext" type="text" size="20" value="<?= $suchtext ?>"></td>
			<td><input name="submit" type="submit" value="Go"></td>
		</tr>
	</table>
</form>

<?php
$linktarget = "CMS_VALUE[1]";
$extratext = "CMS_VALUE[2]";

/* DB Instances */
$db = new DB_Contenido;
$db2 = new DB_Contenido;

/* Template Instance */
$tpl = new Template;


if($suchtext != "") {
	while(ereg('  ', $suchtext)) { 
		$suchtext = ereg_replace('  ', ' ', $suchtext); 
	} 
	$suchliste = explode(" ", strtolower($suchtext)); 
	$suchliste = array_diff($suchliste, $ignore_konj, $ignore_art, $ignore); 
	$suchtext = trim(implode(" ", $suchliste)); 

	if($verknuepfung == "oder") { 
		$suchregexp = "(" . str_replace(" ", ")|(", $suchtext) . ")"; 
		$s = ereg_replace("ü", "%FC", strtolower($suchtext)); 
		$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 " .
				"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 . "')"; 
	} // end if($verkuepfung)
	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 " .
				"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'";
					 
		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 . "')"; 
		} // end while
		reset($suchliste); 
	} // end else($verknuepfung)
	
	$db->query($sql); 
	
	if($db->num_rows() != 0){ 
		while($db->next_record()) { 
			if ($auth->auth["uid"] == "nobody"){ 
				$sql2 =	"SELECT " .
							"public " .
						"FROM " .
							$cfg["tab"]["cat_lang"] . " " .
						"WHERE " .
							"idcat = '" . $db->f("idcat") . "'";
				$db2->query($sql2);
				
				if($db2->next_record()) { 
					if($db2->f("public") == 0) {
						continue;
					} // end if(public)
				} // end if(next_record)
			} // end if(auth nobody)
			
			$num = 0 + $db->f("sideid"); 
			$results[$num][link] = "front_content.php?" .
										"client=" . $client .
										"&lang=" . $lang .
										"&idcat=" . $db->f("idcat") .
										"&idart=" . $db->f("idart"); 
			$results[$num][title] = $db->f("title"); 
			
			//anzuzeigenden Text ermitteln
			switch($extratext) { 
				case 0:
					$results[$num][text] = "";
					break; 
				case 1:
					$results[$num][text] = $db->f("comment");
					break; 
				case 2:
					$results[$num][text] = capiStrTrimSentence(strip_tags(urldecode($db->f("content"))), $extratextLength) . "...";
					break; 
			} // end switch
			 
			while(list($key, $val) = each($suchliste)) { 
				$hits[$num] +=	substr_count(strtolower(strip_tags(urldecode($db->f("title")))), $val) + 
								substr_count(strtolower(strip_tags(urldecode($db->f("comment")))), $val) + 
								substr_count(strtolower(strip_tags(urldecode($db->f("content")))), $val); 
			} // end while
			
			reset($suchliste); 
		} // end while(next_record)
	
		if(count($hits) > 0) { 
			//anzahl hits speichern
			$anzahlhits = count($hits);
			 			
			$hits = array_values($hits); 
			$results = array_values($results); 
			array_multisort ($results, SORT_DESC, SORT_NUMERIC, $hits, SORT_DESC, SORT_NUMERIC); 
			
		} // end if(count hits)
	} // end if(num_rows)


	//Ausgabe-----------------
	
	/* Start Output buffer */
	ob_start();

	if(count($hits) > 0) {
		$tpl->reset();
		$tpl->set('s', 'SUCHTEXT', $suchtext);
		$tpl->set('s', 'TREFFER', $anzahlhits);
		
		for($i = 0; $i < count($hits); $i++) { 
			$tpl->set('d', 'ARTIKELNAME', $results[$i][title]);
			$tpl->set('d', 'TARGET', $linktarget);
			$tpl->set('d', 'HREF',  $results[$i][link]);
			$tpl->set('d', 'TEXT',  $results[$i][text]);
			$tpl->next();
		}
		$tpl->generate('templates/search_found.html');
	} // end if(count hits)
	else {
		$tpl->reset();
		$tpl->set('s', 'SUCHTEXT', $suchtext);
		$tpl->generate('templates/search_notfound.html');
	} // end else (count hits)
} // end if(suchtext)

/* Read out buffer */
$html = ob_get_contents();

/* Clean buffer */
ob_end_clean();

/* Output buffer-contents */
echo $html;
?>
Templatedateien(in /cms/templates kopieren)
search_found.html:

Code: Alles auswählen

<div>
	Suchergebnisse für "<span class="h4">{SUCHTEXT}</span>"
	<br>
	Anzahl Treffer: <span class="h4">{TREFFER}</span>
</div>
<br>
<!-- BEGIN:BLOCK -->
<div>
	<a href="{HREF}" target="{TARGET}" class="h4">{ARTIKELNAME}</a><br>
	{TEXT}
</div>
<br>
<!-- END:BLOCK -->
search_notfound.html:

Code: Alles auswählen

<div>
Es wurden keine mit Ihrer Suchanfrage "<span class="h4">{SUCHTEXT}</span>" übereinstimmenden Dokumente gefunden
</div>

Modul: Volltextsuche Formular
nur Output:

Code: Alles auswählen

<?php
$linkziel = "front_content.php?idcat=15";
//$linkziel = $auth->url();
?>

<form name="suche" action="<?= $linkziel ?>" method="post">
	<table>
		<tr>
			<td><span style="font-size: 15px">Suche&nbsp;</span></td>
			<td><input name="suchtext" type="text" size="20"></td>
			<td><input name="submit" type="submit" value="Go"></td>
		</tr>
	</table>
</form>

Viel Spaß damit...

Stefan

cyaneo
Beiträge: 76
Registriert: Mi 5. Jan 2005, 19:42
Wohnort: Das findet ihr sowieso nicht, weils so klein ist...
Kontaktdaten:

Beitrag von cyaneo » Fr 7. Jan 2005, 14:39

Danke! Werd mich gleich dranmachen! :D
**************************************************
Gruss
cyaneo
Zen Cart - The Art of e-Commerce
--------------------------------------------------------------------------------
Wenn jeder dem anderen helfen wollte, wäre allen geholfen.
--------------------------------------------------------------------------------
Ein Problem ist halb gelöst, wenn es klar formuliert ist.
**************************************************

lux
Beiträge: 33
Registriert: Di 12. Okt 2004, 14:11
Wohnort: .at
Kontaktdaten:

Ich komm nicht drauf

Beitrag von lux » Mi 12. Jan 2005, 20:32

Hallo Leute!

Erstmal muss ich sagen das das eine Super Suchfunze ist!

Doch leider hab ich damit ein kleines Problem, wo ich nicht dahinter komme. Und zwar sollte es mir die Headlines von den jewiligen gefundenen Artikeln zur gänze anzeigen (samt HTML Formatierung).

Irgendwie muss ich die Variable typeid vom contend an der Richtigen Stelle auslesen - Bloß Wo?

Bitte Helft mir - Ich steh voll auf der Seife...

THX
LUX
Das Leben besteht aus Nullen und Einsen!

Gesperrt