Реализуем движок сайта, который позволит нам сделать файл шаблона, к которому в зависимости от 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;
?>
Реализуйте описанный движок на файлах.