Файлов двигател в PHP
Ще реализираме двигател за сайт, който ще ни позволи да направим шаблонен файл, към който в зависимост от URL ще се включва различно съдържание.
Нека структурата на нашата страница изглежда по следния начин:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
content
</main>
<header>
footer
</header>
</body>
</html>
Нека на мястото, където трябва да се вмъква съдържанието,
вмъкнем някаква команда, която сме измислили
за вмъкване, например такава:
{{ content }}. Нека променим шаблона на нашия сайт:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
{{ content }}
</main>
<header>
footer
</header>
</body>
</html>
Нека сега направим папка view, в която
ще разполагаме файловете със съдържание. Директно в тази
папка или в подпапки.
Първият файл ще бъде такъв:
<div>
content 1
</div>
Вторият файл ще бъде такъв:
<div>
content 2
</div>
Третият файл ще бъде такъв:
<div>
content 3
</div>
Нека сега направим така, че чрез URL
от адресната лента да се извлича съответният
файл. В нашия случай при урл /page1
ще бъде първият файл, при урл /dir/page2
- вторият, и при урл /dir/sub/page3
- третият.
Да започнем реализацията. Първо, във файла
.htaccess ще направим така, че всички заявени
адреси, освен файловете с ресурси, да се пренасочват
към страницата index.php:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php
На страницата index.php ще получим в променлива
заявения URL:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
След това ще получим текста на файла с шаблона:
<?php
$layout = file_get_contents('layout.php');
?>
Сега чрез URL ще получим от папката view
съответния файл със съдържание:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
Нека заменим в текста на шаблона измислената от нас команда с полученото от файла съдържание:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
Ще изведем в браузъра файла на шаблона с поставеното съдържание:
<?php
echo $layout;
?>
Нека съберем всичко заедно и ще получим следния код:
<?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;
?>
Реализирайте описания файлов двигател.