コード例 #1
0
ファイル: main.php プロジェクト: BackupTheBerlios/ewebuki-svn
    $debugging["html_enable"] = 0;
    $print_template = $HTTP_POST_VARS["print"] . $HTTP_GET_VARS["print"];
    rparser($print_template . ".tem.html", $specialvars["default_template"] . ".tem.html");
} elseif ($HTTP_POST_VARS["hijack"] != "" || $HTTP_GET_VARS["hijack"] != "") {
    foreach ($HTTP_GET_VARS as $key => $value) {
        if ($hijack == "") {
            $hijack = $value;
        } else {
            $hijack .= "&" . $key . "=" . $value;
        }
    }
    $frameset_template = $HTTP_POST_VARS["hijack"] . $hijack;
    #$ausgaben["navigation"] = "/templates/net/frameset.head.tem.html";
    $ausgaben["navigation"] = "frameset.head.tem.html?head=true";
    $ausgaben["hijack"] = $frameset_template;
    rparser("frameset.tem.html", $specialvars["default_template"] . ".tem.html");
} elseif ($HTTP_POST_VARS["head"] != "" || $HTTP_GET_VARS["head"] != "") {
    $array = explode("?", $_SERVER["HTTP_REFERER"]);
    $ausgaben["seite"] = $array[0];
    rparser("frameset.head.tem.html", $specialvars["default_template"] . ".tem.html");
} else {
    rparser("index.tem.html", $specialvars["default_template"] . ".tem.html");
}
// entgueltige Debug Ausgabe zusammensetzen und ausgeben
if ($debugging["html_enable"]) {
    $debugging["ausgabe"] .= "[ ++ {$main_script_name} ++ ]" . $debug_chr;
}
if ($debugging["html_enable"]) {
    echo $debugging["ausgabe"] . $debugging["footer"];
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
コード例 #2
0
function rparser($startfile, $default_template, $overwrite_template = "")
{
    global $db, $debugging, $pathvars, $specialvars, $environment, $ausgaben, $element, $lnk, $dataloop, $hidedata, $mapping, $loopcheck;
    if ($overwrite_template == "") {
        if (file_exists($pathvars["templates"] . $startfile)) {
            $template = $pathvars["templates"] . $startfile;
        } else {
            $template = $pathvars["fileroot"] . "templates/default/" . $startfile;
        }
        // wenn es fuer eine unterseite kein eigenes template gibt default.tem.html verwenden.
        if (!file_exists($template) && $default_template != "") {
            if ($startfile == $loopcheck) {
                if ($debugging["html_enable"]) {
                    $debugging["ausgabe"] .= "rparser note: template \"" . $template . "\" not found. Loop detect!!!" . $debugging["char"];
                }
            } else {
                if ($debugging["html_enable"]) {
                    $debugging["ausgabe"] .= "rparser note: template \"" . $template . "\" not found, using: " . $default_template . $debugging["char"];
                }
                if (file_exists($pathvars["templates"] . $default_template)) {
                    $template = $pathvars["templates"] . $default_template;
                } else {
                    $template = $pathvars["fileroot"] . "templates/default/" . $default_template;
                }
            }
            $loopcheck = $startfile;
        } else {
            unset($loopcheck);
        }
    } else {
        if (file_exists($pathvars["templates"] . $overwrite_template)) {
            $template = $pathvars["templates"] . $overwrite_template;
        } else {
            $template = $pathvars["fileroot"] . "templates/default/" . $overwrite_template;
        }
        if ($debugging["html_enable"]) {
            $debugging["ausgabe"] .= "rparser note: template \"" . $startfile . "\" overwrite, using: " . $template . $debugging["char"];
        }
    }
    // reset template overwrite inner recursive procedure
    $overwrite_template = "";
    if (file_exists($template)) {
        $fd = fopen($template, "r");
        while (!feof($fd)) {
            $line = fgets($fd, 1024);
            // alles vor ##begin und nach ##end wird nicht ausgegeben
            if (strpos($line, "##begin") !== false) {
                $begin = "1";
            } else {
                if (strpos($line, "##end") !== false) {
                    $begin = "0";
                } elseif ($begin == "1") {
                    // style path korrektur + dynamic style
                    if (strpos($line, "css/" . $environment["design"] . "/") !== false) {
                        if ($specialvars["dynamiccss"] != "") {
                            $line = str_replace("_default", "_" . $specialvars["dynamiccss"], $line);
                        }
                        $line = str_replace("../../css/", $pathvars["subdir"] . "/css/", $line);
                    } elseif (strpos($line, "../../css/") !== false) {
                        $line = str_replace("../../css/", $pathvars["subdir"] . "/css/", $line);
                    }
                    // image path korrektur (subdir support siehe weiter unten)
                    if (strpos($line, "../../images/") !== false) {
                        $line = str_replace("../../images/", "/images/", $line);
                    }
                    // js path korrektur
                    if (strpos($line, "../../js/") !== false) {
                        $line = str_replace("../../js/", $pathvars["subdir"] . "/js/", $line);
                    }
                    // dynamic bg
                    if (strpos($line, "background=\"!#specialvars_dynamicbg\"") !== false) {
                        if ($specialvars["dynamicbg"] != "") {
                            $line = str_replace("background=\"!#specialvars_dynamicbg\"", "background=\"/images/" . $environment["design"] . "/" . $specialvars["dynamicbg"] . "\"", $line);
                        } else {
                            $line = str_replace("background=\"!#specialvars_dynamicbg\" ", "", $line);
                        }
                    }
                    // image language korrektur
                    if (strpos($line, "_" . $specialvars["default_language"] . ".") !== false && $environment["language"] != $specialvars["default_language"] && $environment["language"] != "") {
                        $line = str_replace("_" . $specialvars["default_language"] . ".", "_" . $environment["language"] . ".", $line);
                    }
                    //////////////////////////////////////////////////////////////////////////////////////////////
                    // language "#(label)" - erster lauf: hier kommt der text anhand von sprache,
                    //                       template und marke aus der datenbank
                    //                       ( der content kann !#ausgaben_xxx enthalten )
                    //////////////////////////////////////////////////////////////////////////////////////////////
                    if (strpos($line, "#(") !== false || strpos($line, "g(") !== false) {
                        // wie heisst das template
                        $tname = substr($startfile, 0, strpos($startfile, ".tem.html"));
                        $line = content($line, $tname);
                    }
                    //////////////////////////////////////////////////////////////////////////////////////////////
                    // variable "!#marke" - hier werden die variablen in die ausgabe eingebaut
                    //////////////////////////////////////////////////////////////////////////////////////////////
                    // !#ausgaben array pruefen und evtl. einsetzen
                    if (strpos($line, "!#ausgaben_") !== false) {
                        foreach ($ausgaben as $name => $value) {
                            // php5 only
                            //                             $line = str_replace("!#ausgaben_$name", $value, $line, &$count);
                            //                             if ( $count > 0 ) {
                            //                                 if ( $debugging["html_enable"] ) $debugging["ausgabe"] .= "parser info (ausgaben): ".$name.$debugging["char"];
                            //                             }
                            $line = str_replace("!#ausgaben_{$name}", $value, $line);
                            #if ( $debugging["html_enable"] ) $debugging["ausgabe"] .= "parser info (ausgaben): ".$name.$debugging["char"];
                        }
                    }
                    // !#element array pruefen und evtl. einsetzen
                    if (strpos($line, "!#element_") !== false) {
                        foreach ((array) $element as $name => $value) {
                            $line = str_replace("!#element_{$name}", $value, $line);
                            #if ( $debugging["html_enable"] ) $debugging["ausgabe"] .= "parser info (element): ".$name." : ".$element[$name].$debugging["char"];
                        }
                    }
                    // !#environment array pruefen und evtl. einsetzen
                    if (strpos($line, "!#environment_") !== false) {
                        foreach ((array) $environment as $name => $value) {
                            $line = str_replace("!#environment_{$name}", $value, $line);
                            #if ( $debugging["html_enable"] ) $debugging["ausgabe"] .= "parser info (environment): ".$name." : ".$environment[$name].$debugging["char"];
                        }
                    }
                    // !#pathvars array pruefen und evtl. einsetzen
                    if (strpos($line, "!#pathvars_") !== false) {
                        foreach ((array) $pathvars as $name => $value) {
                            $line = str_replace("!#pathvars_{$name}", $value, $line);
                            #if ( $debugging["html_enable"] ) $debugging["ausgabe"] .= "parser info (pathvars): ".$name." : ".$pathvars[$name].$debugging["char"];
                        }
                    }
                    // !#lnk array pruefen und evtl. einsetzen
                    // $lnk wird in kekse.inc.php erstellt
                    if (strpos($line, "!#lnk_") !== false) {
                        foreach ((array) $lnk as $name => $value) {
                            $line = str_replace("!#lnk_{$name}", $value, $line);
                            #if ( $debugging["html_enable"] ) $debugging["ausgabe"] .= "parser info (lnk): ".$name." : ".$lnk[$name].$debugging["char"];
                        }
                    }
                    // ##loop-??? -> ##cont bereich bearbeiten
                    // und inhalte aus $dataloop array einbauen
                    if (strpos($line, "##loop") !== false) {
                        $loop = "1";
                        $loop_mark = explode("-", strstr($line, "##loop"), 3);
                        $loop_label = $loop_mark[1];
                        $loop_buffer = "";
                    } else {
                        if (strpos($line, "##cont") !== false) {
                            $loop = "0";
                            $loop_block = "";
                            $labelloop = $dataloop[$loop_label];
                            foreach ((array) $labelloop as $data) {
                                $loop_work = $loop_buffer;
                                foreach ((array) $data as $name => $value) {
                                    $loop_work = str_replace("!{" . $name . "}", $value, $loop_work);
                                }
                                $loop_work = preg_replace("/!\\{[0-9a-zA-Z]+\\}/", " ", $loop_work);
                                $loop_block .= $loop_work;
                            }
                            $line = $loop_block . trim($line) . "\n";
                        } elseif ($loop == "1") {
                            $loop_buffer .= trim($line) . "\n";
                            continue;
                        }
                    }
                    // ##hide-??? - ##show bereich bearbeiten
                    // nur wenn $hidedata["???"] verfuegbar ist einblenden
                    if (strpos($line, "##hide") !== false) {
                        $hide = "1";
                        $hide_mark = explode("-", strstr($line, "##hide"), 3);
                        $hide_label = $hide_mark[1];
                        $hide_buffer = "";
                        continue;
                        // marke ebenfalls kicken!
                    } else {
                        if (strpos($line, "##show") !== false) {
                            $hide = "0";
                            $hide_block = "";
                            if (is_array($hidedata[$hide_label])) {
                                foreach ($hidedata[$hide_label] as $name => $value) {
                                    $hide_buffer = str_replace("!{" . $name . "}", $value, $hide_buffer);
                                }
                                $hide_block = preg_replace("/!\\{[0-9a-zA-Z]+\\}/", " ", $hide_buffer);
                            }
                            #$line = $block.trim($line)."\n";
                            $line = $hide_block;
                            // marke ebenfalls kicken!
                        } elseif ($hide == "1") {
                            $hide_buffer .= trim($line) . "\n";
                            continue;
                        }
                    }
                    if (strpos($line, "!#") !== false && strpos($line, "<textarea") === false) {
                        $line = str_replace("!#date", gerdate(), $line);
                        $line = str_replace("!#specialvars_pagetitle", $specialvars["pagetitle"], $line);
                        $line = str_replace("!#specialvars_phpsessid", $specialvars["phpsessid"], $line);
                    }
                    //////////////////////////////////////////////////////////////////////////////////////////////
                    // language "#(label)" - zweiter lauf: hier kommt der text anhand von sprache,
                    //                       template und marke aus der datenbank
                    //                       ( wurde bei !#ausgaben_xxx ein #(label) eingebaut
                    //                       wird auch dieses mit content versehen )
                    //////////////////////////////////////////////////////////////////////////////////////////////
                    if (strpos($line, "#(") !== false || strpos($line, "g(") !== false) {
                        // wie heisst das template
                        $tname = substr($startfile, 0, strpos($startfile, ".tem.html"));
                        $line = content($line, $tname);
                    }
                    //////////////////////////////////////////////////////////////////////////////////////////////
                    // subdir support images
                    //////////////////////////////////////////////////////////////////////////////////////////////
                    if ($pathvars["subdir"] != "") {
                        // images in templates + funktionen
                        $line = str_replace("/images/", $pathvars["subdir"] . "/images/", $line);
                        // images im content aber nur bei der ausgabe (nicht im cms editor und im filesystem (magic.php))
                        #                        if ( strpos($line,"=".$cfg["file"]["base"]["webdir"]) === false && strpos($line,$cfg["file"]["base"]["maindir"]) === false ) {
                        if (strpos($line, "textarea") === false && strpos($line, $cfg["file"]["base"]["maindir"]) === false) {
                            $line = str_replace($cfg["file"]["base"]["webdir"], $pathvars["subdir"] . $cfg["file"]["base"]["webdir"], $line);
                        }
                        #else {
                        #    echo "####".$line."####";
                        #}
                    }
                    //////////////////////////////////////////////////////////////////////////////////////////////
                    // automatic "#{marke}" - rekursives !!!, automatisches einparsen von sub templates
                    //////////////////////////////////////////////////////////////////////////////////////////////
                    if (strpos($line, "#{") !== false) {
                        // tausche wenn nötig die inhalte aus
                        if (isset($mapping)) {
                            foreach ($mapping as $name => $value) {
                                #if ( $debugging["html_enable"] ) $debugging["ausgabe"] .= "parser info: #{".$name."}:"."#{".$value."}".$debugging["char"];
                                // evtl. globaler print button
                                #if ( strstr($line,"#{main") ) {
                                #  global $HTTP_GET_VARS;
                                #  if ( $HTTP_GET_VARS["print"] != true ) $print = "<table cellpadding=\"0\" cellspacing=\"0\" width=\"660\"><tr><td width=\"16\">&nbsp;</td><td width=\"628\" align=\"right\"><a href=\"".$pathvars["uri"]."?print=true\">Print Ausgabe</a></td><td width=\"16\">&nbsp;</td></tr></table>";
                                #  if ( $debugging["html_enable"] ) $debugging["ausgabe"] .= "print schalter: ".$environment["template"].$debugging["char"];
                                #}
                                #$line = str_replace("#{".$name."}","#{".$value."}".$print,$line);
                                #if ( strstr($line,"#{main}") ) {
                                // datenbank wechseln -> variablen in menuctrl.inc.php
                                if (strpos($line, "#{main}") !== false && $specialvars["dynlock"] == "") {
                                    if ($environment["fqdn"][0] == $specialvars["dyndb"]) {
                                        $db->selectDb($specialvars["dyndb"], FALSE);
                                        #echo "1: ".$db->getDb();
                                        $specialvars["changed"] = "###switchback###";
                                    }
                                }
                                $line = str_replace("#{" . $name . "}", "#{" . $value . "}" . $specialvars["changed"], $line);
                            }
                        }
                        // marke aus der zeile schneiden und anfang und ende merken
                        while (strpos($line, "#{") !== false) {
                            // wo beginnt die marke
                            $tokenbeg = strpos($line, "#{");
                            // wo endet die marke
                            $tokenend = strpos($line, "}", $tokenbeg);
                            // loopfix
                            // wie lang ist die marke
                            $tokenlen = $tokenend - $tokenbeg;
                            // anfang der zeile merken
                            $lline = substr($line, 0, $tokenbeg);
                            // ende der zeile merken
                            $rline = substr($line, $tokenend + 1);
                            // token name extrahieren
                            $token_name = substr($line, $tokenbeg + 2, $tokenlen - 2);
                            // den token aus der zeile loeschen
                            $token_replace = "#{" . $token_name . "}";
                            $line = str_replace($token_replace, "", $line);
                            if ($specialvars["crc32"] == -1) {
                                if ($environment["ebene"] != "" && $token_name == $environment["kategorie"]) {
                                    // das normale template ist!
                                    $newstartfile = eCRC($environment["ebene"]) . "." . $token_name . ".tem.html";
                                    if ($debugging["html_enable"]) {
                                        $debugging["ausgabe"] .= "crc32 template/content basis: " . $newstartfile . " for ebene (" . $environment["ebene"] . ")" . $debugging["char"];
                                    }
                                    // gibt es ein overwrite template?
                                    $path_element = explode("/", substr($environment["ebene"] . "/", 1) . $environment["kategorie"]);
                                    foreach ($path_element as $value) {
                                        $find_kategorie = array_pop($path_element);
                                        if ($value != "") {
                                            $find_ebene = "/" . implode("/", $path_element);
                                            if ($find_ebene != "/") {
                                                $overwrite_template = eCRC($find_ebene) . "." . $find_kategorie . ".tem.html";
                                            } else {
                                                $overwrite_template = $find_kategorie . ".tem.html";
                                            }
                                            if (!file_exists($pathvars["templates"] . $overwrite_template)) {
                                                if ($debugging["html_enable"]) {
                                                    $debugging["ausgabe"] .= "crc32 overwrite template search: " . $overwrite_template . " for ebene (" . $find_ebene . ")" . $debugging["char"];
                                                }
                                                $overwrite_template = "";
                                            } else {
                                                if ($debugging["html_enable"]) {
                                                    $debugging["ausgabe"] .= "crc32 overwrite template found: " . $overwrite_template . " for ebene (" . $find_ebene . ")" . $debugging["char"];
                                                }
                                                break;
                                            }
                                        }
                                    }
                                } else {
                                    // token name und template endung zusammen bauen
                                    $newstartfile = $token_name . ".tem.html";
                                }
                            } else {
                                // ist das eine sub kategorie ?
                                if ($token_name == $environment["katid"] && $environment["subkatid"] != "") {
                                    // token name und template endung zusammen bauen
                                    $newstartfile = $token_name . "." . $environment["subkatid"] . ".tem.html";
                                    // es gibt kein besonderes template
                                    if (!file_exists($pathvars["templates"] . $newstartfile)) {
                                        if ($debugging["html_enable"]) {
                                            $debugging["ausgabe"] .= "no " . $newstartfile . " template found using " . $token_name . ".tem.html" . $debugging["char"];
                                        }
                                        $newstartfile = $token_name . ".tem.html";
                                    }
                                } else {
                                    // token name und template endung zusammen bauen
                                    $newstartfile = $token_name . ".tem.html";
                                }
                            }
                            // gemerkten zeilen anfang ausgeben
                            echo ltrim($lline);
                            // parser nochmal aufrufen um untertemplate mit dem namen: "$token".tem.html zu parsen
                            rparser($newstartfile, $default_template, $overwrite_template);
                            // reset template overwrite outer recursive procedure
                            $overwrite_template = "";
                            if (strpos($rline, "###switchback###") !== false) {
                                $db->selectDb(DATABASE, FALSE);
                                #echo "<br />2: ".$db->getDb();
                                unset($specialvars["changed"]);
                                $rline = str_replace("###switchback###", "", $rline);
                            }
                            // gemerktes zeilen ende ausgeben
                            echo rtrim($rline) . "\n";
                        }
                    } else {
                        // eWeBuKi tag schutz part 4
                        $mark_o = array("#(", "g(", "#{", "!#");
                        $hide_o = array("::1::", "::2::", "::3::", "::4::");
                        $line = str_replace($hide_o, $mark_o, $line);
                        // da keine marken fuer sub templates da waren zeile unveraendert ausgeben
                        echo trim($line) . "\n";
                    }
                    # ende automatic "#{marke}"
                }
                # hier passiert alles bevor ##end
            }
            # ende zeile enthaelt kein ##begin
        }
        # ende der file while schleife
        fclose($fd);
    } else {
        if ($debugging["html_enable"]) {
            $debugging["ausgabe"] .= "rparser error: template " . $template . " not found!!!" . $debugging["char"];
        }
    }
    # ende der file existenz pruefung
}
コード例 #3
0
function rparser($startfile, $default_template)
{
    global $db, $debugging, $pathvars, $specialvars, $environment, $ausgaben, $element, $mapping;
    // wenn es fuer eine unterseite kein eigenes template gibt default.tem.html verwenden.
    $template = $pathvars["templates"] . $startfile;
    if (!file_exists($template) && $default_template != "") {
        if ($debugging["html_enable"]) {
            $debugging["ausgabe"] .= "rparser note: template \"" . $template . "\" not found using: " . $default_template . $debugging["char"];
        }
        $template = $pathvars["templates"] . $default_template;
    }
    if (file_exists($template)) {
        $fd = fopen($template, "r");
        while (!feof($fd)) {
            $line = fgets($fd, 1024);
            // alles vor ##begin und nach ##end wird nicht ausgegeben
            if (strstr($line, "##begin")) {
                $begin = "1";
            } else {
                if (strstr($line, "##end")) {
                    $begin = "0";
                } elseif ($begin == "1") {
                    // image path korrektur
                    if (strstr($line, "../../images/" . $environment["design"] . "/")) {
                        $line = str_replace("../../images/" . $environment["design"] . "/", $pathvars["images"], $line);
                    }
                    // style path korrektur
                    if (strstr($line, "../../css/" . $environment["design"] . ".css")) {
                        $line = str_replace("../../css/" . $environment["design"] . ".css", $pathvars["webcss"] . $environment["design"] . ".css", $line);
                    }
                    // image language korrektur
                    if (strstr($line, "/" . $specialvars["default_language"] . "_") && $environment["language"] != $specialvars["default_language"] && $environment["language"] != "") {
                        $line = str_replace("/ger_", "/" . $environment["language"] . "_", $line);
                    }
                    //////////////////////////////////////////////////////////////////////////////////////////////
                    // language "#(label)" - hier kommt der text anhand von sprache,
                    //                       template und marke aus der datenbank
                    //////////////////////////////////////////////////////////////////////////////////////////////
                    if (strstr($line, "#(")) {
                        // wie heisst das template
                        $tname = substr($startfile, 0, strpos($startfile, ".tem.html"));
                        $line = content($line, $tname);
                    }
                    //////////////////////////////////////////////////////////////////////////////////////////////
                    // variable "!#marke" - hier werden die variablen in die ausgabe eingebaut
                    //////////////////////////////////////////////////////////////////////////////////////////////
                    // !#ausgaben array pruefen und evtl. einsetzen
                    if (strstr($line, "!#ausgaben_")) {
                        foreach ($ausgaben as $name => $value) {
                            #if ( $debugging["html_enable"] ) $debugging["ausgabe"] .= "parser info: \$ausgaben[$name]".$debugging["char"];
                            $line = str_replace("!#ausgaben_{$name}", $value, $line);
                        }
                    }
                    // !#element array pruefen und evtl. einsetzen
                    if (strstr($line, "!#element_")) {
                        foreach ($element as $name => $value) {
                            #if ( $debugging["html_enable"] ) $debugging["ausgabe"] .= "parser info: \$element[$name]".$debugging["char"];
                            $line = str_replace("!#element_{$name}", $value, $line);
                        }
                    }
                    if (strstr($line, "!#")) {
                        $line = str_replace("!#pathvars_webroot", $pathvars["webroot"], $line);
                        $line = str_replace("!#pathvars_menuroot", $pathvars["menuroot"], $line);
                        $line = str_replace("!#specialvars_pagetitle", $specialvars["pagetitle"], $line);
                        $line = str_replace("!#date", gerdate(), $line);
                        $line = str_replace("!#environment_kekse", $environment["kekse"], $line);
                        $line = str_replace("!#environment_katid", $environment["katid"], $line);
                        $line = str_replace("!#environment_subkatid", $environment["subkatid"], $line);
                        $line = str_replace("!#specialvars_phpsessid", $specialvars["phpsessid"], $line);
                    }
                    //////////////////////////////////////////////////////////////////////////////////////////////
                    // automatic "#{marke}" - rekursives !!!, automatisches einparsen von sub templates
                    //////////////////////////////////////////////////////////////////////////////////////////////
                    if (strstr($line, "#{")) {
                        // tausche wenn nötig die inhalte aus
                        if (isset($mapping)) {
                            foreach ($mapping as $name => $value) {
                                #if ( $debugging["html_enable"] ) $debugging["ausgabe"] .= "parser info: #{".$name."}:"."#{".$value."}".$debugging["char"];
                                // evtl. globaler print button
                                #if ( strstr($line,"#{main") ) {
                                #  global $HTTP_GET_VARS;
                                #  if ( $HTTP_GET_VARS["print"] != true ) $print = "<table cellpadding=\"0\" cellspacing=\"0\" width=\"660\"><tr><td width=\"16\">&nbsp;</td><td width=\"628\" align=\"right\"><a href=\"".$pathvars["uri"]."?print=true\">Print Ausgabe</a></td><td width=\"16\">&nbsp;</td></tr></table>";
                                #  if ( $debugging["html_enable"] ) $debugging["ausgabe"] .= "print schalter: ".$environment["template"].$debugging["char"];
                                #}
                                #$line = str_replace("#{".$name."}","#{".$value."}".$print,$line);
                                #if ( strstr($line,"#{main}") ) {
                                // datenbank wechseln -> variablen in menuctrl.inc.php
                                if (strstr($line, "#{main}") && $specialvars["dynlock"] == "") {
                                    if ($environment["fqdn"][0] == $specialvars["dyndb"]) {
                                        $db->selectDb($specialvars["dyndb"], FALSE);
                                        #echo "1: ".$db->getDb();
                                        $specialvars["changed"] = "###switchback###";
                                    }
                                }
                                $line = str_replace("#{" . $name . "}", "#{" . $value . "}" . $specialvars["changed"], $line);
                            }
                        }
                        // marke aus der zeile schneiden und anfang und ende merken
                        while (strstr($line, "#{")) {
                            // wo beginnt die marke
                            $tokenbeg = strpos($line, "#{");
                            // wo endet die marke
                            $tokenend = strpos($line, "}", $tokenbeg);
                            // loopfix
                            // wie lang ist die marke
                            $tokenlen = $tokenend - $tokenbeg;
                            // anfang der zeile merken
                            $lline = substr($line, 0, $tokenbeg);
                            // ende der zeile merken
                            $rline = substr($line, $tokenend + 1);
                            // token name extrahieren
                            $token_name = substr($line, $tokenbeg + 2, $tokenlen - 2);
                            // den token aus der zeile loeschen
                            $token_replace = "#{" . $token_name . "}";
                            $line = str_replace($token_replace, "", $line);
                            if ($specialvars["crc32"] == -1) {
                                if ($environment["ebene"] != "" && $token_name == $environment["kategorie"]) {
                                    $path_element = explode("/", substr($environment["ebene"] . "/", 1));
                                    krsort($path_element);
                                    foreach ($path_element as $name => $value) {
                                        if ($value == "") {
                                            $cutstring = $value;
                                        } else {
                                            $cutstring = "/" . $value . $cutstring;
                                        }
                                        $tetstring = str_replace($cutstring, "", $environment["ebene"]);
                                        if ($tetstring != "") {
                                            $startfile = crc32($tetstring) . "." . $token_name . ".tem.html";
                                            if (!file_exists($pathvars["templates"] . $startfile)) {
                                                if ($debugging["html_enable"]) {
                                                    $debugging["ausgabe"] .= "no " . $startfile . " crc32 template found for ebene (" . $tetstring . ")" . $debugging["char"];
                                                }
                                            } else {
                                                break;
                                                // thanks @ Günther Wach
                                            }
                                        }
                                    }
                                } else {
                                    // token name und template endung zusammen bauen
                                    $startfile = $token_name . ".tem.html";
                                }
                            } else {
                                // ist das eine sub kategorie ?
                                if ($token_name == $environment["katid"] && $environment["subkatid"] != "") {
                                    // token name und template endung zusammen bauen
                                    $startfile = $token_name . "." . $environment["subkatid"] . ".tem.html";
                                    // es gibt kein besonderes template
                                    if (!file_exists($pathvars["templates"] . $startfile)) {
                                        if ($debugging["html_enable"]) {
                                            $debugging["ausgabe"] .= "no " . $startfile . " template found using " . $token_name . ".tem.html" . $debugging["char"];
                                        }
                                        $startfile = $token_name . ".tem.html";
                                    }
                                } else {
                                    // token name und template endung zusammen bauen
                                    $startfile = $token_name . ".tem.html";
                                }
                            }
                            // gemerkten zeilen anfang ausgeben
                            echo $lline;
                            // parser nochmal aufrufen um untertemplate mit dem namen: "$token".tem.html zu parsen
                            rparser($startfile, $default_template);
                            if (strstr($rline, "###switchback###")) {
                                $db->selectDb(DATABASE, FALSE);
                                #echo "<br>2: ".$db->getDb();
                                unset($specialvars["changed"]);
                                $rline = str_replace("###switchback###", "", $rline);
                            }
                            // gemerktes zeilen ende ausgeben
                            echo $rline;
                        }
                    } else {
                        // da keine marken fuer sub templates da waren zeile unveraendert ausgeben
                        echo $line;
                    }
                    # ende automatic "#{marke}"
                }
                # hier passiert alles bevor ##end
            }
            # ende zeile enthaelt kein ##begin
        }
        # ende der file while schleife
        fclose($fd);
    } else {
        if ($debugging["html_enable"]) {
            $debugging["ausgabe"] .= "rparser error: template " . $template . " not found!!!" . $debugging["char"];
        }
    }
    # ende der file existenz pruefung
}