Fájlalapú motor PHP-ben
Megvalósítunk egy webmotor, amely lehetővé teszi számunkra, hogy készítsünk egy sablonfájlt, amelyhez az URL-től függően különböző tartalom csatlakozik.
Tegyük fel, hogy oldalunk szerkezete a következő képen néz ki:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
content
</main>
<header>
footer
</header>
</body>
</html>
Helyezzünk el arra a helyre, ahol a tartalom
beillesztésének kell történnie, egy általunk kitalált
parancsot a beillesztésre, például ezt:
{{ content }}. Módosítsuk webhelyünk sablonját:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
{{ content }}
</main>
<header>
footer
</header>
</body>
</html>
Most készítsünk egy view mappát, amelybe
elhelyezzük a tartalomfájlokat. Akár ebben a mappában,
akár almappákban.
Az első fájl a következő lesz:
<div>
content 1
</div>
A második fájl a következő lesz:
<div>
content 2
</div>
A harmadik fájl a következő lesz:
<div>
content 3
</div>
Most állítsuk be úgy, hogy a címsorból érkező URL
alapján a megfelelő fájl töltődjön be. Esetünkben a
/page1 URL-re az első fájl, a /dir/page2
URL-re a második, és a /dir/sub/page3 URL-re
a harmadik.
Kezdjük el a megvalósítást. Először a
.htaccess fájlban állítsuk be, hogy az összes
lekérdezett cím, az erőforrásfájlok kivételével, a
index.php oldalra irányuljon:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php
A index.php oldalon egy változóba fogadjuk
a lekérdezett URL-t:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Ezután megkapjuk a sablonfájl szövegét:
<?php
$layout = file_get_contents('layout.php');
?>
Most az URL alapján a view mappából
nyerjük ki a megfelelő tartalomfájlt:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
Cseréljük le a sablon szövegében az általunk kitalált parancsot a fájlból kapott tartalomra:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
Jelenítsük meg a böngészőben a sablonfájlt a beillesztett tartalommal:
<?php
echo $layout;
?>
Gyűjtsük össze az egészet, és a következő kódot kapjuk:
<?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;
?>
Valósítsa meg az ismertetett fájlalapú motort.