Filbaserad motor i PHP
Vi implementerar en webbplatsmotor som gör det möjligt för oss att skapa en mallfil, till vilken olika innehåll kommer att inkluderas beroende på URL:en.
Låt strukturen på vår sida se ut på följande sätt:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
content
</main>
<header>
footer
</header>
</body>
</html>
Låt oss på den plats där innehållet ska sättas in
sätta in ett påhittat kommando för inmatning,
till exempel så här: {{ content }}. Vi ändrar mallen för vår webbplats:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
{{ content }}
</main>
<header>
footer
</header>
</body>
</html>
Låt oss nu skapa mappen view, där
vi kommer att placera innehållsfiler. Antingen direkt i denna
mapp eller i undermappar.
Den första filen kommer att se ut så här:
<div>
content 1
</div>
Den andra filen kommer att se ut så här:
<div>
content 2
</div>
Den tredje filen kommer att se ut så här:
<div>
content 3
</div>
Låt oss nu se till att den motsvarande filen
hämtas från mappen view baserat på URL:en
i adressfältet. I vårt fall kommer den första filen att användas för URL:en /page1,
den andra för URL:en /dir/page2,
och den tredje för URL:en /dir/sub/page3.
Låt oss börja implementera. Först, i filen
.htaccess, ska vi se till att alla begärda
adresser, förutom resursfiler, omdirigeras
till sidan index.php:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php
På sidan index.php hämtar vi den begärda URL:en till en variabel:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Sedan hämtar vi texten från mallfilen:
<?php
$layout = file_get_contents('layout.php');
?>
Nu hämtar vi den motsvarande innehållsfilen från mappen view
baserat på URL:en:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
Vi ersätter vårt påhittade kommando i malltexten med det hämtade innehållet från filen:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
Vi skickar mallfilen med det inlagda innehållet till webbläsaren:
<?php
echo $layout;
?>
Vi sätter ihop allt och får följande 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;
?>
Implementera den beskrivna filbaserade motorn.