Silnik na plikach w PHP

Zaimplementujemy silnik strony, który pozwoli nam utworzyć plik szablonu, do którego w zależności od URL będzie dołączany różny kontent.

Niech struktura naszej strony wygląda następująco:

layout.php<!DOCTYPE html>
<html>
  <head>
    <title>title</title>
  </head>
  <body>
    <header>
      header
    </header>
    <main>
      content
    </main>
    <header>
      footer
    </header>
  </body>
</html>

W miejscu, w którym ma nastąpić wstawienie kontentu, wstawmy wymyśloną przez nas komendę do wstawiania, na przykład taką: {{ content }}. Zmieńmy szablon naszej strony:

layout.php<!DOCTYPE html>
<html>
  <head>
    <title>title</title>
  </head>
  <body>
    <header>
      header
    </header>
    <main>
      {{ content }}
    </main>
    <header>
      footer
    </header>
  </body>
</html>

Stwórzmy teraz folder view, do którego będziemy umieszczać pliki z kontentem. Bezpośrednio w tym folderze lub w podfolderach.

Pierwszy plik będzie taki:

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

Drugi plik będzie taki:

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

Trzeci plik będzie taki:

view/dir/sub/page3.php<div>
  content 3
</div>

Zróbmy teraz tak, aby na podstawie URL z paska adresu był pobierany odpowiedni plik. W naszym przypadku dla adresu /page1 będzie to pierwszy plik, dla /dir/page2 - drugi, a dla /dir/sub/page3 - trzeci.

Przystąpmy do implementacji. Na początek w pliku .htaccess zróbmy tak, aby wszystkie żądane adresy, oprócz plików zasobów, były przekierowywane na stronę index.php:

.htaccessRewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php

Na stronie index.php pobierzmy do zmiennej żądany URL:

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

Następnie pobierzmy tekst pliku z szablonem:

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

Teraz na podstawie URL pobierzmy z folderu view odpowiedni plik z kontentem:

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

Zamieńmy w tekście szablonu wymyśloną przez nas komendę na pobrany z pliku kontent:

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

Wyświetlmy w przeglądarce plik szablonu z podstawionym kontentem:

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

Zbierzmy wszystko razem i otrzymamy następujący kod:

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

Zaimplementuj opisany silnik na plikach.