• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Ziellink von Planetsearch nicht als absoluter Link, sonder als include

P51D

Mitglied
Hallo miteinander.

Ich bastle jetzt schon ne weile an der HP meines Vereines, und ich komme einfach nicht weiter bei einem Problem:
Ich dachte mir, dass eine Suchfunktion für gewisse Besucher nützlich sein könnte, und nach ein wenig Nachforschungen habe ich mich für das PlanetSearch-Script entschieden.

Dies läuft auch ganz aktzeptabel, nur habe ich ein Problem: Wenn auf einer Unterseite (ist in einem Unterverzeichniss) der zu suchende Begriff gefunden wurde, speichert mir das script nur den absoluten Link. Da ich aber die Seite so aufgebaut habe, dass jede Unterseite in das Haupt-Template includet wird, habe ich dann nur noch ein weisses Fenster mit dem Text, aber nicht wirklich die ursprüngliche Seite.

Die Unterseiten werden wie folgt bei einem normalen Link-anklicken geöffnet:
Code:
if(!isset($_GET['page'])){                                                                
    include("./unterseiten/h_home.php");
}
else{
    include($_SERVER["DOCUMENT_ROOT"]."/harmonie/unterseiten/".$_GET["page"].".php");
}
Die Ausgabe der Suchergebnisse sieht so aus:
Code:
<table>
    <tr>
        <div id="schrift_h_u"> 
            Ihre Suche nach "[SEARCH_WORDS]" hat folgende             
            Treffer auf [SEARCH_PAGES] Seiten ergeben:                
        </div>
    </tr>
    <tr> 
        <td colspan="2">&nbsp;</td>
    </tr>
    [SEARCH_START] 
    <tr> 
        <td><div id="schrift_norm">[SEARCH_COUNT]</div></td>
        <td><a href="[SEARCH_LINK]"><div id="schrift_search_link">[SEARCH_TITLE]</div></a></td>    
    </tr>
    <tr> 
        <td>&nbsp;</td>
        <td><div id="schrift_norm">[SEARCH_DESC]</div></td>
    </tr>
    <tr> 
        <td colspan="2">&nbsp;</td>
    </tr>
    [SEARCH_STOP] 
    <br>
</table>
Beim [SEARCH_LINK] wird einfach der Pfad zur Zieldatei abgelegt.
Und das Verarbeitungsscript von PlanetSearch sieht so aus (Kommentare habe ich weggelassen):
Code:
include ("./inc/config.inc.php");
$root_dir = $_SERVER["DOCUMENT_ROOT"].$from_dir."/";
@setlocale("LC_ALL", "de_DE");
$search_exp = strip_tags($_POST["search_exp"]);
if (!empty($search_exp)) {
    $frrepl = array("=\+=", "=\s+=");
    $torepl = array("", " ");
    $search_exp = preg_replace( $frrepl, $torepl, $search_exp);
    $search_exp = preg_quote($search_exp);
    $search_exp = trim($search_exp);
    if (strlen($search_exp) < $sexp_length) {
        $tmpl = join('', file("./tmpl/search_error.htm"));
        $tmpl = preg_replace("=\[search_error_count\]=", $error_count, $tmpl);
        $tmpl = preg_replace("=\[search_error_empty\]=", "", $tmpl);
        eval('?>' .  $tmpl);
    } 
    else {
        $search_arr = explode(" ",$search_exp);
        $search_count = count($search_arr);
        $arr = array();
        $arr_all = array();
        $tmpl = join('', file("./tmpl/search_result.htm"));
        preg_match_all("=\[SEARCH_START\](.*)\[SEARCH_STOP\]=siU", $tmpl, $between);
        $search_pages = 0;
        $cont_part = walk_dir($root_dir);
        $search_pages = count($cont_part);   
        rsort($cont_part); 
        for ($j=0; $j<$search_pages; $j++) { // Arrays auslesen
            list($anz_searchexp, $title, $descr, $new_path) = $cont_part[$j];
            $content = preg_replace("=\[SEARCH_TITLE\]=", "$title", $between[1][0]);
            $content = preg_replace("=\[SEARCH_LINK\]=", "$from_dir"."$new_path", $content);
            $content = preg_replace("=\[SEARCH_DESC\]=", "$descr", $content);
            $content = preg_replace("=\[SEARCH_COUNT\]=", "$anz_searchexp", $content);
            $cont_x .= $content;
        }
        $tmpl = preg_replace("=\[SEARCH_START\](.*)\[SEARCH_STOP\]=siU", $cont_x, $tmpl);
        $search_exp = str_replace('\\', '', $search_exp);
        $tmpl = preg_replace("=\[SEARCH_WORDS\]=", $search_exp, $tmpl);
        $tmpl = preg_replace("=\[SEARCH_PAGES\]=", $search_pages, $tmpl);
        if (empty($cont_part)) {
            $tmpl = preg_replace("=\[NO_MATCH\]=", $no_match, $tmpl);
        } 
        else {
            $tmpl = preg_replace("=\[NO_MATCH\]=", "", $tmpl);
        }
        eval('?>' .  $tmpl);
        foreach ($search_arr as $search_exp) {
            $zeilen = file("./_log/search_log.txt");
            $anz_zeilen = sizeof($zeilen);
            $x=0;
            for ($i=0; $i<$anz_zeilen; $i++) {
                list ($search_word, $search_num) = split("\\|", chop($zeilen[$i]));    
                if ($search_exp==$search_word) {
                    $search_num++;
                    $i-2;
                    $x++;
                }
                    $new_log .= "$search_word|$search_num\n";
            }
            if ($x==0) {
                $search_num = "1";
                $new_log .= "$search_exp|$search_num\n";
            }
            $data = fopen("./_log/search_log.txt","w+");
            flock($data,1);
            fwrite($data, $new_log);
            flock($data,3);
            fclose($data);
            unset($new_log);
        }
    }
}
else {
    $tmpl = join('', file("./tmpl/search_error.htm"));
    $tmpl = preg_replace("=\[search_error_count\]=", "", $tmpl);
    $tmpl = preg_replace("=\[search_error_empty\]=", $error_empty, $tmpl);
    eval('?>' .  $tmpl);
}
function walk_dir($dir, $pos=2){
global $search_exp, $search_arr, $search_count, $arr, $ignore_dir, $dat_type, $root_dir, $search_area, $cont_part, $no_title, $search_pages, $arr_all;
    $handle = @opendir($dir);
    while ($file = @readdir ($handle)) {
        if (preg_match("=^\.{1,2}$=",$file)){
          continue;
        }
        $cut_dir = preg_replace("=$root_dir=siU", "", $dir);    
        if (in_array($cut_dir, $ignore_dir)) continue;      
        if (preg_match('=(_vti_cnf|_notes)=i', $cut_dir)) continue;
        if(is_dir($dir.$file)){
          walk_dir($dir.$file."/", $pos + 3);               
        }
        else{
            $abs_dir = preg_replace("=$root_dir=","",$dir);  
            if (preg_match("=(\.$dat_type)$=",$file)) {    
                $str = join('', file("$dir$file"));         
                if (!preg_match("=\<\!\-\-.no_search.\-\-\>=siU", $str)) {  
                    $str = ch_uml($str);
                    preg_match("=<title>(.*)</title>=siU", $str, $title);
                    preg_match('=<meta.*name\="description".*content\="(.*)".*>=siU',$str,$descr);
                    preg_match('=<meta.*name\="keywords".*content\="(.*)".*>=siU',$str,$keyw);
                    if ($search_area==1) {                              
                        $a = "$title[1]"."$descr[1]"."$keyw[1]"; 
                    }
                    else {  
                        $str = preg_replace("=\<\!\-\-.no_search_start.\-\-\>.*?\<\!\-\-.no_search_stop.\-\-\>=s", "", $str);
                        $a = preg_replace("=<script.*>.*<\/script>=siU", "", $str);
                        $a = preg_replace("=<\?.*?\?>=s", "", $a);         
                        $a = preg_replace("=(<[^>]+>)=siU", "", $str); 
                        $a .= "$title[1]"."$descr[1]"."$keyw[1]";
                    }
                    $i=0;
                    foreach ($search_arr as $search_word) { 
                        if (preg_match("=($search_word)=i", $a)) {
                            $anz_searchexp += preg_match_all("=$search_word=siU", $a, $nullinger);
                            $i++;
                            if ($i==$search_count) {     
                                if (!empty($title[1])){    
                                    $new_title = "$title[1]";
                                    $new_path = "/$abs_dir$file";
                                }
                                else {
                                    $new_title = "$no_title";
                                    $new_path = "/$abs_dir$file";
                                }

                                if (!empty($descr[1])){      
                                    $new_descr = "$descr[1]";
                                }
                                else {
                                    $new_descr = "";
                                }
                                if (!preg_match("=^\(\.\*\)$=", $new_title)) {
                                    $s_show = array();
                                    $s_show[] = $anz_searchexp;
                                    $s_show[] = $new_title;
                                    $s_show[] = $new_descr;
                                    $s_show[] = $new_path;
                                    array_push($arr_all, $s_show);
                                }
                                unset($str, $anz_searchexp);
                            }
                        }
                    }
                }
            }
        }
    }
    $cont_part = $arr_all;
    return ($cont_part);
    @closedir($handle); 
}
function ch_uml($del_uml) {
    $del_uml = preg_replace("=&auml;=", "ä", $del_uml);
    $del_uml = preg_replace("=&ouml;=", "ö", $del_uml);
    $del_uml = preg_replace("=&uuml;=", "ü", $del_uml);
    $del_uml = preg_replace("=&Auml;=", "Ä", $del_uml);
    $del_uml = preg_replace("=&Ouml;=", "Ö", $del_uml);
    $del_uml = preg_replace("=&Uuml;=", "Ü", $del_uml);
    $del_uml = preg_replace("=&szlig;=", "ß", $del_uml);
    return ($del_uml);
}
Gibt es eine Möglichkeit, dass ich bei den Unterseiten, die im Ortner unterseiten sind, den Rest des Links weglösche, und nur den Dateinamen ohne Endung habe?
Damit ich dann irgenwie so etwas habe: hhome.php?page=******
Die neue Seite müsste sich dann aber auch wieder über Get öffnen, oder sehe ich das falsch?

Ich hoffe, ihr könnt mir da weiterhelfen, denn es würde mich schon etwas nerven, wenn ich dies so nicht realisieren kann.

MFG
P51D
 
Da gibt es eine Menge eleganter Lösungen.

Die leicht verständlichste wäre es wohl den String, der den absoluten Pfad zur Unterseite enthält, mit der Funktion explode() zu bearbeiten.

array explode ( string $delimiter , string $string [, int $limit ] )
explode teilt einen String jeweils an einen von dir vorgegebenen Zeichen ($delimiter) in mehrere Strings auf und speichert diese Teilstrings in einen array. Für deinen Fall würde ich wie folgt vorgehen:

PHP:
$array = explode("/ .", $path); //$path = String, der den absoluten Pfad enthält

$size = count($array);
$size - 2;  //Indizes bei Arrays beginnen bei Null und das letzte Arrayelement enthält den Dateityp

$dateiname = $array[$size];
Gibt sicherlich noch eine bessere Variante. Diese ist jedoch recht einfach und sollte für jeden verständlich sein. :)
 
Zuletzt bearbeitet:
Zurück
Oben