Filbaseret motor i PHP
Vi implementerer en site-motor, som vil tillade os at oprette en skabelonfil, hvori forskelligt indhold vil blive inkluderet afhængigt af URL'en.
Lad strukturen af vores side se ud som følger:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
content
</main>
<header>
footer
</header>
</body>
</html>
Lad os på det sted, hvor indholdsindsættelsen skal foregå,
indsætte en selvopfundet kommando til indsættelse, for eksempel sådan en her:
{{ content }}. Lad os ændre vores sites skabelon:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
{{ content }}
</main>
<header>
footer
</header>
</body>
</html>
Lad os nu oprette mappen view, hvor
vi vil placere indholdsfilene. Enten direkte i denne
mappe eller i undermapper.
Den første fil vil være sådan:
<div>
content 1
</div>
Den anden fil vil være sådan:
<div>
content 2
</div>
Den tredje fil vil være sådan:
<div>
content 3
</div>
Lad os nu sørge for, at den relevante fil
bliver hentet baseret på URL'en fra adresselinjen.
I vores tilfælde vil fil /page1
være den første fil, URL'en /dir/page2
- den anden, og URL'en /dir/sub/page3
- den tredje.
Lad os gå i gang med implementeringen. Til at starte med, i filen
.htaccess, lad os sørge for, at alle anmodede
adresser, bortset fra ressourcefiler, omdirigeres
til siden index.php:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php
På siden index.php henter vi den anmodede URL ind i en variabel:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Derefter henter vi tekst fra skabelonfilen:
<?php
$layout = file_get_contents('layout.php');
?>
Nu henter vi den relevante indholdsfil fra mappen view
baseret på URL'en:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
Lad os erstatte vores selvopfundne kommando i skabelonens tekst med det hentede indhold fra filen:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
Lad os sende skabelonfilen med den indsatte indhold til browseren:
<?php
echo $layout;
?>
Lad os samle alt og få følgende kode:
<?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;
?>
Implementer den beskrevne filbaserede motor.