Фајл-базирани систем у 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-а
из адресне траке добави одговарајући
фајл. У нашем случају, за URL /page1
то ће бити први фајл, за URL /dir/page2
- други, а за URL /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;
?>
Имплементирајте описани фајл-базирани систем.