Dateibasierte Engine in PHP
Wir implementieren eine Website-Engine, die es uns ermöglicht, eine Vorlagendatei zu erstellen, in die je nach URL verschiedener Inhalt eingebunden wird.
Nehmen wir an, die Struktur unserer Seite sieht folgendermaßen aus:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
content
</main>
<header>
footer
</header>
</body>
</html>
Lassen Sie uns an der Stelle, an der die Inhalte eingefügt werden sollen,
einen von uns erdachten Befehl zur Einfügung platzieren, zum Beispiel so:
{{ content }}. Ändern wir die Vorlage unserer Website:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
{{ content }}
</main>
<header>
footer
</header>
</body>
</html>
Erstellen wir nun einen Ordner view, in den
wir die Inhaltsdateien ablegen. Direkt in diesem
Ordner oder in Unterordnern.
Die erste Datei wird so aussehen:
<div>
content 1
</div>
Die zweite Datei wird so aussehen:
<div>
content 2
</div>
Die dritte Datei wird so aussehen:
<div>
content 3
</div>
Lassen Sie uns nun dafür sorgen, dass je nach URL
aus der Adresszeile die entsprechende Datei geladen wird.
In unserem Fall soll bei der URL /page1
die erste Datei geladen werden, bei der URL /dir/page2
- die zweite, und bei der URL /dir/sub/page3
- die dritte.
Beginnen wir mit der Implementierung. Zunächst sorgen wir in der Datei
.htaccess dafür, dass alle angefragten
Adressen, außer denen von Ressourcendateien, auf die Seite
index.php weitergeleitet werden:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php
Auf der Seite index.php holen wir uns die angefragte URL in eine Variable:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Dann holen wir den Text der Vorlagendatei:
<?php
$layout = file_get_contents('layout.php');
?>
Holen wir nun basierend auf der URL die entsprechende
Inhaltsdatei aus dem Ordner view:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
Ersetzen wir in der Vorlage unseren erdachten Befehl durch den aus der Datei erhaltenen Inhalt:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
Geben wir die Vorlagendatei mit dem eingefügten Inhalt im Browser aus:
<?php
echo $layout;
?>
Fügen wir alles zusammen und erhalten folgenden Code:
<?php
$url = $_SERVER['REQUEST_URI'];
$layout = file_get_contents('layout.php');
$content = file_get_contents('view' . $url . '.php');
$layout = str_replace('{{ content }}', $content, $layout);
echo $layout;
?>
Implementieren Sie die beschriebene dateibasierte Engine.