Variables Menü und include

travelsnake

Mitglied
Dynamisches Menü und include

Hallo,

das ist mein erster Beitrag und ich hoffe, dass ich alles richtig machen werde ;)

Ich habe vor ca. 3 Wochen mit PHP angefangen. Anfangs lief alles ganz gut, aber mittlerweile bereiten mir einige Sachen gewaltige Probleme. Ich weiß, dass mein Code noch nicht sonderlich gut ist, aber ich hoffe, dass es noch etwas wird ;)

Im Moment bin ich folgendes am Testen. Ein variables Menü indem die aktive Seite den Hovereffekt zugewiesen bekommt. Das funktioniert alles soweit ganz gut, aber dann fangen die Probleme auch schon an. Schaut euch doch einfach mal meinen Code an:

layout.php
PHP:
<?PHP
// Menü definieren
	$_MENUE = array(
		"Home" => "index.php",
		"Software" => "software.php",
		"Service" => "service.php",
		"Support" => "support.php",
		"Impressum" => "impressum.php",
		"Kontakt" => "kontakt.php",
	);

// Seitenlayout definieren
	echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
	echo "		<html xmlns=\"http://www.w3.org/1999/xhtml\">\n";
	echo "			<head>\n";
	echo "				<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" />\n";
	echo "				<title>".$_TITLE."</title>\n";
	echo "				<link href=\"css/layout.css\" rel=\"stylesheet\" type=\"text/css\" />\n";

	echo "			</head>\n\n";
// Start Body
	echo "			<body>\n";
	echo "				<ul id=\"menuebox\" class=\"menue\">";
	echo "					<li id=\"trenner\">&nbsp;</li>";
					foreach ($_MENUE as $_MENUEPUNKT => $_FILE) {
									if ($_FILE == strtolower(basename($_SERVER['PHP_SELF']))) {													// Aktives Menü
										echo "<li id=\"menuebox_active\">".$_MENUEPUNKT."</li><li id=\"trenner\">&nbsp;</li>";
									}																											// Aktives Menü Ende
									else {																										// Inaktives Menü
										echo "<li><a href=\"".$_FILE."\">".$_MENUEPUNKT."</a></li><li id=\"trenner\">&nbsp;</li>";		
									}																											// Inaktives Menü Ende
								};
	echo "				</ul>";
	echo "				<br />";
	echo "				<div id=\"content\">";
	echo					$_CONTENT;
	echo "				</div>";
	echo "			</body>\n";
	echo "		</html>";
?>

index.php
PHP:
<?PHP
// Seitentitel definieren
	$_TITLE = "Startseite";

// Content definieren
	$_CONTENT = "Ich bin die Startseite";

//Layout einbinden
	require ('layout.php');	
?>

Und jetzt kommen meine Fragen:
- Was muss ich machen, damit ich im Content der index.php PHP-Code darstellen kann?
Bspw. für ein weiteres Submenü

- Was muss ich machen, damit in der URL nur "index.php?id=Startseite" steht?
Ich habe mich bereits mit "switch" befasst und es auch erfolgreich hinbekommen, aber mein aktiver Menübutton sieht aus wie die inaktiven.

Falls die Frage nach Google kommen sollte, so kann ich euch sagen, dass ich die letzten Tage damit verbracht habe, aber entweder nichts gefunden habe bzw. mit der Hilfestellung nicht klar kam. Daher auch meine Bitte:

Schmeißt mir bitte keine Fachbegriffe an den Kopf, ich lerne noch und erklärt es mir. Danke :)

Euer travelsnake
 
Zuletzt bearbeitet:
Es gibt verschiedene Möglichkeiten deine Problem zu lösen. Dies ist jetzt eine Lösungs Idee, die Ich so nicht umsetzten würde, aber am Besten in dein Bereits gebauten Script passt.

Anstatt der Zeile:
Code:
echo $_CONTENT;
setzt du dort eine Funktion ein:
Code:
mycontent();
Diese Funktion musst du dann in der index.php dann definieren:
etwa so:
Code:
function mycontent()
{
echo "Hallo Welt";
echo "Ich bin PHP Code";
}


Dein zweites PRoblem hab ich leider nicht verstanden.

mfg
Gene
 
Genau das habe ich gesucht. Vielen Dank!

Wie würdest du die Seite aufbauen. Wenn, dann möchte ich es ja schon richtig machen. Da es eh nur zum testen meines erlernten ist, ist auch der komplette Umbau kein Problem.

Mit meiner 2. Frage wollte ich folgendes wissen. Wenn man jetzt die Website besuchen würde, dann würde die URL "http:www.domain.de/index.php" lauten. Geht man auf Service, dann lautet die URL "http://www.domain.de/service.php". Ich würde das gerne so steuern, dass dann in der URL "http://www.domain.de/index.php?id=Startseite" bzw. "http://www.domain.de/index.php?id=Service" steht. Ich habe das einmal mit "switch" probiert, aber da weiß ich nicht, wie ich dann den jeweiligen TITLE definiere und wie ich die aktive Seite hervorhebe. Ansonsten hat es funktioniert.

Aufgrund deiner Änderung hat sich jetzt leider schon wieder ein neues Problem ergeben, welches ich gerne verstehen würde.

Der neue Code der index.php:
PHP:
<?PHP
// Seitentitel definieren
	$_TITLE = "Startseite";

// Submenü definieren
	$_SUBMENUE = array(
		"Punkt 1" => "index.php",
		"Punkt 2" => "punkt_2.php",
		"Punkt 3" => "punkt_3.php",
	);
	
// Content definieren
	function content() {
		echo "	<ul id=\"submenuebox\" class=\"menue\">";
		echo "		<li id=\"trenner\">&nbsp;</li>";
						foreach ($_SUBMENUE as $_SUBMENUEPUNKT => $_SUBFILE) {
							if ($_SUBFILE == strtolower(basename($_SERVER['PHP_SELF']))) {												// Aktives Menü
								echo "<li id=\"submenuebox_active\">".$_SUBMENUEPUNKT."</li><li id=\"trenner\">&nbsp;</li>";
							}																											// Aktives Menü Ende
							else {																										// Inaktives Menü
								echo "<li><a href=\"".$_SUBFILE."\">".$_SUBMENUEPUNKT."</a></li><li id=\"trenner\">&nbsp;</li>";		
								}																										// Inaktives Menü Ende
						};
		echo "	</ul>";
};

//Layout einbinden
	require ('layout.php');	
?>

Hier erscheint folgende Fehlermeldung:
Warning: Invalid argument supplied for foreach() in ... on line 16

Line 16
PHP:
foreach ($_SUBMENUE as $_SUBMENUEPUNKT => $_SUBFILE) {
Kann man diese foreach-Schleife nur einmal im Dokument durchlaufen lassen? Das obere Menü ist ja schließlich auch darüber definiert.

LG
 
Dein 2. Problem ist eigentlich ganz leicht.

PHP:
  if ($_REQUEST['id'] == 'Service')
  {
    include ('service.php');
  }

Die Links müssten dann so aussehen:

HTML:
<a href="index.php?id=Service">Service</a>

Zu deinem anderen Fehler fällt mir im Moment nichts zu ein.

Mfg
 
Der Fehler kommt weil in deiner Funktion $_SUBMENUE nicht definiert ist.
Also entweder so:
PHP:
    function content() {
    global $_SUBMENUE;
oder so:
PHP:
    function content() {
    $_SUBMENUE = array(
        "Punkt 1" => "index.php",
        "Punkt 2" => "punkt_2.php",
        "Punkt 3" => "punkt_3.php",
    );

//edit: Mit error_reporting(E_ALL); kommt ein Notice: Undefined variable: _SUBMENUE... daran kann man das gut erkennen.
 
Zuletzt bearbeitet:
Dein 2. Problem ist eigentlich ganz leicht.

PHP:
  if ($_REQUEST['id'] == 'Service')
  {
    include ('service.php');
  }

Die Links müssten dann so aussehen:

HTML:
<a href="index.php?id=Service">Service</a>

Zu deinem anderen Fehler fällt mir im Moment nichts zu ein.

Mfg

und wie stelle ich das mit meinem dynamischen Menü an? Ich definiere im array ja den Buttonname "$_MENUEPUNKT" und den Dateinamen "$_FILE". Dann müsste doch im Array noch die id ausgelesen werden, oder verstehe ich das jetzt falsch?

Der Fehler kommt weil in deiner Funktion $_SUBMENUE nicht definiert ist.
Also entweder so:
PHP:
    function content() {
    global $_SUBMENUE;
oder so:
PHP:
    function content() {
    $_SUBMENUE = array(
        "Punkt 1" => "index.php",
        "Punkt 2" => "punkt_2.php",
        "Punkt 3" => "punkt_3.php",
    );

//edit: Mit error_reporting(E_ALL); kommt ein Notice: Undefined variable: _SUBMENUE... daran kann man das gut erkennen.
Ich dachte PHP sei es egal, ob ich das array innerhalb der Funktion eintrage oder nicht, aber wieder was dazu gelernt, danke. :)
 
Zurück