ausgabe der volltextsuche

Gesperrt
astar
Beiträge: 60
Registriert: Di 26. Jul 2005, 11:43
Kontaktdaten:

ausgabe der volltextsuche

Beitrag von astar » Mi 27. Jul 2005, 07:59

hallo,

ich habe mir die volltextsuche aus dem forum in mein system integriert.

momentan steht die ausgabe direkt unter dem eingabefenster.

wo kan ich festlegen, das die ausgabe in einem anderen container erfolgt.

(ich benutze das beispiel welches dabei ist und möchte die ausgabe im hauptcontainer [7]. Eingabe der Suche steht in container [9]).


der code:

Eingabe

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>
<?
Ausgabe

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>&nbsp; Suche:
      <tr>
         <td><span style="font-size: 8px"></span></td>
         <td><input name="suchtext" type="text" size="15" 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;
?> 

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Mi 27. Jul 2005, 08:09

es gibt Suchmodule, die extra fuer zwei Container vorgesehen sind, nimm doch gleich so etwas ...

astar
Beiträge: 60
Registriert: Di 26. Jul 2005, 11:43
Kontaktdaten:

Beitrag von astar » Mi 27. Jul 2005, 10:09

ich blick grad nit so wie das umsetzbar ist...

dem container [7] ist bei mir ein textmodul zugeordnet.

jetzt möchte ich aber meine suchausgabe auch in container [7] haben.

geht das? kann ich einem container 2 module zuweisen? wie geht das?

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Mi 27. Jul 2005, 10:19

astar hat geschrieben:ich blick grad nit so wie das umsetzbar ist...

dem container [7] ist bei mir ein textmodul zugeordnet.

jetzt möchte ich aber meine suchausgabe auch in container [7] haben.

geht das? kann ich einem container 2 module zuweisen? wie geht das?
Du brauchst fuer die Ergebnisseite ein neues Template, wo du Container 7 statt des Textmoduls die Suchausgabe als Modul zuweist.

astar
Beiträge: 60
Registriert: Di 26. Jul 2005, 11:43
Kontaktdaten:

Beitrag von astar » Mi 27. Jul 2005, 10:28

ah, danke

das klingt verständlich aber wo kann ich dann dem suchmodul das template zuweisen?

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Mi 27. Jul 2005, 10:36

Du weist nicht dem Suchmodul das Template zu sondern dem Template das Suchmodul. :) Dazu musst du unter Style->Templates am besten das vorhandene Template kopieren, in der Kopie die Zuordnung aendern, und dann bei dem Artikel, den du fuer die Suchausgabe anlegst, dieses neue Template angeben. Aber wie gesagt, dafuer brauchst du eine Suche, die mit zwei Containern arbeitet, such mal hier unter Module 4.4.x.

Gesperrt