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:

layout.php<!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:

layout.php<!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:

view/page1.php<div>
  content 1
</div>

Die zweite Datei wird so aussehen:

view/dir/page2.php<div>
  content 2
</div>

Die dritte Datei wird so aussehen:

view/dir/sub/page3.php<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:

.htaccessRewriteEngine 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:

index.php<?php
  $url = $_SERVER['REQUEST_URI'];
?>

Dann holen wir den Text der Vorlagendatei:

index.php<?php
  $layout = file_get_contents('layout.php');
?>

Holen wir nun basierend auf der URL die entsprechende Inhaltsdatei aus dem Ordner view:

index.php<?php
  $content = file_get_contents('view' . $url . '.php');
?>

Ersetzen wir in der Vorlage unseren erdachten Befehl durch den aus der Datei erhaltenen Inhalt:

index.php<?php
  $layout = str_replace('{{ content }}', $content, $layout);
?>

Geben wir die Vorlagendatei mit dem eingefügten Inhalt im Browser aus:

index.php<?php
  echo $layout;
?>

Fügen wir alles zusammen und erhalten folgenden Code:

index.php<?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;
?>
Задание 1

Implementieren Sie die beschriebene dateibasierte Engine.