Souborový engine v PHP

Implementujeme engine webu, který nám umožní vytvořit soubor šablony, ke kterému bude v závislosti na URL připojen různý obsah.

Nechť struktura naší stránky vypadá následovně:

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

Pojďme na místo, kde má dojít k vložení obsahu, vložit nějaký námi vymyšlený příkaz pro vložení, například takovýto: {{ content }}. Upravme šablonu našeho webu:

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

Vytvořme nyní složku view, do které budeme umisťovat soubory s obsahem. Přímo do této složky nebo do podsložek.

První soubor bude takový:

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

Druhý soubor bude takový:

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

Třetí soubor bude takový:

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

Pojďme nyní zařídit, aby se podle URL z adresního řádku načetl příslušný soubor. V našem případě na URL /page1 bude první soubor, na URL /dir/page2 - druhý, a na URL /dir/sub/page3 - třetí.

Pusťme se do implementace. Nejprve v souboru .htaccess zaříďme, aby všechny požadované adresy, kromě souborů zdrojů, byly přesměrovány na stránku index.php:

.htaccessRewriteEngine On
RewriteBase /

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

Na stránce index.php získáme do proměnné požadované URL:

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

Poté získáme text souboru se šablonou:

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

Nyní podle URL získáme ze složky view příslušný soubor s obsahem:

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

Nahradíme v textu šablony námi vymyšlený příkaz na získaný obsah ze souboru:

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

Vypíšeme do prohlížeče soubor šablony s dosazeným obsahem:

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

Spojíme vše dohromady a získáme následující kód:

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

Implementujte popsaný souborový engine.