Failidel põhinev mootor PHP-s
Rakendame veebisaidi mootori, mis võimaldab meil luua mallifaili, millesse sõltuvalt URL-ist ühendatakse erinev sisu.
Oletame, et meie lehe struktuur näeb välja järgmine:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
content
</main>
<header>
footer
</header>
</body>
</html>
Paneme kohale, kus peaks toimuma sisu sisestamine,
mingi meie poolt väljamõeldud käsuga sisestamiseks,
näiteks sellise: {{ content }}. Muudame oma saidi malli:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
{{ content }}
</main>
<header>
footer
</header>
</body>
</html>
Loome nüüd kausta view, kuhu
paigaldame sisufailid. Otse sellesse
kausta või alamkaustadesse.
Esimene fail on selline:
<div>
content 1
</div>
Teine fail on selline:
<div>
content 2
</div>
Kolmas fail on selline:
<div>
content 3
</div>
Teeme nüüd nii, et vastav URL
aadressiribalt tõmbaks kaasa vastava
faili. Meie puhul URL-i /page1 puhul
esimene fail, URL-i /dir/page2 puhul
- teine, ja URL-i /dir/sub/page3 puhul
- kolmas.
Asume rakendamise kallale. Alustuseks failis
.htaccess teeme nii, et kõik taotletud
aadressid, välja arvatud ressursifailid, suunataks
lehele index.php:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php
Lehel index.php saame muutujasse
taotletud URL-i:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Seejärel saame malli failist teksti:
<?php
$layout = file_get_contents('layout.php');
?>
Nüüd saame URL-i põhjal kaustast view
vastava sisufaili:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
Asendame mallitekstis meie poolt väljamõeldud käsu failist saadud sisuga:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
Väljastame brauserisse mallifaili asendatud malliga:
<?php
echo $layout;
?>
Kogume kõik kokku ja saame järgmise koodi:
<?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;
?>
Rakendage kirjeldatud failidel põhinev mootor.