Filbasert motor i PHP
Vi skal implementere en nettsidemotor som vil tillate oss å lage en mal-fil, der ulikt innhold vil bli tilkoblet avhengig av URL-en.
La strukturen på siden vår se slik ut:
<!DOCTYPE html>
<html>
<head>
<title>tittel</title>
</head>
<body>
<header>
header
</header>
<main>
innhold
</main>
<header>
footer
</header>
</body>
</html>
La oss på det stedet der innholdet skal settes inn,
plassere en oppdiktet kommando for innsetting, for
eksempel slik: {{ content }}. La oss endre
mallen for nettsiden vår:
<!DOCTYPE html>
<html>
<head>
<title>tittel</title>
</head>
<body>
<header>
header
</header>
<main>
{{ content }}
</main>
<header>
footer
</header>
</body>
</html>
La oss nå lage en mappe view, der vi
skal plassere innholdsfilene. Enten direkte i
denne mappen eller i undermapper.
Den første filen vil være slik:
<div>
innhold 1
</div>
Den andre filen vil være slik:
<div>
innhold 2
</div>
Den tredje filen vil være slik:
<div>
innhold 3
</div>
La oss nå sørge for at den korresponderende
filen hentes fra view-mappen basert på URL-en
i adresselinjen. I vårt tilfelle vil den første filen
hentes for URL-en /page1,
den andre for URL-en /dir/page2,
og den tredje for URL-en /dir/sub/page3.
La oss starte implementeringen. Først, i filen
.htaccess, skal vi sørge for at alle forespurte
adresser, bortsett fra ressursfiler, 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 forespurte URL-en
inn i en variabel:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Deretter henter vi teksten fra mal-filen:
<?php
$layout = file_get_contents('layout.php');
?>
La oss nå hente den korresponderende innholdsfilen
fra view-mappen basert på URL-en:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
La oss erstatte kommandoen vi fant på i malteksten med innholdet hentet fra filen:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
La oss sende ut mal-filen med det innsatte innholdet til nettleseren:
<?php
echo $layout;
?>
La oss sette alt sammen 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 filbaserte motoren som beskrevet.