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:
<!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:
<!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:
<div>
content 1
</div>
Druhý súbor bude takýto:
<div>
content 2
</div>
Tretí súbor bude takýto:
<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:
RewriteEngine 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:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Potom získame text súboru so šablónou:
<?php
$layout = file_get_contents('layout.php');
?>
Teraz podľa URL získame z priečinka view
príslušný súbor s obsahom:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
Nahradíme v texte šablóny vymyslený príkaz na získaný obsah zo súboru:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
Vypíšme do prehliadača súbor šablóny s dosadeným obsahom:
<?php
echo $layout;
?>
Zhromaždíme všetko dokopy a získame nasledujúci kód:
<?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;
?>
Realizujte popísaný súborový engine.