Liebe Freunde,
ich habe mich nun recht lange mit dem "include" "readfile" und "require" herumgeschlagen aber ich bekomme als Ergebnis lediglich eine leere Seite. Dies kann eigentlich nur zwei Ursachen haben. 1) ich gebe den Pfad falsch an oder 2) ich habe die Aufteilung der Seitenarchitektur falsch gemacht. Ich möchte euch nun eine ausführliche und 1:1 getreue Situation meines offline-Ordners aufführen. Vielleicht fällt jemandem ja ein schwerwiegender Fehler auf.
1. Ordnerbaum
mywebsite
index.php
format.css
/architecture
adbox.html
articleopen.html
articleclose.html
bodyopen.html
bodyclose.html
buttontop.html
footer.html
head.html
header.html
mainnav.html
pagetop.html
sidebox.html
wrapperopen.html
/pages
page1.php
page2.php
about.php
/txt
article1.txt
article2.txt
/img
img1.jpg
img2.jpg
2. Index
Der Index dient mir als Vorlage. Er sieht meines Erachtens für den Anfang gut aus. Also habe ich seine einzelnen Elemente in die jeweiligen Dateien im Ordner "architecture" aufgeteilt. Der Index sieht so aus:
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>Home</title>
<link rel="stylesheet" href="format.css">
</head>
<body>
<a id="pagetop"></a>
<div class="wrapper">
<header class="main-head">
<img src="img/sit-twist.jpg"></img>
</header>
<nav class="main-nav">
<ul>
<li><a href="index.html">Home</a></li>
<li><a href="...">Topic1</a>
<ul>
<li><a href="...">Subtopic1</a>
<ul>
<li><a href="...">Subsubtopic1</a></li>
<li><a href="...">Subsubtopic2</a></li>
</ul>
</li>
<li><a href="...">Subtopic2</a></li>
</ul>
</li>
<li><a href="...">Topic2</a>
<ul>
<li><a href="...">Subtopic1</a></li>
<li><a href="...">Subtopic2</a></li>
<li><a href="...">Subtopic3</a></li>
</ul>
</li>
<li><a href="...">Topic3</a></li>
<li><a href="/pages/about.php">About</a></li>
</ul>
</nav>
<article class="content">
<h2>Home</h2>
<hr></hr>
<img src="img/img1.jpg" width="20%" align="left" hspace="20px" vspace="20px"</img>
<p><a href="#pagetop"><button id="buttontop" title="back to top">Back to top</button></a></p>
</article>
<div class="sidebox">
<img src="img/img2.jpg"></img>
<h3>About</h3>
<p>Read <a href="...">more...</a></p>
</div>
<div class="adbox">
<p></p>
</div>
<footer class="main-footer">
<p>Copyright 2020</p>
</footer>
</body>
</html>
3. Die Architekturdateien im "architecture"-Ordner
Die in Punk 2. aufgeführte Indexstruktur habe ich nach meinem Verständnis so aufgebrochen, dass wenn ich die einzelnen Elemente später durch reihenfolgenmäßiges Includen aneinanderreihe, wieder diese Aufbau zustande kommt. Ich habe die Dateien wie folgt mit Inhalt versehen:
head.html
<head>
<meta charset="utf-8">
<title>Home</title>
<link rel="stylesheet" href="format.css">
</head>
bodyopen.html
<body>
pagetop.html
<a id="pagetop"></a>
wrapperopen.html
<div class="wrapper">
header.html
<header class="main-head">
<img src="img/img1.jpg"></img>
</header>
mainnav.html
<nav class="main-nav">
<ul>
<li><a href="index.html">Home</a></li>
<li><a href="...">Topic1</a>
<ul>
<li><a href="...">Subtopic1</a>
<ul>
<li><a href="...">Subsubtopic1</a></li>
<li><a href="...">Subsubtopic2</a></li>
</ul>
</li>
<li><a href="...">Subtopic2</a></li>
<ul>
<li><a href="...">...</a></li>
</ul>
<li><a href="...">...</a></li>
</ul>
</li>
<li><a href="...">...</a>
<ul>
<li><a href="...">...</a></li>
<li><a href="...">...</a></li>
<li><a href="...">...</a></li>
</ul>
</li>
<li><a href="...">Image Gallery</a></li>
<li><a href="/html/about.php">About</a></li>
</ul>
</nav>
articleopen.html
<article class="content">
buttontop.html
<p><a href="#pagetop"><button id="buttontop" title="back to top">Back to top</button></a></p>
articleclose.html
</article>
sidebox.html
<div class="sidebox">
<img src="img/img2.jpg"></img>
<h3>About</h3>
<p>Read <a href="...">more...</a></p>
</div>
adbox.html
<div class="adbox">
<p></p>
</div>
footer.html
<footer class="main-footer">
<p>Copyright 2020</p>
</footer>
bodyclose.html
</body>
Wenn man nun alle Dateien in dieser Reihenfolge aneinanderheftet, erhält man die exakte Struktur der oben aufgeführten und funktionierenden index.php
4. Testseite und Include
Nun erstelle ich eine leere Seite im /pages Ordner welche ich "testinclude.php" nenne. Ich formatiere sie direkt zu Beginn als .php, denn ich plane mit PHP die Elemte aus dem Architekturordner zu importieren. Einige immer wiederkehrende Elemente wie das Doctype behalte ich bei, denn die sind unveränderbar. Lediglich die Elemente, welche ich später vielleicht modifizieren möchte, habe ich in die Architekturdatein ausgelagert. Die testinclude.php Seite sieht nun wie folgt aus:
<!doctype html>
<html lang="de">
<? php
readfile("./architecture/head.html");
readfile("./architecture/bodyopen.html");
readfile("./architecture/pagetop.html");
readfile("./architecture/wrapperopen.html");
readfile("./architecture/header.html");
readfile("./architecture/mainnav.html");
readfile("./architecture/articleopen.html");
readfile("./architecture/buttontop.html");
readfile("./architecture/articleclose.html");
readfile("./architecture/sidebox.html");
readfile("./architecture/adbox.html");
readfile("./architecture/footer.html");
readfile("./architecture/bodyclose.html");
?>
</html>
Wenn ich die Seite so speichere und versuche aufzurufen, so erhalte ich eine durchweg leere, weiße Seite.
Problemvermutung 1: Pfad
Da die Seite im /pages Ordner liegt, die zu importierenden Dateien in einem anderen Ordner auf derselben Ebene, benutze ich einen relativen Pfad. Also ./ um den Ordner in die höhere Ebene zu verlassen und /architecture um in den Architekturordner zu gelangen. Zum Schluss dann die jeweilige Datei.
Ergo: "./architecture/datei.html".
Ich las in Foren, dass man den Ordner mit zwei Punkten verlässt. Ist das richtig? Also "../architecture/datei.html"?
Problemvermutung 2: CSS
Die CSS Datei befindet sich wie die Index.php im Rootverzeichnis also an oberster Ebene. In der Index.php verweise ich auf Stylesheet "format.css" also ohne Pfadangabe. Das lässt die Datei vermuten, dass die CSS Datei im selben Verzeichnis ist. Das stimmt ja aber nur bei der index.php. Alle anderen Seiten befinden sich im /pages Ordner.
Lösungsvermutung: Ich kann mir vorstellen, dass ich eine Architekturdatei erstellen muss, welche explizit stylesheet als "./format.css" ansteuert, da man ja wieder erst mit ./ aus dem Ordner in die Rootebene heraustreten muss.
Problemvermutung 3: Aufteilung
Vielleicht ist die Aufbröselung der Architektur schlichtweg falsch und PHP kann mit diesen Schnipseln nichts anfangen.
Problemvermutung 4: Wrapper
Ich sehe, dass ich nur <div class="wrapper"> habe, welcher für mein CSS wichtig ist. Allerdings habe ich diesen div nie mit </div> beendet. Zwar funktioniert das in der gesamtheitlichen index.php aber vielleicht verursacht das ja beim Importieren diese Darstellungsprobleme.
Ich hoffe, dass ich mein Problem ausführlich genug beschrieben habe und hoffe sehr, dass erfahrenen Leuten sofort mein Patzer ins Auge springt.