Subnavigation mit Aufklappfunktion

Gesperrt
bohrmaen
Beiträge: 5
Registriert: Di 3. Jan 2012, 18:25
Kontaktdaten:

Subnavigation mit Aufklappfunktion

Beitrag von bohrmaen »

Hallo,

ich verwende auf meiner Seite eine geteilte Navigation, siehe hier: http://whg-lu.de/relaunch2012/cms/

Durch einen Artikel aus dem Forum habe ich es nun schon geschafft, dass zumindest in der linken Leiste immer nur die Unternavigationspunkte gezeigt werden, die auch zum ausgewählten Punkt der Hauptnavigation gehören. Jedoch habe ich nun das Problem, dass er mir immer alle Punkte und alle deren Unterpunkte (Level 2,3,4) anzeigt. Ich möchte, dass mir anfangs nur die Punkt des zweiten Levens angezeigt werden und erst beim Kiicken die Punkte von Level 3 respektive Level 4.

Ich verwende folgenenden Code im Input des Moduls:

Code: Alles auswählen

    <?php
    /**
    * $RCSfile$
    *
    * Description:
    * Main Navigation, displays Navigation from a starting idcat down to the max. level set.
    * For now (as of 2009-01-12) all subcategories are put inside one <ul> and are assigned css classes
    * to distinguish level depth, first/last and active item property.
    *
    * Module requires two client settings:
    * navigation_main_standard | start_idcat
    * navigation_main_standard | level_depth
    *
    * To modify the behaviour of the module (e.g. style of URL, CSS classes, ...), you need to edit Contenido_NavMain_Util::loopCats
    * @see {frontend}/includes/Util/Modules/Contenido_NavMain_Util.class.php
    *
    * @version 1.0.0
    * @author Rudi Bieller
    * @copyright four for business AG <www.4fb.de>
    *
    * {@internal
    * created 2009-01-12
    * }}
    *
    * $Id: Navigation_Standard.php 3444 2009-01-19 11:42:59Z rudi.bieller $
    */


    if (!isset($db)) {
        $db = new DB_Contenido();
    }
    if (!isset($tpl)) {
        $tpl = new Template();
    }
    $tpl->reset();

    cInclude('classes', 'Contenido_FrontendNavigation/Contenido_FrontendNavigation.class.php');
    cInclude('frontend', 'includes/Util/Modules/Contenido_NavMain_Util.class.php');

    $iStartIdcat = getEffectiveSetting('navigation', 'idcat-home', 1);
    $iSelectedDepth = getEffectiveSetting('navigation', 'level-depth', 2);

    cInclude("classes", "class.category.php");
    cInclude("classes", "class.cat.php");

    $maincatid  = $idcat;
    $maincatid2 = $idcat;

    // Vorgehen ist etwas verzwickt. Es gibt ein Problem, wenn die aktuelle Kategorie NICHT Teil des gewählten auszugebenden Navigationsbaumes ist.
    // Die untenstehenden while-Schleife führt ins Nirvana und hängt das System auf.
    // Daher muss zunächst überprüft werden, ob die aktuell angeklickte Kategorie Teil des auszugebenden Navigationsbaums ist - falls nein, muss die Sub-Schleife umgangen werden.
    // Wir ermitteln das Level der aktuellen idcat und rechnen uns entsprechend viele Schritte hoch im Navibaum, um die Rootkategorie zu finden.
    // Diese vergleichen wir mit der gewählten Startkategorie der Navigation - ist sie gleich, wird die das Submenü berechnet, sonst nicht.

    // Rootkategorie ermitteln über das Level der aktuellen Kategorie
    $oFeNav2 = new Contenido_FrontendNavigation($db, $cfg, $client, $lang, $cfgClient);
    $idcatlevel = $oFeNav2->getLevel($idcat);

    for ( $i=0; $i < $idcatlevel; $i++) {
       $oActualCategory2 = new CategoryItem($maincatid2);
       $maincatid2 = $oActualCategory2->get("parentid");
    }

    if ( $maincatid2 == $iStartIdcat ) {
    while ( $maincatid !=  $iStartIdcat ) {
       $iParentID = $maincatid;   // bewahre den alten Wert, falls der neue die oberste Kategorie ist
       $oActualCategory = new CategoryItem($maincatid);
       $maincatid = $oActualCategory->get("parentid");
    }

    /* so lange schleifen, bis $maincatid == $iStartIdcat ist, dann war der Wert von $iParentID der korrekte, den also jeweils speichern */

    /* Dann die zweite Ausgabe: */

    if ($iParentID > 0) {
        $oFeNav = new Contenido_FrontendNavigation($db, $cfg, $client, $lang, $cfgClient);
        $oFeNav->setAuth($auth);
        $oFeNav->setRootCat($iParentID);
        $oSubCategories = $oFeNav->getSubCategories($iParentID, true, true, 1);
        // see if there are any subcategories to display
        if ($oSubCategories->count() > 0) {
            $aLevelInfo = array();
            $aDepthInfo = array();
            $aDepthInfo[0] = 0;
            $aDepthInfo[1] = $iSelectedDepth;
            foreach ($oSubCategories as $oSubCategory) {
                Contenido_NavMain_Util::loopCats($oSubCategory, $oFeNav, $tpl, $cfg, $lang, $aLevelInfo, intval($idcat), $aDepthInfo);
            }
            echo '<div id="left-navi">';
            $tpl->generate('templates/navigation_standard.html');
            echo '</div>';
        }
    } else {
        echo '<p>&nbsp;</p>';
    }
    } // if actualid-ende

    ?>
Für hilfreiche Tipps wäre ich sehr dankbar!

Viele Grüße,
Andy
McHubi
Beiträge: 1223
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Subnavigation mit Aufklappfunktion

Beitrag von McHubi »

Hallo Andy,

das scheint mir die Hauptnavigation zu sein, die standardmäßig bei Contenido 4.8 dabei ist.

Schau Dir mal den Output an, interessant für Dich ist die Zeile 39:

Code: Alles auswählen

$iStartIdcat = getEffectiveSetting('navigation', 'idcat-home', 1);
Die Hauptnavigation muss "wissen", welche Kategorie der Startpunkt für den Aufbau des Navigationsbaumes ist. Das passiert normalerweise über die Mandanteneinstellungen:

Typ|Name|Wert
navigation|idcat-home|1


Wenn in den Mandanteneinstellungen nichts steht, wird automatisch die 1 verwendet, die Du in der obigen Code-Zeile siehst. Jetzt zur möglichen Lösung Deines Problems:

Zunächst würde ich den Ursprungszustand der Navigation wiederherstellen, Du scheinst da ja lt. den Kommentaren in Deinem Code schon an einigen Stellen was verändert zu haben. Bei der ursprünglichen Version werden nämlich nicht alle Ebenen automatisch aufgeklappt. Der einzige Knackpunkt dürfte also die Übergabe der richtigen Startkategorie sein und zwar die, die gerade in Deiner horizontalen Hauptnavi ausgewählt wurde, richtig? Probier mal diese idcat einfach direkt an die vertikale Navi zu übergeben:

Code: Alles auswählen

//$iStartIdcat = getEffectiveSetting('navigation', 'idcat-home', 1);
$iStartIdcat = $idcat;
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)
bohrmaen
Beiträge: 5
Registriert: Di 3. Jan 2012, 18:25
Kontaktdaten:

Re: Subnavigation mit Aufklappfunktion

Beitrag von bohrmaen »

Hi McHubi,

danke für deine Antwort! Genau, die Idee mit der Standardmainnavi hatte ich auch und hab es gestern getestet, aber es wollte nicht klappen. Habe nun noch deinen Tipp mit der Weitergabe der geklickten idCat übernommen, nun geht es.

Ich kann es nun so verwenden, aber es wäre besser, wenn beim Aufklappen dann nicht die Übergeordneten Punkte verschwinden würden. Vielleicht kann ich da noch was basteln oder im Forum finden.

Danke!

Viele Grüße,
Andy
bohrmaen
Beiträge: 5
Registriert: Di 3. Jan 2012, 18:25
Kontaktdaten:

Re: Subnavigation mit Aufklappfunktion

Beitrag von bohrmaen »

OK ich hab es gelöst. Hab die Standard Navigation_Main wiederhergestellt und dann gemerkt, dass ich zuvor mal die Contenido_NavMain_Util.class.php geändert hatte. Hier auch die original wieder hergestellt, nun alles nach Wunsch.

Danke & VG
Andy
Gesperrt