Súborový engine v PHP

Realizujeme engine stránky, ktorý nám umožní vytvoriť súbor šablóny, ku ktorému sa v závislosti od URL bude pripájať rôzny obsah.

Nech štruktúra našej stránky vyzerá nasledovne:

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

Na miesto, kde má dochádzať k vloženiu obsahu, vložme nejaký príkaz na vloženie, ktorý sme vymysleli, napríklad takýto: {{ content }}. Zmeňme šablónu našej stránky:

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

Vytvorme teraz priečinok view, do ktorého umiestnime súbory s obsahom. Priamo v tomto priečinku alebo v podpriečinkoch.

Prvý súbor bude takýto:

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

Druhý súbor bude takýto:

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

Tretí súbor bude takýto:

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

Urobme teraz to, aby sa podľa URL z adresného riadku načítal príslušný súbor. V našom prípade pri URL /page1 to bude prvý súbor, pri URL /dir/page2 - druhý, a pri URL /dir/sub/page3 - tretí.

Poďme k realizácii. Najprv v súbore .htaccess urobme to, aby všetky požadované adresy, okrem súborov zdrojov, boli presmerované na stránku index.php:

.htaccessRewriteEngine On
RewriteBase /

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

Na stránke index.php získame do premennej požadovanú URL:

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

Potom získame text súboru so šablónou:

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

Teraz podľa URL získame z priečinka view príslušný súbor s obsahom:

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

Nahradíme v texte šablóny vymyslený príkaz na získaný obsah zo súboru:

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

Vypíšme do prehliadača súbor šablóny s dosadeným obsahom:

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

Zhromaždíme všetko dokopy a získame nasledujúci 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

Realizujte popísaný súborový engine.