ilch Forum » Ilch Clan 1.1 » Fehlersuche und Probleme » Menüebene 3 in Abhängigkeit von 2 zeigen

Geschlossen
  1. #1
    User Pic
    Estridsson Mitglied
    Registriert seit
    30.10.2010
    Beiträge
    23
    Beitragswertungen
    0 Beitragspunkte
    Guten Morgen Community,

    ich habe in der SuFu einen Thread entdeckt (www.ilch.de/forum-showposts-31485.html#216367) und habe nun mein Menü geändert. Im Moment wird die Ebene 2/3 erst angezeigt wenn man auf den richtigen Punkt in der Ebene 1 klickt.

    ZitatZitat geschrieben von Beispiel 1

    + Home
    + Squads
    + + Team 1
    + + + Wars
    + + Team 2
    + + Team 3


    <?php
    // Copyright by Manuel
    // Support www.ilch.de
    defined ('main') or die ('no direct access');
     
    if (!isset($ILCH_HEADER_ADDITIONS)) {
        $ILCH_HEADER_ADDITIONS = '';
    }
    if (!isset($ILCH_BODYEND_ADDITIONS)) {
        $ILCH_BODYEND_ADDITIONS = '';
    }
    class design extends tpl {
        var $html;
        var $design;
        var $vars;
        var $was;
        var $file;
     
        function design ($title, $hmenu, $was = 1, $file = null)
        {
            global $allgAr;
     
            if (!is_null($file)) {
                echo '<div style="display: block; background-color: #FFFFFF; border: 2px solid #ff0000;">!!Man konnte in einer PHP Datei eine spezielle Index angeben. Damit das Design fuer diese Datei anders aussieht. Diese Funktion wurde ersetzt. Weitere Informationen im Forum auf ilch.de ... Thema: <a href="http://www.ilch.de/forum-showposts-13758-p1.html#108812">http://www.ilch.de/forum-showposts-13758-p1.html#108812</a></div>';
            }
     
            $this->vars = array();
            $this->file = $file; # setzte das file standart 0 weil durch was definiert
            $this->was = $was; # 0 = smalindex, 1 = normal index , 2 = admin
     
            $this->design = $this->get_design();
            $link = $this->htmlfile();
     
            $tpl = new tpl ($link, 2);
            if ($tpl->list_exists ('boxleft')) {
                $tpl->set ('boxleft' , $this->get_boxes ('l', $tpl));
            }
            if ($tpl->list_exists ('boxright')) {
                $tpl->set ('boxright' , $this->get_boxes ('r', $tpl));
            }
            // ab 0.6 =  ... 5 menu listen moeglich
            for($i = 1;$i <= 5;$i++) {
                if ($tpl->list_exists ('menunr' . $i)) {
                    $tpl->set ('menunr' . $i , $this->get_boxes ($i, $tpl));
                }
            }
     
            $ar = array
                ('TITLE' => $this->escape_explode($title),
                'HMENU' => $this->escape_explode($hmenu),
                'SITENAME' => $this->escape_explode($allgAr['title']),
                'hmenuende' => '',
                'vmenuende' => '',
                'hmenubegi' => '',
                'vmenubegi' => '',
                'hmenupoint' => '',
                'vmenupoint' => '',
                'DESIGN' => $this->design
                );
            $tpl->set_ar($ar);
            $this->html = $tpl->get(0);
            $this->html .= '{EXPLODE}';
            $this->html .= $tpl->get(1);
            unset ($tpl);
     
            $zsave0 = array();
            preg_match_all ("/\{_boxes_([^\{\}]+)\}/" , $this->html , $zsave0);
     
            $this->replace_boxes($zsave0[1]);
            unset ($zsave0);
            $this->vars_replace();
            unset ($this->vars);
     
            $this->html = explode('{EXPLODE}', $this->html);
        }
     
        function addheader($text)
        {
            if (isset($this->html[0])) {
                $this->html[0] = str_replace('</head>',$text."\n</head>" , $this->html[0] );
                return true;
            } else {
                return false;
            }
        }
     
        function header ()
        {
            global $ILCH_HEADER_ADDITIONS;
            $this->addheader($ILCH_HEADER_ADDITIONS);
            echo $this->html[0];
            unset ($this->html[0]);
        }
     
        function addtobodyend($text)
        {
            if (isset($this->html[1])) {
                $this->html[1] = str_replace('</body>',$text."\n</body>" , $this->html[1] );
                return true;
            } else {
                return false;
            }
        }
     
        function footer ($exit = 0)
        {
            global $ILCH_BODYEND_ADDITIONS;
            $this->addtobodyend($ILCH_BODYEND_ADDITIONS);
            echo $this->html[1];
            unset ($this->html[1]);
            if ($exit == 1) {
                exit();
            }
        }
     
        function escape_explode ($s)
        {
            $s = str_replace('{EXPLODE}', '&#123;EXPLODE&#125;', $s);
            return ($s);
        }
     
        function htmlfile_ini ()
        {
            global $menu;
            $ma = $menu->get_string_ar();
            $ia = array();
            if (!file_exists('include/designs/' . $this->design . '/design.ini')) {
                return (false);
            }
            $ia = parse_ini_file ('include/designs/' . $this->design . '/design.ini');
            arsort($ma);
            krsort ($ia);
            foreach ($ia as $k => $v) {
                $k = preg_replace("/[^a-zA-Z0-9-*]/", "", $k);
                $k = str_replace('*', '[^-]+', $k);
                foreach ($ma as $k1 => $v1) {
                    if (preg_match("/" . $k . "/", $k1) AND file_exists('include/designs/' . $this->design . '/' . $v)) {
                        return ($v);
                    }
                }
            }
            return (false);
        }
     
        function htmlfile ()
        {
            $ini = $this->htmlfile_ini ();
            /*
            if ( !is_null ($this->file) AND file_exists ('include/designs/'.$this->design.'/templates/'.$this->file)) {
          $f = 'designs/'.$this->design.'/templates/'.$this->file;
        } elseif ( !is_null ($this->file) AND file_exists ('include/templates/'.$this->file)) {
          $f = 'templates/'.$this->file;
            */
            if ($this->was == 1 AND $ini !== false) {
                $f = 'designs/' . $this->design . '/' . $ini;
            } elseif ($this->was == 0 AND file_exists ('include/templates/' . $this->design . '/templates/small_index.htm')) {
                $f = 'templates/' . $this->design . '/templates/small_index.htm';
            } elseif ($this->was == 0) {
                $f = 'templates/small_index.htm';
            } elseif ($this->was == 1) {
                $f = 'designs/' . $this->design . '/index.htm';
            } elseif ($this->was == 2) {
                $f = 'admin/templates/index.htm';
            }
            return ($f);
        }
     
        function replace_boxes ($zsave0)
        {
            foreach ($zsave0 as $v) {
                $dat = strtolower($v);
                $buffer = $this->get_boxcontent ($dat);
                if ($buffer !== false) {
                    $this->vars['_boxes_' . $v] = $buffer;
                }
            }
            if (!is_array($this->vars)) {
                $this->vars = array();
            }
        }
     
        function vars_replace()
        {
            foreach ($this->vars as $k => $v) {
                $this->html = str_replace('{' . $k . '}', $v, $this->html);
            }
        }
        // ####
        function get_boxes ($wo , $tpl)
        {
            global $lang, $allgAr, $menu;
            if (is_numeric($wo)) {
                $datei = 'menunr' . $wo;
            } elseif ($wo == 'l') {
                $datei = 'boxleft';
                $wo = 1;
            } elseif ($wo == 'r') {
                $datei = 'boxright';
                $wo = 2;
            }
     
            $retur = '';
            $ex_ebene = 0;
            $ex_was = 1;
            $firstmep = false;
            $hovmenup = '';
            $abf = "SELECT * FROM `prefix_menu` WHERE wo = " . $wo . " AND ( recht >= " . $_SESSION['authright'] . " OR recht = 0 ) ORDER by pos";
            $erg = db_query($abf);
            while ($r = db_fetch_assoc($erg)) {
                $menuar[$r['pos']] = $r;
                $menupaths[$r['path']] = $r['pos'];
            }
            //Aktiven Punkt herausfinden
            foreach(array_reverse($menu->get_string_ar()) as $path){
               $path = str_replace('self-','',$path);
               if (isset($menupaths[$path])) {
                   $act_pos = $menupaths[$path];
                   break;
               }
            }
            //Punkte löschen, die nicht angezeigt werden sollen
            $todel = array();
            //Punkte davor
            for($i = $act_pos; $i > -1; $i--){
                if (isset($menuar[$i]) and $menuar[$i]['ebene'] == 0) {
                    $todel_before = $i;
                    break;
                }
            }
            $todel_after = count($menuar);
            for($i = $act_pos+1; $i < $todel_after; $i++){
                if (isset($menuar[$i]) and $menuar[$i]['ebene'] == 0) {
                    $todel_after = $i;
                    break;
                }
            }
            foreach ($menuar as $pos => $row) {
                if ($row['ebene'] > 0 and ($pos < $todel_before or $pos > $todel_after)) {
                    continue;
                }
                $subhauptx = $row['was'];
                $whileMenP = ($subhauptx >= 7 ? true : false);
                if (($row['was'] >= 7 AND $ex_was == 1) OR ($ex_ebene < ($row['ebene']-1)) OR ($ex_was <= 4 AND $row['ebene'] <> 0) OR ($row['was'] >= 7 AND !$tpl->list_exists($hovmenup))) {
                    continue;
                }
                // nur wenn ein menu in die variable $menuzw geschrieben wurde
                // wird in diese if abfrage gesprungen
                if (($whileMenP === false) AND !empty($menuzw)) {
                    $menuzw .= $this->get_boxes_get_menu_close ($ex_ebene, 0, $menuzw, $wmpE, $wmpTE, $wmpTEE);
                    $retur .= $tpl->list_get($datei, array (htmlentities($boxname), $menuzw . $menuzwE));
                    $menuzw = '';
                }
                if ($row['was'] == 1) {
                    // die box wird direkt in die to return variable geschrieben
                    $buffer = $this->get_boxcontent($row['path']);
                    $retur .= $tpl->list_get($datei, array ($row['name'] , $buffer));
                } elseif ($row['was'] >= 2 AND $row['was'] <= 4) {
                    // der name des menues wird gesetzt
                    // und die variable wird gesetzt.
                    $boxname = $row['name'];
                    $menuzw = '';
                    $menuzwE = '';
                    $ex_ebene = 0; # ex ebene
                    $hovmenu = '';
                    if ($row['was'] == 2 AND $tpl->list_exists('hmenupoint')) {
                        $hovmenu = 'hmenu';
                    } elseif ($row['was'] == 3 AND $tpl->list_exists('vmenupoint')) {
                        $hovmenu = 'vmenu';
                    }
                    $firstmep = true;
                    if (!empty($hovmenu)) {
                        $menuzw .= $tpl->list_get($hovmenu . 'begi', array());
                        $menuzwE .= $tpl->list_get($hovmenu . 'ende', array());
                    }
                    $hovmenup = $hovmenu . 'point';
                } elseif ($whileMenP) {
                    // menupunkt wird generiert
                    $ebene = $row['ebene'];
                    $menuTarget = ($subhauptx == 8 ? '_blank' : '_self');
                    list ($wmpA, $wmpE, $wmpTE, $wmpTEE) = explode ('|', $tpl->list_get ($hovmenup, array ($menuTarget, ($subhauptx == 8 ? '' : 'index.php?') . $row['path'], $row['name'], ($row['pos'] == $act_pos ? 'active' : 'inactive'))));
                    if (!empty($menuzw) AND $firstmep === false) {
                        $menuzw .= $this->get_boxes_get_menu_close ($ex_ebene, $ebene, $menuzw, $wmpE, $wmpTE, $wmpTEE);
                    }
                    $menuzw .= $wmpA;
                    $firstmep = false;
                }
     
                $ex_was = $row['was'];
                $ex_ebene = $row['ebene'];
            }
            if (!empty($menuzw)) {
                $menuzw .= $this->get_boxes_get_menu_close ($ex_ebene, 0, $menuzw, $wmpE, $wmpTE, $wmpTEE);
                $retur .= $tpl->list_get($datei, array (htmlentities($boxname), $menuzw . $menuzwE));
            }
            return ($retur);
        }
     
        function get_boxes_get_menu_close ($ex_ebene, $ebene, $menuzw, $wmpE, $wmpTE, $wmpTEE)
        {
            $menu1 = '';
            if ($ex_ebene == $ebene AND !empty($menuzw)) {
                $menu1 .= $wmpE . "\n";
            } elseif ($ex_ebene > $ebene) {
                $menu1 .= $wmpE . "\n";
                for($i = 0;$i < ($ex_ebene - $ebene); $i++) {
                    $menu1 .= $wmpTEE . "\n";
                }
            } elseif ($ex_ebene < $ebene) {
                $menu1 .= $wmpTE . "\n";
            }
            return ($menu1);
        }
     
        function get_boxcontent ($box)
        {
            global $lang, $allgAr, $menu,$ILCH_HEADER_ADDITIONS,$ILCH_BODYEND_ADDITIONS;
            if (file_exists('include/boxes/' . $box)) {
                $pfad = 'include/boxes/' . $box;
            } elseif (file_exists ('include/contents/selfbp/selfb/' . str_replace('self_', '', $box))) {
                $pfad = 'include/contents/selfbp/selfb/' . str_replace('self_', '', $box);
            } elseif (file_exists('include/boxes/' . $box . '.php')) {
                $pfad = 'include/boxes/' . $box . '.php';
            } elseif (file_exists('include/boxes/' . $box . '.htm')) {
                $pfad = 'include/boxes/' . $box . '.htm';
            } elseif (file_exists ('include/contents/selfbp/selfb/' . str_replace('self_', '', $box) . '.php')) {
                $pfad = 'include/contents/selfbp/selfb/' . str_replace('self_', '', $box) . '.php';
            } elseif (file_exists ('include/contents/selfbp/selfb/' . str_replace('self_', '', $box) . '.htm')) {
                $pfad = 'include/contents/selfbp/selfb/' . str_replace('self_', '', $box) . '.htm';
            } else {
                return (false);
            }
            ob_start();
            require_once($pfad);
            $buffer = $this->escape_explode(ob_get_contents());
            ob_end_clean();
            return($buffer);
        }
    }
     
    ?>


    Ich hätte jetzt aber gerne das der Punkt "Wars" aus der 3. Ebene erst angezeigt wird, wenn man den Menüpunkt der Ebene 2 anklickt. Kann mir vielleicht einer sagen was ich dort noch ändern muss?

    Achja, die Lösung mit der design.ini kommt für mich nicht in Frage, da das Menü dynamisch sein muss!

    Gruß Estridsson


    Zuletzt modifiziert von Estridsson am 02.01.2012 - 11:14:03
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu Fehlersuche und Probleme

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten