Failinis variklis PHP
Įgyvendinsime svetainės variklį, kuris leis mums sukurti šablono failą, į kurį, priklausomai nuo URL, bus prijungiamas skirtingas turinys.
Tegul mūsų puslapio struktūra atrodo taip:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
content
</main>
<header>
footer
</header>
</body>
</html>
Įterpkime į vietą, kur turi būti įstatytas turinys,
kokią nors mūsų sugalvotą komandą įterpimui, pavyzdžiui,
šią: {{ content }}. Pakeiskime mūsų svetainės šabloną:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
{{ content }}
</main>
<header>
footer
</header>
</body>
</html>
Dabar sukurkime aplanką view, į kurį
įdėsime turinio failus. Tiesiogiai šiame aplanke
arba poaplankiuose.
Pirmasis failas bus toks:
<div>
content 1
</div>
Antrasis failas bus toks:
<div>
content 2
</div>
Trečiasis failas bus toks:
<div>
content 3
</div>
Dabar padarykime taip, kad pagal URL
iš adreso eilutės būtų traukiamas atitinkamas
failas. Mūsų atveju pagal URL /page1
bus pirmasis failas, pagal URL /dir/page2
- antrasis, ir pagal URL /dir/sub/page3
- trečiasis.
Pradėkime įgyvendinimą. Pirmiausia faile
.htaccess padarykime taip, kad visi užklausti
adresai, išskyrus resursų failus, būtų nukreipiami
į puslapį index.php:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php
Puslapyje index.php gausime į kintamąjį
užklaustą URL:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Tada gausime šablono failo tekstą:
<?php
$layout = file_get_contents('layout.php');
?>
Dabar pagal URL gausime iš aplanko view
atitinkamą turinio failą:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
Pakeisime šablono tekste mūsų sugalvotą komandą į gautą iš failo turinį:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
Atvaizduokime naršyklėje šablono failą su pakeistu šablonu:
<?php
echo $layout;
?>
Sujunkime viską kartu ir gausime tokį kodą:
<?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;
?>
Įgyvendinkite aprašytą failinį variklį.