Suchmodul so ändern, dass man einen Baum auswählen kann !!!

Gesperrt
moews
Beiträge: 76
Registriert: Mi 11. Aug 2004, 13:29
Wohnort: Berlin
Kontaktdaten:

Suchmodul so ändern, dass man einen Baum auswählen kann !!!

Beitrag von moews »

Hallo Leute, ich habe folgendes Problem. Ich habe einen "deutschen"-Baum und einen "englischen" nun soll es in jedem Baum eine Suchmaschine geben. Dafür habe ich folgenden Quellcode (Suchmodul) eingebaut:

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><input type="text" size="40" style="width:300px" name="suche" value="'.$suche.'"></td><td></td> 
</tr> 
<tr> 
<td><br><INPUT TYPE="submit" VALUE="Suchen" style="width:80px" class="button"></td><td></td> 
</tr> 
<tr> 
<td colspan=2><br></td> 
</tr> 
<tr> 
<td class="subnavigation"><input type="radio" name="verknuepfung" value="und" checked>&nbsp;alle Begriffe müssen enthalten sein</td><td></td> 
</tr> 
<tr> 
<td class="subnavigation"><input type="radio" name="verknuepfung" value="oder">&nbsp;mindestens ein Begriff muss enthalten sein</td><td></td> 
</tr> 
<tr> 
<td colspan=2><br></td> 
</tr> 

</table> 
</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"); 

$results[$num][text] .= substr(strip_tags(urldecode($db->f("content"))),0,100)."..."; 

//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 für "'.$suche.'"</b><br><br></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><a href=\"".$results[$i][link]."\""; 
echo "><b>".$results[$i][title]."</b></a><br>"; 
echo $results[$i][text]." <a href=\"".$results[$i][link]."\""; 
echo ">mehr</a><br><br></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>'; 
} 
?>
Kann man dieses Suchmodul so ändern, dass man einen Baum auswählt, indem die Suchmaschine sucht? Falls nicht, gibt es ein solches Modul, welches ich einbauen kann? Habe ein kleines Zeitproblem...da die Seite bald online gehen soll. Danke für eure Hilfe... DANKE!!!!
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ne richtige lösung es auf einen baum zu beschränken gibt es glaube ich noch nicht
schau mal da:
http://www.contenido.de/forum/viewtopic ... =sql+idcat
*** make your own tools (wishlist :: thx)
moews
Beiträge: 76
Registriert: Mi 11. Aug 2004, 13:29
Wohnort: Berlin
Kontaktdaten:

Beitrag von moews »

emergence hat geschrieben:ne richtige lösung es auf einen baum zu beschränken gibt es glaube ich noch nicht
schau mal da:
http://www.contenido.de/forum/viewtopic ... =sql+idcat
Hmm, was habe ich dann für eine Möglichkeit. Auf der englischen Seite nur die englischen Artikel darszustellen und auf der Deutschen nur die deutschsprachrigen? Da gibt es doch bestimmt etwas oder? Gruß
moews
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

eigentlich soweit ich das oben sehe wird auf die sprache der variable $lang rücksicht genommen...

zeigt er dir als ergebniss immer zwei artikel an ? einmal englisch und einmal deutsch ?
*** make your own tools (wishlist :: thx)
moews
Beiträge: 76
Registriert: Mi 11. Aug 2004, 13:29
Wohnort: Berlin
Kontaktdaten:

Beitrag von moews »

Das Problem ist, dass ich zwei verschiedene Bäume habe mit verschiedenen Sprachen. Das soll auch so sein. Ich möchte jetzt jedoch einstellen, in welchen Baum die Suchmaschine suchen soll... !! Geht das?
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

da müsstest du wieder dezitiert mit angeben welche idcat ausgeklammert werden soll...
siehe anderes posting... dazu brauchst dann aber zwei suchmodule einmal nur für den deutschen baum und einmal für deinen englischen baum...

siehe von mir angegebenen link...
*** make your own tools (wishlist :: thx)
moews
Beiträge: 76
Registriert: Mi 11. Aug 2004, 13:29
Wohnort: Berlin
Kontaktdaten:

Beitrag von moews »

emergence hat geschrieben:da müsstest du wieder dezitiert mit angeben welche idcat ausgeklammert werden soll...
siehe anderes posting... dazu brauchst dann aber zwei suchmodule einmal nur für den deutschen baum und einmal für deinen englischen baum...

siehe von mir angegebenen link...
hm okay, aber ich hatte mir das angeschaut und irrgendwie werde ich daraus nicht schlau. Außerdem ist das doch eine andere Suche oder? Der Kunde ist aber mit der bisherigen super zufrieden (bis auf das kleine Problem hier).
moews
Beiträge: 76
Registriert: Mi 11. Aug 2004, 13:29
Wohnort: Berlin
Kontaktdaten:

Beitrag von moews »

Könnte mir jemand sagen wie ich in der Suchmaschine (bzw. dann in dem deutschen/englischen Modul) verschiedene idcat ausklammern kann? Würde mir echt helfen....
Danke und Gruß
moews
matt-d
Beiträge: 28
Registriert: Do 4. Nov 2004, 12:22
Kontaktdaten:

Beitrag von matt-d »

Hallo Leute,

ich habe ein ähnliches Problem, allerdings dreht es sich bei mir um die Fehlerseiten und einige andere Artikel, die nciht durchsucht werden sollen. Diese in dem Query auszuklammern wäre etwas umständlich, zumal ich das Query bei jedem neu hinzukommenden Artikel ändern müsste.

Ich habe mir gedacht, dass es ziemlich hilfreich wäre, wenn man Kategorien bzw. Artikeln Variablen/Eigenschaften geben kann. In der V4.5.2 ALPHA gibt es schon Ansätze, dass man z.B. einem Mandanten eine freidefinierbare Eigenschaft unter "Mandanteneinstellungen" zuteilen kann. Weiß jemand, ob das noch auf die Artikel und Kategorien erweitert wird, oder sollte ich das zu den Feature Requests schreiben?

Gruß,
matt
Gesperrt