Navigation mit allen Untermenüs immer geöffnet

Gesperrt
steininger
Beiträge: 3
Registriert: Mo 13. Aug 2007, 13:35
Kontaktdaten:

Navigation mit allen Untermenüs immer geöffnet

Beitrag von steininger » Do 18. Apr 2013, 18:58

Hallo zusammen,

ich möchte eine horizontale Navigation bauen, bei der die jeweiligen Submenüs sichtbar werden, wenn ich per Mouseover über die Hauptmenüpunkte gehe. Dafür müssen im Quellcode alle Menü-Unter-Punkte stehen ... der HTML-CSS-Code ist auch schon fertig vorbereitet und funktioniert, bloß Contenido gibt mir das Submenü immer nur für den "aktuell ausgewählten" Hauptmenüpunkt aus und nicht für alle vorhandenen Unter-Menüpunkte ...

Mein Ziel ist, dass Contenido als Beispiel folgenden Quellcode ausgibt:

Code: Alles auswählen

<div id="untermenu">
	<ul class="navlist">
		<li><a href=#" class="erste_ebene_active">Bananen</a>
			<ul>
				<li><a href="#" class="zweite_ebene">Gelbe Bananen</a></li>
				<li><a href="#" class="zweite_ebene">Blaue Bananen</a></li>
				<li><a href="#" class="zweite_ebene">Rote Bananen</a></li>
			</ul>
		</li>
		<li><a href="#" class="erste_ebene">Birnen</a></li>
		<li><a href="#" class="erste_ebene">Kirschen</a>
			<ul>
				<li><a href="#" class="zweite_ebene">Grüne Kirschen</a></li>
				<li><a href="#" class="zweite_ebene">Rote Kirschen</a></li>
				<li><a href="#" class="zweite_ebene">Gelbe Kirschen</a></li>
			</ul>
		</li>
		<li><a href="#" class="erste_ebene">Äpfel</a>
			<ul>
				<li><a href="#" class="zweite_ebene">Bunte Äpfel</a><!--
					<ul>
						<li><a href="#" class="dritte_ebene">Rot/Gelbe Äpfel</a></li>
						<li><a href="#" class="dritte_ebene">Blau/Gelbe Äpfel/a></li>
						<li><a href="#" class="dritte_ebene">Rot/Blaue Äpfel</a></li>
						<li><a href="#" class="dritte_ebene">Rot/Grüne Äpfel</a></li>
					</ul>-->
				</li>
				<li><a href="#" class="zweite_ebene">Einfarbige Äpfel</a></li>
				<li><a href="#" class="zweite_ebene">Äpfel in Schwarz/Weiß</a></li>
			</ul>
		</li>
	</ul>
</div>
Leider gibt es mir aber nur folgenden Code aus:

Code: Alles auswählen

<div id="untermenu">
	<ul class="navlist">
		<li><a href=#" class="erste_ebene_active">Bananen</a>
			<ul>
				<li><a href="#" class="zweite_ebene">Gelbe Bananen</a></li>
				<li><a href="#" class="zweite_ebene">Blaue Bananen</a></li>
				<li><a href="#" class="zweite_ebene">Rote Bananen</a></li>
			</ul>
		</li>
		<li><a href="#" class="erste_ebene">Birnen</a></li>
		<li><a href="#" class="erste_ebene">Kirschen</a></li>
		<li><a href="#" class="erste_ebene">Äpfel</a></li>
	</ul>
</div>
Folgende Navigations benutze ich:
* @autor Jan Lengowski <Jan.Lengowski@4fb.de>
* @copyright four for business AG 2003

Code: Alles auswählen

<?php
if ( !is_object($db2) ) {
    $db2 = new DB_Contenido;
}

	$sichtbar="CMS_VALUE[1]";	

/**
 * Check if a category is child
 * of another category
 *
 * @return boolean true/false
 * @author Jan Lengowski <Jan.Lengowski@4fb.de>
 * @copyright four for business AG 2003
 */
if (!function_exists("catIsChildOf"))
{
    function catIsChildOf($id, $idparent) {
    
        global $cfg, $client, $lang;
    
        $db = new DB_Contenido;
    
        $parent = $id;
    
        while ( $parent != 0 ) {
    
            $sql = "SELECT
                        a.parentid
                    FROM
                        ".$cfg["tab"]["cat"]." AS a,
                        ".$cfg["tab"]["cat_lang"]." AS b
                    WHERE
                        a.idclient  = '".$client."' AND
                        b.idlang    = '".$lang."' AND
                        a.idcat     = b.idcat AND
                        a.idcat   = '".$parent."'";
    
            $db->query($sql);
            $db->next_record();
    
            $parent = $db->f("parentid");
    
            if ($parent == $idparent) {
                return true;
            }
    
        }
    
        return false;
    
    }
}

if ( catIsChildOf($idcat, "CMS_VALUE[0]") ) {
    $sel_idcat = $idcat;
} else {
    $sel_idcat = "CMS_VALUE[0]";
}

/* Include Template Class */
include_once($cfg["path"]["contenido"] . 'classes/class.template.php');

/**
 * Array storing alle the
 * navigation data
 */
$navitems = array();


/* Template Instance */
$tpl = new Template;

/**
 * Recursive function for creating
 * the navigation array
 * @param Int $idcat Category id
 */
function nav($idcat) {

        global $navitems, $client, $lang, $cfg;

        $db  = new DB_Contenido;
        $db2 = new DB_Contenido;

        $sql = "SELECT parentid FROM ".$cfg["tab"]["cat"]." WHERE idcat = '$idcat'";

        $db->query($sql);
        $db->next_record();

        $parentid = $db->f("parentid");

        if ( $parentid == 0 ) {

           if ( $idcat != "CMS_VALUE[0]" ){

                $navitems = array();
              
                $sql = "SELECT
                            A.idcat,
                            C.name
                        FROM
                            ".$cfg["tab"]["cat_tree"]." AS A,
                            ".$cfg["tab"]["cat"]." AS B,
                            ".$cfg["tab"]["cat_lang"]." AS C
                        WHERE
                            A.idcat     = B.idcat   AND
                            B.idcat     = C.idcat   AND
                            B.idclient  = '$client' AND
                            C.idlang    = '$lang'   AND
                            C.visible   = '1'       AND
                            B.parentid  = 'CMS_VALUE[0]'
                        ORDER
                            BY A.idtree";

                      $db->query($sql);

                      while ($db->next_record()) {

                            /* Check for external redirects... */
                            $sql = "SELECT
                                        a.external_redirect AS ext
                                    FROM
                                        ".$cfg["tab"]["art_lang"]." AS a,
                                        ".$cfg["tab"]["cat_art"]." AS b,
                                        ".$cfg["tab"]["cat"]." AS c
                                    WHERE
                                        b.idcat     = '".$db->f("idcat")."' AND
                                        b.is_start  = '1' AND
                                        c.idclient  = '".$client."' AND
                                        c.idcat     = b.idcat AND
                                        a.idart     = b.idart AND
                                        a.idlang    = '".$lang."'";

                            $db2->query($sql);
                            $db2->next_record();

                            $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';

                            $navitems[$db->f("idcat")] = array("idcat"      => $db->f("idcat"),
                                                                "name"      => $db->f("name"),
                                                                "target"    => $target);
                      }

           }
           
           return true;
        }

        $sql = "SELECT
                    A.idcat,
                    C.name
                FROM
                    ".$cfg["tab"]["cat_tree"]." AS A,
                    ".$cfg["tab"]["cat"]." AS B,
                    ".$cfg["tab"]["cat_lang"]." AS C
                WHERE
                    A.idcat     = B.idcat   AND
                    B.idcat     = C.idcat   AND
                    B.idclient  = '$client' AND
                    C.idlang    = '$lang'   AND
                    C.visible   = '1'       AND
                    B.parentid  = '$parentid'
                ORDER BY
                    A.idtree";

        $db->query($sql);

        while ($db->next_record()) {

                /* Check for external redirects... */
                $sql = "SELECT
                            a.external_redirect AS ext
                        FROM
                            ".$cfg["tab"]["art_lang"]." AS a,
                            ".$cfg["tab"]["cat_art"]." AS b,
                            ".$cfg["tab"]["cat"]." AS c
                        WHERE
                            b.idcat     = '".$db->f("idcat")."' AND
                            b.is_start  = '1' AND
                            c.idclient  = '".$client."' AND
                            c.idcat     = b.idcat AND
                            a.idart     = b.idart AND
                            a.idlang    = '".$lang."'";

                $db2->query($sql);
                $db2->next_record();

                $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
                
                $tmp_nav[$db->f("idcat")] = array("idcat"   => $db->f("idcat"),
                                                  "name"    => $db->f("name"),
                                                  "target"  => $target);
        }

        $tmp_nav[$idcat]["sub"] = $navitems;
        $navitems = $tmp_nav;

        /* Function call */
        nav($parentid);

}  // end function

$sql = "SELECT
            A.idcat,
            C.name
        FROM
            ".$cfg["tab"]["cat_tree"]." AS A,
            ".$cfg["tab"]["cat"]." AS B,
            ".$cfg["tab"]["cat_lang"]." AS C
        WHERE
            A.idcat     = B.idcat   AND
            B.idcat     = C.idcat   AND
            B.idclient  = '$client' AND
            C.idlang    = '$lang'   AND
            C.visible   = '1'       AND
            B.parentid  = '$sel_idcat'
        ORDER BY
            A.idtree";

$db->query($sql);

while ( $db->next_record() ) {

        /* Check for external redirects... */
        $sql = "SELECT
                    a.external_redirect AS ext
                FROM
                    ".$cfg["tab"]["art_lang"]." AS a,
                    ".$cfg["tab"]["cat_art"]." AS b,
                    ".$cfg["tab"]["cat"]." AS c
                WHERE
                    b.idcat     = '".$db->f("idcat")."' AND
                    b.is_start  = '1' AND
                    c.idclient  = '".$client."' AND
                    c.idcat     = b.idcat AND
                    a.idart     = b.idart AND
                    a.idlang    = '".$lang."'";

        $db2->query($sql);
        $db2->next_record();

        $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';

        $navitems[$db->f("idcat")] = array("idcat"  => $db->f("idcat"),
                                           "name"   => $db->f("name"),
                                           "target" => $target);
}

/* Create Navigation Array */
nav($sel_idcat);

/* Start Output buffer */
ob_start();

echo '<ul class="navlist">';

foreach ($navitems as $key => $data) {
		echo '<li>';
    /* 1. Navigations Ebene */
    $tpl->reset();
    $tpl->set('d', 'NAME',  $data['name']);
    $tpl->set('d', 'TARGET', $data['target']);
    $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat']));
    $tpl->next();

    if ($idcat == $data['idcat'] || is_array($data['sub'])) {
        $tpl->generate('templates/navfirst_on.html');
    } else {
        $tpl->generate('templates/navfirst_off.html');
    }

    if (is_array($data['sub']) AND "CMS_VALUE[1]" <> 1) {
				$counter1=0;
        foreach ($data['sub'] as $key => $data) {
            $counter1=$counter1 + 1;
            //echo '<!-- Counter1='.$counter1.' -->';
            if ($counter1 == 1){
							echo '<ul>';
							}
            echo '<li>';
						/* 2. Navigations Ebene */
            $tpl->reset();
            $tpl->set('d', 'NAME',  $data['name']);
            $tpl->set('d', 'TARGET', $data['target']);
            $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat']));
            $tpl->next();

            if ($idcat == $data['idcat'] || is_array($data['sub'])) {
                $tpl->generate('templates/navsecond_on.html');
            } else {
                $tpl->generate('templates/navsecond_off.html');
            }

            if (is_array($data['sub'])) {
								$counter2=0;
                foreach ($data['sub'] as $key => $data) {
										$counter2=$counter2 + 1;
										//echo '<!-- Counter2='.$counter2.' -->';
										if ($counter2 == 1){
											echo '<ul>';
											}
										echo '<li>';
                    /* 3. Navigations Ebene */
                    $tpl->reset();
                    $tpl->set('d', 'NAME',  $data['name']);
                    $tpl->set('d', 'TARGET', $data['target']);
                    $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat']));
                    $tpl->next();

                    if ($idcat == $data['idcat']) {
                        $tpl->generate('templates/navthird_on.html');
                    } else {
                        $tpl->generate('templates/navthird_off.html');
                    }
										echo '</li>';
                } // end foreach
								if ($counter2 >> 0){
									echo '</ul>';
									}
            } // end if
						echo '</li>';
        } // end foreach
				if ($counter1 >> 0){
					echo '</ul>';
					}
		} // end if
		echo '</li>';

} // end foreach

echo '</ul>';

/* Read out buffer */
$html = ob_get_contents();

/* Clean buffer */
ob_end_clean();

/* Output buffer-contents */
echo $html;

?>
Vielleicht kann mir ja jemand weiterhelfen, was ich in dem Modul ändern muss, damit immer alle vorhandenen Menüpunkte ausgelesen werden. Ich habe hier im Forum nichts finden können.

Vielen Dank!

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Navigation mit allen Untermenüs immer geöffnet

Beitrag von Spider IT » Fr 19. Apr 2013, 08:08

Hallo steiniger,

schau dir mal das Modul "sitemap" an.

Gruß
René

steininger
Beiträge: 3
Registriert: Mo 13. Aug 2007, 13:35
Kontaktdaten:

Re: Navigation mit allen Untermenüs immer geöffnet

Beitrag von steininger » Fr 19. Apr 2013, 09:18

Danke für den Tipp!

Das Problem bei der Sitemap ist, dass es dort keine "aktiven" Zustände der Links gibt, denn man verlässt die Sitemap ja, wenn man etwas angeklickt hat ...

Und dieses Feature dort zu ergänzen übersteigt leider meinen Horizont.

Grüße
Steininger

Gesperrt