Anpassung Navigation

gankli

Mitglied
Hallo, ich möchte folgenden Code erweitern, weiß aber nicht wie. Momentan ist die Navigation so ausgelegt, das ein Hauptmenüpunkt mit Untermenüpunkten exisiteren. Ich möchte nun die Navigation erweitern und unter die Untermenüs noch weitere Menüs hinzufügen. Und unter diesen eventuell noch weitere. Gleichzeitig müsste der Code im zweiten Teil des Scripts angepasst. Dieser ist nämlich für das Aussehen CSS zuständig und sorgt dafür das der aktuelle Menüpunkt auch kenntlich gemacht wird, wenn ich auf der Seite bin.

Hier das Script:

PHP:
<?
/*
die Variable $siteRoot muss angepasst werden, wenn die dateien in einem Unterverzeichnis abgelegt werden. Wenn das Unterverzeichnis z.B. "DIR" heißt, dann muss $siteRoot="/DIR/"; sein
*/

$siteRoot="/";
$menuStruct=array(
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Games"=>array
("root"
=>$siteRoot="/content/sites/games/"."games.php", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Datenbank Games"
=>$siteRoot="/content/sites/games/"."datenbank-games.php", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Datenbank Genre"
=>$siteRoot="/content/sites/games/"."datenbank-genre.php", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Datenbank Entwickler"
=>$siteRoot="/content/sites/games/"."datenbank-entwickler.php", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Datenbank Anbieter"
=>$siteRoot="/content/sites/games/"."datenbank-anbieter.php", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tipps und Cheats"
=>$siteRoot="/content/sites/games/"."tipps-cheats.php", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Downloads"
=>$siteRoot="/content/sites/games/"."downloads.php", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Links"
=>$siteRoot="/content/sites/games/"."links.php"),
);


if($PHP_SELF == $menuStruct[0]['root']){
  foreach($menuStruct as $key=>$value){
    if($PHP_SELF == $value['root']){
       echo "<div class=\"fstLevelActive\"><a href=".$value['root'].">$key</a></div>\n";
    }
    else{
       echo "<div class=\"fstLevel\"><a href=".$value['root'].">$key</a></div>\n";
    }
  }
} else {
  foreach($menuStruct as $key=>$value){
    if($PHP_SELF == $value['root']){
       echo "<div class=\"fstLevelActive\"><a href=".$value['root'].">$key</a></div>\n";
    }else{
       echo "<div class=\"fstLevel\"><a href=".$value['root'].">$key</a></div>\n";
    }
    foreach($value as $key2=>$value2){
      if(array_search($PHP_SELF,$value)){
        if($key2 != "root")
           if($PHP_SELF == $value2){
              echo "<div class=\"secLevelActive\"><a href=".$value2.">$key2</a></div>\n";
           }else{
              echo "<div class=\"secLevel\"><a href=".$value2.">$key2</a></div>\n";
           }
      }
    }
  }
}
?>

Danke und Gruß
 
Probier mal Folgendes:
PHP:
<?php

	// line-break string (carriage return, line feed)
	define('CRLF', chr(0x0D).chr(0x0A));

	function createHierarchicalMenu($array, $activeItemHref=null)
	{
		if( !is_array($array) || (!is_null($activeItemHref) && empty($activeItemHref)) ) {
			return false;
		}
		$output = '<ul>' . CRLF;
		foreach( $array as $key => $value ) {
			if( is_array($value) ) {
				$output .= sprintf(
						'<li%s>%s%s</li>',
							current($value) == $activeItemHref
								? ' class="active"'
								: '',
							is_int(key($value))
								? '<a href="'.htmlspecialchars(current($value)).'">'.htmlspecialchars($key).'</a>'
								: htmlspecialchars($key),
							createHierarchicalMenu(array_slice($value, 1), $activeItemHref)
					) . CRLF;
			}
			if( is_string($value) ) {
				$output .= sprintf(
					'<li%s><a href="%s">%s</a></li>',
						$value == $activeItemHref
							? ' class="active"'
							: '',
						htmlspecialchars($value),
						htmlspecialchars($key)
					) . CRLF;
			}
		}
		$output .= '</ul>';
		return $output;
	}


	$_menu = array(
		'Games' => array(
			'/content/sites/games/games.php',
			'Datenbank Games'      => '/content/sites/games/datenbank-games.php',
			'Datenbank Genre'      => '/content/sites/games/datenbank-genre.php',
			'Datenbank Entwickler' => '/content/sites/games/datenbank-entwickler.php',
			'Datenbank Anbieter'   => '/content/sites/games/datenbank-anbieter.php',
			'Tipps und Cheats'     => '/content/sites/games/tipps-cheats.php',
			'Downloads'            => '/content/sites/games/downloads.php',
			'Links'                => '/content/sites/games/links.php'
		)
	);

	echo preg_replace('/^<ul>/s', '<ul class="nav">', createHierarchicalMenu($_menu, $_SERVER['REQUEST_URI']));

?>
Formatieren kannst du es anschließend mit CSS.
 
Gumbo hat gesagt.:
Probier mal Folgendes:
PHP:
<?php

	$_menu = array(
		'Games' => array(
			'/content/sites/games/games.php',
			'Datenbank Games'      => '/content/sites/games/datenbank-games.php',
			'Datenbank Genre'      => '/content/sites/games/datenbank-genre.php',
			'Datenbank Entwickler' => '/content/sites/games/datenbank-entwickler.php',
			'Datenbank Anbieter'   => '/content/sites/games/datenbank-anbieter.php',
			'Tipps und Cheats'     => '/content/sites/games/tipps-cheats.php',
			'Downloads'            => '/content/sites/games/downloads.php',
			'Links'                => '/content/sites/games/links.php'
		)
	);

	function createHierarchicalMenu($array)
	{
		if( !is_array($array) ) {
			return false;
		}
		$output = '<ul>';
		foreach( $array as $key => $value ) {
			if( is_array($value) && is_int(key(current($value)) ) {
				$output .= '<li><a href="'.current($value).'">'.$key.'</a>';
				$output .= array_slice($value, 1);
				$output .= '</li>';
			}
			if( is_string($value) && is_string($value) ) {
				$output .= '<li><a href="'.$value.'">'.$key.'</a></li>';
			}
		}
		$output .= '</ul>';
		return $output;
	}

	echo createHierarchicalMenu($_menu);

?>
Ich hoffe, dass es funktioniert, ist bisher noch ungetestet (entspringt direkt meinem Gehirn).

Formatieren kannst du es anschließend mit CSS.
Hi, funktioniert leider nicht. Bekomme folgende Fehlermeldung: Parse error: syntax error, unexpected '{' in /www/htdocs/v116776/content/scripts/navigation.php on line 23

Und von der Struktur her hat sich ja auch nichts geändert. Wie kann ich denn jetzt noch unter z.B. 'Datenbank Games' => '/content/sites/games/datenbank-games.php' noch weitere Untermenüpunkte hinzufügen.

Gruß
 
Ich hab meinen vorherigen Code-Vorschlag etwas geändert. Vielleicht funktioniert ja der.

Falls nicht, hoffe ich, dass du dich bis heute Abend gedulden kannst, denn erst dann habe ich Zeit mich näher mit diesem Thema zu beschäftigen.
 
Hi, jetzt wird die Navigation angzeigt. Allerdings erhalte ich dennoch folgende Fehlermeldung: Warning: key(): Passed variable is not an array or object in /www/htdocs/v116776/content/scripts/navigation.php on line 12

Die aktive Seite wird aber nicht in der Navigation kenntlich gemacht, z.B. Fett. Und wie bekomme ich unter die Untermenüs noch weitere Menüs hinzu.

Ich kann bis heute Abend warten. Danke und Gruß
 
Zurück