Dynamische Menü's mit PHP | Problem mit Submenü

Jon

Mitglied
Hallo Community ich bin neu hier.

Ich hoffe ihr könnt mir bei folgenden Problem helfen.
Ich habe nun meine Webseite nochmal umprogrammiert,
weil ich sie gerne dynamisch machen wollte also das Menü und die Seiten,
weil ich keine Lust hatte in (Tausend) Dateien rumzuschreiben.
Also habe ich mit PHP ein Sript geschrieben wo es mir das Menü erstellt.
Das Hauptmenü geht ja, aber ich habe 2 Menü's das andere soll sich bei jeder Seite ändern.
ICh habe Angefangen eine Strucktur aufzubauen, aber das Problem ist wie ich die Seiten zuordne.
Ich habe auch in anderen Programmiersprachen Probleme mit Listen und die Verarbeitung davon.

Hier ist die menu.php
PHP:
<?php
//Hier können neue Seiten ins Menü eingetragn werden, dazu müss man es folgenderweise eingetragen werden:
// key entspricht den key von "$current_page" also den namen von GET in der Adresszeile ->=> Menüname -> Adresse-> Datei -> Titel
//
//
//
  
$menu_data = array(
 "home"           => array("Home", "/index.php", "home.html", "Jonels Webseite",
                            "",
                            array("home", "neues", "impressum", "ueber_mich")),
 "bastelecke"     => array("Bastelecke", "/index.php?page=bastelecke", "page/bastelecke.php", "Jonels Webseite",
                            "",
                            array("chat")),
 "games"          => array("Games", "/index.php", "home.html", "Jonels Webseite",
                            "",
                            array()),
 "tutorials"      => array("Tutorials", "/index.php?page=tutorials", "page/tutorials.php", "Tutorials - Jonels Webseite",
                            "",
                            array("tutorials", "python")),
 "projekte"       => array("Projekte", "/index.php?page=projekte", "page/projekte.php", "Projekte - Jonels Webseite",
                            "",
                            array("projekte", "desktopersteller")),
 "bilder"         => array("Bilder/Galerie", "/index.php?page=galerie", "", "Galerie - Jonels Webseite",
                            "",
                            array()),
 "forum"          => array("Forum", "http://jtschoch.jt.funpic.de/forum", "http://jtschoch.jt.funpic.de/forum", "Jonels Webseite",
                            "",
                            array()),
 );

$submenu_data = array(
  "home"             => array("Home", "/index.php", "home.html", "Jonels Webseite",
                            ""),    
  "neues"            => array("Neues", "/index.php?page=neues", "page/neues.html", "Neues - Jonels Webseite",
                            ""),    
  "impressum"        => array("Home", "/index.php?page=impressum", "page", "Jonels Webseite",
                            ""),    
  "ueber_mich"       => array("Home", "/index.php", "home.html", "Jonels Webseite",
                            ""),    
  "tutorials"        => array("Home", "/index.php", "home.html", "Jonels Webseite",
                            ""),    
  "python"           => array("Home", "/index.php", "home.html", "Jonels Webseite",
                            ""),    
  "projekte"         => array("Home", "/index.php", "home.html", "Jonels Webseite",
                            ""),    
  "desktopersteller" => array("Home", "/index.php", "home.html", "Jonels Webseite",
                            ""), 
);
?>
<?php
$submenu = array();
$page = array();
$page["testseite"] = "testseite.txt";
$page["edit"] = "edit.php";
$page["login"] = "login.php";
$page["logout"] = "logout.php";
$page["register"] = "registrierung.php";
$navi = "<ul id=\"NavigationLeiste\">\n";
foreach ($menu_data as $key => $value) {
  $page[$key] = $value[2];
  if ($key === $current_page) {
    $title = $value[3];
    $tags = $value[4];
  }
  $navi .= " <li>";
    if($key === $current_page) {
        $navi .= "<span>\n";   
        }
        if($key !== $current_page) {
         $navi .= "<a href='".$value[1]."'>";  
        }
       $navi .= $value[0];
        if($key !== $current_page) {
         $navi .= "</a>";
        }
    if($key === $current_page) {
        $navi .= "</span>\n";     
    }
   $navi .= "</li>\n";
 }
$navi .= "</ul>";
foreach ($va as $key_submenu) {
    
    //$w = fopen("daten.txt", "a+");
    //fwrite($w, $key_submenu);
    //fclose($w);
    print $key_submenu;
    }   



$navi1 = "<ul id=\"Navigation\">\n";
 foreach ($submenu_data as $key1 => $value1) {
  $page[$key1] = $value1[2];
  if ($key1 === $current_page) {
    $title = $value1[3];
    $tags = $value1[4];
  }
  $navi1 .= " <li>";
    if($key1 === $current_page) {
        $navi1 .= "<span>\n";   
        }
        if($key1 !== $current_page) {
         $navi1 .= "<a href='".$value1[1]."'>";  
        }
       //$navi1 .= $value1[0];
        $navi1 .= $key_submenu;
        if($key1 !== $current_page) {
         $navi1 .= "</a>";
        }
    if($key1 === $current_page) {
        $navi1 .= "</span>\n";     
    }
   $navi1 .= "</li>\n";
 }
$navi1 .= "</ul>";
?>

Und die Index.php

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
	<head>
        <link rel="schema.DC" href="http://purl.org/dc/elements/1.1/">
        <link rel="schema.DCTERMS" href="http://purl.org/dc/terms/">
        <link rel="stylesheet" type="text/css" href="style.css" media="screen"/>
        <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Titan%20One">
        <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Cagliostro">
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <?php
            if(isset($_GET['page'])) {
                $current_page = $_GET['page'];
                }
            else {
                $current_page = "home";
                }
            include('menu.php');   
        ?>
        <title><?php echo $title; ?></title>
        <meta name="keywords" lang="de" content="<?php echo $tags; ?>">
	</head>
	<body>
        <div id="leiste_oben">
            <?php echo $navi ?>
        </div>
        <div class="div_navi">
            <?php echo $navi1 ?>
        </div>
	    <div id="header">
        </div>
        <div id="connect">
	        <?php
                $inhalt = 0;
                //@session_start();
                if(isset($_SESSION['UserID']) and ($_GET['page'] !== 'edit')) {
                    echo ('<a id="right" href="index.php?page=none&action=edit">Bearbeiten</a>');
                    echo ('<a id="right" href="index.php?page=none&action=new">Neue Seite</a>');
                }
                if(isset($_GET['action'])) {
                    if($_GET['action'] === "edit") {
                        echo "<p>Bitte eine Seite auswählen:</p>";
                        echo ("<table id=\"box\"\n>");
                        foreach ($page as $key => $value) {
                            echo("<tr id=\"sh\">\n");
                            echo("  <td><a id=\"list\" href=\"index.php?page=edit&editpage=$value\">$key</a></td>\n");
                            echo("</tr>\n");
                        }
                        echo ("</table>\n");
                        $inhalt=1;
                    }
                        
                    elseif($_GET['action'] === "new") {
                        if(isset($_SESSION['UserID'])) {
                            //if(isset($_POST["submit"])) {
                                if (isset($_POST["name"])) {
                                    $new = fopen($_POST["name"], "w+");
                                    fclose($new);
                                    echo("<p>Neue Seite wurde erstellt!</p>");
                                }
                                else {
                                    echo ("");
                                    //echo("Bitte einen Dateinamen angeben!");
                                }
                            //}
                        }
                        echo "<form name=\"Neu\" action=\"index.php?action=new\" method=\"post\" accept-charset=\"ISO-8859-1\">\n";
                        echo "<h3 align=\"center\">Neue Seite</h3>";
                        echo "Seitenname: <input type=\"text\" name=\"name\" maxlength=\"32\"></input><br/>\n";
                        echo "<input type=\"submit\" value=\"Absenden\" name=\"Absenden\"></input>\n";
                        echo "</form>\n";
                        $inhalt=1;
                    }
                    else {
                        $inhalt=1;
                        }
                    }
                
                if($inhalt ===0 ){
		            // Prüfen, ob die als $_GET['page'] übergebene Seite existiert
		            if(isset($_GET['page']) and isset($page[$_GET['page']])) {
                        $file = $page[$_GET['page']];
                        $pathinfo = pathinfo($file);
                        $extension = $pathinfo['extension'];  
                        $userdatei = fopen($page[$_GET['page']],"r");
                        while(!feof($userdatei))
                           {
                           $zeile = fgets($userdatei,1024);
                           if ($extension === "php") {
                               include($page[$_GET['page']]);
                               break;
                            } 
                            else {
                               include("bbcode.php");
                            }
                           }
                        fclose($userdatei);

			           // include $page[$_GET['page']];
			            }
		            // Ansonsten wird das Menu angezeigt
		            else {
                        $userdatei = fopen("home.html","r");
                        while(!feof($userdatei))
                           {
                           $zeile = fgets($userdatei,1024);
                               include("bbcode.php");
                           }
                        fclose($userdatei);

			            }
                    if (isset($_GET['view'])) {
                        include("page/kommentare.php");
                    }
                }
	        ?>
    </div>
    <div id="footer">
    </div>
    <div id="leiste_unten">
        <center><copyright><font size=\"5\" color=\"#004f4f\">&copy;</font><font size=\"3\" >Jonas</font></copyright></center>
    </div>
	</body>
</html>

Hier geht es zur Webseite das ihr es selber seht!
Ich hoffe ihr könnt mir Helfen:D
 
Hilft mir keiner? :(

Ich dachte ihr wären die Spezialisten die sich damit auskennen.
Aber mir Antworten nicht mal einer beim meinen ersten Beitrag.
 
Ich bin jetzt nicht unbedingt willig deinen Code komplett durch zu arbeiten, aber das Prinzip ist relativ einfach.

Deine Seiten rufst du per GET-Parameter "page" auf, wenn ich das richtig sehe.
Somit kannst du ein Submenu so aufbauen:

PHP:
<?php
echo '<ul>'; //Aufzählung starten

switch($_GET['page']) //page auslesen
{
   case home: //page=home
      echo '<li>Punkt1</li><li>Punkt2</li>';
      break;
   case bastellecke: //page=bastellecke
      echo '<li>Punkt4</li><li>Punkt1239</li>';
      break;
   default: //page=leer, nicht vorhanden
      echo '<li>Punkt1</li><li>Punkt2</li>';
      break;
}

echo '</ul>';
?>
Je nach Seite wird ein anderes Menu ausgegeben.

Die Sache mit den Arrays scheint mir zu kompliziert.

Gruß
 
  • Gefällt mir
Reaktionen: Jon
Danke dir!

Ich werde es Morgen mal versuchen.
Das System beim Hauptmenü werde ich lassen ich werde dieses System bei den Submenü versuchen anzuwenden.
 
Dafür ist es auch gedacht. Das Hauptmenu soll ja, soweit ich es verstanden habe, überall gleich bleiben. Dann kannst du es sogar statisch machen...
 
Ich habe es noch nicht ausprobiert, hatte noch keine Zeit und war gerade nach Hause gekommen.
Ich habe aber noch mal nachgedacht und habe ein Problem.
Ich bringe ja in den Arrays noch keywords, sitetitle ein und dies soll auch für die Seiten im Submenü gelten.
Wie soll ich das da machen?
 
Wie meinst du das?
Meinst du, dass du z.B. auf der Home-Seite den Titel: Websitename - Home
hast und auf der Bastellecken-Seite z.b.: Websitename - Bastellecke

Du könntest das z.B. so machen: Einstellungsdatei anlegen
PHP:
<?php
//Titel festlegen
$websitetitle['home'] = "Website - Home";
$websitetitle['bastellecke'] = "Website - Bastellecke";

//oder so
$websitetitle = array(
   "home" => "Website - Home",
   "bastellecke" => "Website - Bastellecke"
);

//aufrufen so
$page = $_GET['page'];
echo $websitetitle[$page];
?>

Das kannst du ja mit allen Sachen machen bzw. mit mehrdimensionalen Arrays wie du es bereits hast.
 
Also die Redunanz in deinem Array ist unötig.
Hier mal ein Beispiel wie man so ein Menü aufbauen kann.

PHP:
<?php
define ('DIRSEP', DIRECTORY_SEPARATOR);                     // Für Linux Kompatible Operatoren
define ('path',dirname(__FILE__).DIRSEP);                   // Aktuelles Verzeichnis

function filter ($request)                                  // kleine Automatische Filter Funktion
{
  foreach($request as $key => $value)
  {
    if (is_array($request[$key]))
    {
      filter($request[$key]);                               // Rekusiver Aufruf
    }else{
           $inhalt[$key] = mysql_escape_string (htmlentities($value));
         }
  }

  if (isset($inhalt))                                       // Wenn Werte vorhanden dann zurückgeben
  {
    return $inhalt;
  }else{ return null; }
}

$get_post = array_merge($_GET,$_POST);                      // $_POST und $_GET zusammenfasen od. $_REQUEST
$get_post = filter($get_post);                              // Alternative kann hier $_GET eingesetz werden
$basisTpl = path."game".DIRSEP."template";                  // Basis Verzeichniss des Template ermitteln

$navi = "";
if(isset($get_post['seite'])){$navi = $get_post['seite'];}

$page = array ( "login" => "login.php",                     // Navigation Menu
                "reg"   => "reg.php",
                "news"  => "news.php",
                "imp"   => "impressum.php",
                "stats" => "stats.php",
                "sig"   => "sig.php",
                "dg"    => "beschreibung.php",
                "letter"=> "newsletter.php",
                "map"   => "map.php",
                "rss"   => "rss.php",
                "irc"   => "irc.php",
                );

if (is_array($page) && array_key_exists($navi, $page) )     // Prüfen ob es den Link gibt
{
  $filename = path.'game'.DIRSEP.$page[$navi];

  if ( file_exists($filename) && is_readable($filename) )   // datei vorhanden?
  {
    $tpl = new Template($basisTpl.DIRSEP.'index.tpl');      // Eine neue Instanz der Template Klasse erzeugen
    include_once( $filename );                              // Inhalt einfügen
  }
}else{
       include_once(path.'game'.DIRSEP.'default.php');      // Standard Inhalt
     }


?>

Mfg Splasch
 
Danke für die Antwort,
aber wie du das meinst verstehe ich nicht ganz wo wird bei dir das Menü aufgebaut?
Ich muss erstmal kucken ob ich es jetzt hinbekommen wenn nicht Melde ich mich nochmal.

Edit:
Achso wie komme ich an die Werte in mein Array ran?


PHP:
$menu_data = array( 
 "home"           => array("Home", "/index.php", "home.html", "Jonels Webseite", 
                            "", 
                             <array("home", "neues", "impressum", "ueber_mich")), >

Da wo die <> stehen.
 
Zuletzt bearbeitet:
Würde mal sagen so:
PHP:
echo $menu_data['home'][5][0];
Das müsste "home" ausgeben. Hinten statt 0 eine 1 würde "neues" ausgeben.
 
Zurück