Motor pe fișiere în PHP
Vom implementa un motor de site care ne va permite să creăm un fișier șablon, căruia în funcție de URL i se va conecta conținut variat.
Să presupunem că structura paginii noastre arată în felul următor:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
content
</main>
<header>
footer
</header>
</body>
</html>
Să inserăm în locul în care ar trebui să se facă
inserarea conținutului o comandă inventată
de noi pentru inserare, de exemplu astfel:
{{ content }}. Să modificăm șablonul site-ului nostru:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
{{ content }}
</main>
<header>
footer
</header>
</body>
</html>
Să creem acum directorul view, în care
vom plasa fișierele de conținut. Direct în acest
director sau în subdirectoare.
Primul fișier va fi astfel:
<div>
content 1
</div>
Al doilea fișier va fi astfel:
<div>
content 2
</div>
Al treilea fișier va fi astfel:
<div>
content 3
</div>
Să facem acum astfel încât după URL
din bara de adrese să fie încărcat fișierul
corespunzător. În cazul nostru, la URL-ul /page1
va fi primul fișier, la URL-ul /dir/page2
- al doilea, și la URL-ul /dir/sub/page3
- al treilea.
Să începem implementarea. Pentru început, în fișierul
.htaccess vom face astfel încât toate adresele cerute,
cu excepția fișierelor de resurse, să fie redirecționate
către pagina index.php:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php
Pe pagina index.php vom obține într-o variabilă
URL-ul solicitat:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Apoi vom obține textul fișierului cu șablonul:
<?php
$layout = file_get_contents('layout.php');
?>
Acum după URL vom obține din directorul view
fișierul de conținut corespunzător:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
Vom înlocui în textul șablonului comanda noastră inventată cu conținutul obținut din fișier:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
Vom afișa în browser fișierul șablon cu șablonul substituit:
<?php
echo $layout;
?>
Vom aduna totul împreună și vom obține următorul cod:
<?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;
?>
Implementați motorul pe fișiere descris.