Heyho,
eine Frage zu meinem Website-Core:
<?php
session_start();
echo("<br />" . $_SESSION["page"]);
$titles = array('index' => 'Startseite',
'calendar' => 'Termine',
/*[...]*/
);
$urlParts = array();
preg_match('/\/([a-z]+)\.php(\?.*)?$/', $_SERVER["REQUEST_URI"], $urlParts);
if (isset($urlParts[1]) && isset($titles[$urlParts[1]])) {
$page = $urlParts[1];
} else {
$page = 'index';
$_SESSION["page"] = 'index';
}
echo("<br />" . $_SESSION["page"]);
echo '<?xml version="1.0" encoding="UTF-8" ?>';
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" id="top">
<head>
<title><?php echo $titles[$page]; ?> - Seitenbezeichnung</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="styles/main.css" type="text/css" />
</head>
<body>
<header>
<h1>Seitenweite Überschrift</h1>
</header>
<nav id="main_nav">
<a href="index.php">Home</a>
<a href="introduce.php">Vorstellen</a>
<a href="galleries.php">Galerien</a>
<a href="contact.php">Kontakt</a>
<a href="members.php">Mitglieder</a>
</nav>
<nav id="sub_nav">
<?php
$dir = "nav/"; //Das Verzeichnis mit den Subnav-Listen-Dateien der jew. Hauptseite
if (is_dir($dir)){
$pages = scandir($dir);
echo("<br />" . $_SESSION["page"]);
if (array_search($page . ".nav.php",$pages)){
include($dir . $page . '.nav.php');
$_SESSION["page"] = $page;
} else{
include($dir . $_SESSION["page"] . '.nav.php');
}
echo("<br />" . $_SESSION["page"]);
}
?>
</nav>
<section>
<?php include('pages/'. $_SESSION["page"] . '/' . $page . '.page.php');
echo("<br />" . $_SESSION["page"]); ?>
</section>
<footer>
Alles anzeigen
Zuallererst: Die Links werden via .htaccess alle über diese index.php geleitet. Die Seite mit dem Startinhalt heißt dann index.page.php, die entsprechende Subnav index.nav.php
Eigentlich sollte es ja so ablaufen: am Anfang guckt man, ob die (via URL) vorgegebene Seite auch existiert. Wenn ja, nimmt man die Seite, wenn nein, wird alles auf index gesetzt (Z.13-18 ).
Dann guckt man bei Subnav-Erstellung, ob die genommene Seite auch eine Subnavigation besitzt (also eine Hauptseite ist). Wenn ja, nimmt man diese und setzt die Session auf diese Hauptseite, wenn nein, nimmt man die Subnav der letzten Hauptseite (Z. 55-62).
Zuletzt nimmt man aus dem Unterordner der letzten Hauptseite die aktuell aufgerufene und baut sie ein (Z. 67).
So die Theorie.
In der Praxis klappt das aber nicht.
Es funktioniert so lange gut, bis man zweimal hintereinander eine Unterseite (ohne Subnav) aufrufen will. Man klickt also zB in der Hauptnav auf Vorstellen, dann auf (zB) Gruppe 1 und zuletzt Gruppe 2, die beiden Gruppen über die Subnav.
Alle Seiten existieren mit korrektem Namen in den richtigen Ordnern. Aber trotzdem wird anstatt der Seite von Gruppe 2 die Fehlermeldung ausgegeben:
Warning: include(pages/index/packs.page.php): failed to open stream: No such file or directory in D:\xampp\htdocs\sfd_3-0\index.php on line 86
Warning: include(): Failed opening 'pages/index/packs.page.php' for inclusion (include_path='.;D:\xampp\php\PEAR') in D:\xampp\htdocs\sfd_3-0\index.php on line 86
Deshalb sind auch die ganzen
über den Code verteilt, ich wollte das prüfen. Heraus kam, dass aus einem mir unerfindlichen Grund irgendwo diese Session zurückgesetzt wird. Mein Problem ist nur: Bei Gruppe 1 wird an allen fünf Stellen (Z. 3, 19, 53,61,68 ) noch introduce also der Name der Hauptseite ausgegeben. Auch beim letzten, NACH dem letzten ausgeführten PHP-Code (Z. 68 ). Aber bei Aufruf von Gruppe 2 erscheint direkt beim ersten Mal, also VOR dem ersten PHP-Code wieder ein index, als würde keine Seite erkannt werden. Sie steht aber sowohl im Array als auch in der URL
Ich hoffe, das war jetzt nicht zu verworren und mir kann jmd helfen!