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:
<!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:
<!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:
<div>
content 1
</div>
Drugi plik będzie taki:
<div>
content 2
</div>
Trzeci plik będzie taki:
<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:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php
Na stronie index.php pobierzmy do zmiennej
żądany URL:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Następnie pobierzmy tekst pliku z szablonem:
<?php
$layout = file_get_contents('layout.php');
?>
Teraz na podstawie URL pobierzmy z folderu view
odpowiedni plik z kontentem:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
Zamieńmy w tekście szablonu wymyśloną przez nas komendę na pobrany z pliku kontent:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
Wyświetlmy w przeglądarce plik szablonu z podstawionym kontentem:
<?php
echo $layout;
?>
Zbierzmy wszystko razem i otrzymamy następujący kod:
<?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;
?>
Zaimplementuj opisany silnik na plikach.