Failu dzinis PHP
Implementēsim vietnes dzinēju, kas ļaus mums izveidot veidnes failu, kuram atkarībā no URL tiks pievienots dažāds saturs.
Pieņemsim, ka mūsu lapas struktūra izskatās šādi:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
content
</main>
<header>
footer
</header>
</body>
</html>
Ievietosim tajā vietā, kur jānotiek satura
ievietošanai, kādu mūsu izdomātu
komandu ievietošanai, piemēram, šādu:
{{ content }}. Mainīsim mūsu vietnes veidni:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
{{ content }}
</main>
<header>
footer
</header>
</body>
</html>
Izveidosim mapi view, kurā
izvietosim satura failus. Tieši šajā
mapē vai apakšmapēs.
Pirmais fails būs šāds:
<div>
content 1
</div>
Otrais fails būs šāds:
<div>
content 2
</div>
Trešais fails būs šāds:
<div>
content 3
</div>
Tagad panāksim, lai pēc URL
no adreses joslas tiktu ielādēts atbilstošais
fails. Mūsu gadījumā pēc URL /page1
būs pirmais fails, pēc URL /dir/page2
- otrais, un pēc URL /dir/sub/page3
- trešais.
Sāksim implementāciju. Vispirms failā
.htaccess panāksim, lai visi pieprasītie
adresi, izņemot resursu failus, tiek novirzīti
uz lapu index.php:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php
Lapā index.php iegūsim mainīgajā
pieprasīto URL:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Pēc tam iegūsim veidnes faila tekstu:
<?php
$layout = file_get_contents('layout.php');
?>
Tagad pēc URL iegūsim no mapes view
atbilstošo satura failu:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
Aizvietosim veidnes tekstā mūsu izdomāto komandu ar iegūto no faila saturu:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
Izvadīsim pārlūkprogrammā veidnes failu ar ievietoto saturu:
<?php
echo $layout;
?>
Apvienosim visu kopā un iegūsim šādu kodu:
<?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;
?>
Implementējiet aprakstīto failu dzinēju.