Volltextsuche für 4.4

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

Beitrag von swelpot » Do 10. Feb 2005, 10:36

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

Eriador
Beiträge: 14
Registriert: Di 25. Jan 2005, 21:52
Kontaktdaten:

Beitrag von Eriador » Do 10. Feb 2005, 10:48

ergibt wieder einen error bei der Suche,
nach dem Modul wird aber schonmal alles wieder angezeigt :)

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

Beitrag von swelpot » Do 10. Feb 2005, 10:53

was besagt der "error" den konkret?
Grüße

Stefan

Eriador
Beiträge: 14
Registriert: Di 25. Jan 2005, 21:52
Kontaktdaten:

Beitrag von Eriador » Do 10. Feb 2005, 10:55

error=1
Es wird einfach die Startseite angezeigt

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

Beitrag von swelpot » Do 10. Feb 2005, 10:59

dann leere doch nochmal den errorlog, führe einmal die suche aus und poste nochmal den neuen errorlog-inhalt.
sonst wäre ich dann auch am ende...
Grüße

Stefan

Eriador
Beiträge: 14
Registriert: Di 25. Jan 2005, 21:52
Kontaktdaten:

Beitrag von Eriador » Do 10. Feb 2005, 11:14

[10-Feb-2005 11:07:08] Invalid SQL: SELECT level FROM WHERE idcat=1<br><br>
[10-Feb-2005 11:07:08] next_record called with no query pending.

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

Beitrag von swelpot » Do 10. Feb 2005, 11:24

ich denke, dass komme aus einem anderen modul...
denn auf ein feld "level" wird in der suche in keiner sql-abfrage zugegriffen...
Grüße

Stefan

Eriador
Beiträge: 14
Registriert: Di 25. Jan 2005, 21:52
Kontaktdaten:

Beitrag von Eriador » Do 10. Feb 2005, 12:18

Soll ich dir mal den Link zur Seite geben ?

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

Beitrag von swelpot » Do 10. Feb 2005, 12:31

kannst du gerne machen.
wird aber vermutlich nicht viel bringen...
schau dir doch mal alle modul-outputs an und suche nach einem sql-statement mit "select level", wenn du das hast kannst du es ja mal posten
Grüße

Stefan

m2Designer
Beiträge: 41
Registriert: Mo 23. Aug 2004, 09:47
Kontaktdaten:

Re: Rücksprung auf die Suchergebnisse klappt nicht

Beitrag von m2Designer » Mo 21. Mär 2005, 10:48

Idrian hat geschrieben:Hallo Contenido Gemeinde,

ich habe die Suche soweit implementiert und es klappt auch alles soweit ganz prima. Nur einen kleinen Schönheitsfehler habe ich noch. Wenn ich auf einen Suchtreffer klicke um mir den betreffenden Eintrag anzeigen zu lassen und danach wieder auf die Suchergebnisse zurücklinken möchte, klappt das mit einem javascript:history.back() nicht. Es kommt immer ein "Seite kann nicht angezeigt werden". Muss ich für den Rücksprung auf die Suchergebnisse Variablen mit zurückreichen?

Zur Verdeutlichung:

ich habe in beiden Modulen $linkziel = "front_content.php?idcat=72" eingetragen. die idcat ist gleichlautend mit der Suchseite front_content.php?idcat=72

Beim Rücksprung mittels history.back() auf die Seite front_content.php?idcat=72 nach Betrachten des gesamten Artikels wird nur eine leere Seite angezeigt.

Gruß

Idrian
Ich habe das gleiche Problem hat jemand ein Lösung dazu? :?

Cyclist
Beiträge: 90
Registriert: Fr 11. Feb 2005, 14:08
Wohnort: Berlin
Kontaktdaten:

Beitrag von Cyclist » Mo 21. Mär 2005, 10:53

Das Problem hatte ich auch. Hier gibt es die Lösung

m2Designer
Beiträge: 41
Registriert: Mo 23. Aug 2004, 09:47
Kontaktdaten:

Beitrag von m2Designer » Mo 21. Mär 2005, 11:23

Cyclist hat geschrieben:Das Problem hatte ich auch. Hier gibt es die Lösung
/cheer :D Danke für die schnelle Antwort hat wunderbar geklappt!

AlexG
Beiträge: 37
Registriert: Do 26. Jun 2003, 13:27
Wohnort: Baiersdorf
Kontaktdaten:

Problem mit Volltextsuche und W3concepts.form.v1

Beitrag von AlexG » Mo 21. Mär 2005, 13:20

Die Volltextsuche ist echt klasse geworden.

Jetzt habe ich leider folgendes Problem: " Auf meinen Seiten setzte ich noch das Modul W3concepts.form.v1 ein. Wähle ich nun Anfang des Artikeltextes ausgeben und die Volltextsuche findet einen passenden Begriff im Formular, wird der komplette Formularinput ausgegeben, obwohl die Textlänge begrenzt wurde. "
Hat hier jemand schon mal dies Problem gehabt, und hat eine Lösung, oder kann man einfach einen Bereich ausklammern, der dann nicht durchsucht werden darf?

Gruss,Alex

Hier ein Anschnitt der suchausgabe, wie Sie bei mir dargestellt wird:

Code: Alles auswählen

Suchergebnisse für "polo" 
Anzahl Treffer: 2 


Polo Facelift
... 


Sicherung Formmail
Gebrauchtwagen Anfrage
Anrede:
###name:anrede; type:select; valid:text; size:1; option:bitte auswählen; option:Herr; option:Frau; option:Firma; value:bitte auswählen###
Vorname / Nachname:*
###name:vorname; type:text; valid:simpletext; size:20; mandatory:true### / ###name:nachname; type:text; valid:simpletext; size:20; mandatory:true###
Email:
###name:email; type:text; valid:email; size:30; mandatory:true###
Vorwahl/Telefon*
###name:vorwahl; type:text; valid:integer; size:7; mandatory:true### - ###name:telefon; type:text; valid:integer; size:15; mandatory:true###
Rückruf:
###name:Rückruf[0];type:checkbox; valid:integer; value:Rueckruf### Ja, bitte rufen Sie mich zurück 
Modell:
###name:modell;type:radio;valid:text; value:Lupo; selected:true### Lupo ###name:modell; type:radio; valid:text; value:Polo### Polo ###name:modell; type:radio; valid:text; value:Golf### Golf###name:modell;type:radio;valid:text; value:Bora; selected:true### Bora ###name:modell; type:radio; valid:text; value:Touran### Touran ###name:modell; type:radio; valid:text; value:New Beetle### New Beetle

emergence
Beiträge: 10641
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mo 21. Mär 2005, 13:32

m2Designer hat geschrieben:
Cyclist hat geschrieben:Das Problem hatte ich auch. Hier gibt es die Lösung
/cheer :D Danke für die schnelle Antwort hat wunderbar geklappt!
wäre nett wenn du die geänderte version posten würdest, die anfrage kommt in letzter zeit immer öfter... damit wäre sicher einigen anderen suchenden geholfen...
*** make your own tools (wishlist :: thx)

m2Designer
Beiträge: 41
Registriert: Mo 23. Aug 2004, 09:47
Kontaktdaten:

Beitrag von m2Designer » Mo 21. Mär 2005, 13:52

Klar - also hier der Code!

Formular Volltextsuche

Code: Alles auswählen

<?php 
$linkziel = front_content.php?idcat=21"; 
//$linkziel = $auth->url(); 
?> 
<form name="suche" action="<?= $linkziel ?>" method="get"> 
<input type='hidden' name='idcatart' value='39'> 
<input type='hidden' name='lang' value='1'> 
<input type='hidden' name='client' value='1'><table> 
   <table width="230" border="0" cellpadding="0" cellspacing="0"> 
      <tr> 
         <td><span style="font-size: 15px">Suche&nbsp;</span></td> 
         <td><input name="suchtext" type="text" size="20" class="input"></td> 
         <td><input name="submit" type="submit" value="Go" class="button"></td> 
      </tr> 
  </table>
</form>
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=21"; 
$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 = $_GET["suchtext"]; 
?> 

<form name='suche' method='GET' action='front_content.php'> 
<input type='hidden' name='idcatart' value='39'> 
<input type='hidden' name='lang' value='1'> 
<input type='hidden' name='client' value='1'><table> 
      <tr> 
         <td><span style="font-size: 15px">Suche&nbsp;</span></td> 
         <td><input name="suchtext" type="text" class="input"size="20" value="<?= $suchtext ?>"></td> 
         <td><input name="submit" type="submit" class="button" 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 */ 
cInclude("classes", "class.template.php");
$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; 
?> 
Nur IDCAT und IDCATART ändern und fedisch :D


Hier nochmal die Templatedateien so das die Zusammenfassung komplett ist!

Templatedateien(in /cms/templates kopieren)
search_found.html:
Code:

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:

Code: Alles auswählen

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

Gesperrt