Seite 1 von 1

problem mit hauptnavi quellcode 2.ebene

Verfasst: Fr 4. Apr 2008, 08:45
von micha667
Folgendes Navi-Problem mit dem Standardmodul:
Ich mache für die 2. Ebene eines Menus immer ein neues <div> auf (siehe code). normalerweise lese ich aus der zeile:
if (is_array($data['sub'])) {
echo '<div id="menuSub">';

Code: Alles auswählen

/* 2. Navigation level */
	    if (is_array($data['sub'])) {
echo '<div id="menuSub">';
	        foreach ($data['sub'] as $key => $data) {
				if (checkCatPermission($data['idcatlang'],$data['public'])) {
		            $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/navsecond_on.html');
					}elseif(is_array($data['sub'])){
				        $tpl->generate('templates/navsecond_open.html');
		            } else {
		                $tpl->generate('templates/navsecond_off.html');
		            }

				    /* 3. Navigation level */
dass der code für das <div> nur geschrieben wird, wenn der entsprechende Menupunkt der 1. Ebene Untermenupunkte hat. Tatsächlich bekomme ich den Code für das <div> aber *immer* in den Quelltext geschrieben. Bei einem #menuSub mit etwas aufwändigerem CSS (Hintergrundbild, Abstände etc.) bekomme ich so immer unschöne Effekte unterhalb eines 1. Menupunktes ohne Submenupunkte. (bei einfachen <div>´s stört es im Quelltext nicht weiter)
Wie bekomme ich es hin, daß der Code nur geschrieben wird, wenn ein Menupunkt auch Untermenupunkte (also eine 2. Ebene) hat.

besten dank vorab
micha

Verfasst: Fr 4. Apr 2008, 10:39
von micha667
ok, bin selbst draufgekommen.
mein gedanklicher fehler war:

Code: Alles auswählen

if (is_array($data['sub'])) 
heißt nicht, dass `ne 2. ebene vorhanden ist, sondern die abarbeitung sich gerade darin befindet. nach einbau einer abfrage mit count() klappt es dann.

Code: Alles auswählen

/* 2. Navigation level */
	    if (is_array($data['sub'])) 
          {
            if (count($data['sub']) >0 ) { 
            // submenupunkte vorhanden
            echo '<div id="menuSub">'; 
            $submenu = 1;
            }
und unten bei bedarf das <div> wieder schließen...

Code: Alles auswählen

if ($submenu == 1) {echo '</div>';}
	    } // end if

    } // end if
} // end foreach

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

/* Clean buffer */
ob_end_clean();

/* Output buffer-contents */
echo $html;
?>
vielleicht kann es wer brauchen...