Bestandengestuurde engine in PHP
We implementeren een website-engine die ons in staat stelt een sjabloonbestand te maken, waaraan afhankelijk van de URL verschillende inhoud wordt toegevoegd.
Laat de structuur van onze pagina er als volgt uitzien:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
content
</main>
<header>
footer
</header>
</body>
</html>
Laten we op de plaats waar de inhoud moet worden
ingevoegd, een door ons bedachte opdracht voor invoeging plaatsen,
bijvoorbeeld deze:
{{ content }}. Laten we het sjabloon van onze website wijzigen:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
{{ content }}
</main>
<header>
footer
</header>
</body>
</html>
Laten we nu een map view maken, waarin
we de inhoudsbestanden plaatsen. Direct in deze
map of in submapen.
Het eerste bestand zal er als volgt uitzien:
<div>
content 1
</div>
Het tweede bestand zal er als volgt uitzien:
<div>
content 2
</div>
Het derde bestand zal er als volgt uitzien:
<div>
content 3
</div>
Laten we nu regelen dat via de URL
uit de adresbalk het corresponderende
bestand wordt opgehaald. In ons geval zal via de url /page1
het eerste bestand worden opgehaald, via url /dir/page2
- het tweede, en via url /dir/sub/page3
- het derde.
Laten we beginnen met de implementatie. Om te beginnen in het bestand
.htaccess zorgen we ervoor dat alle aangevraagde
adressen, behalve resourcebestanden, worden doorgestuurd
naar de pagina index.php:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php
Op de pagina index.php halen we de aangevraagde URL op in een variabele:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Vervolgens halen we de tekst van het sjabloonbestand op:
<?php
$layout = file_get_contents('layout.php');
?>
Nu halen we via de URL uit de map view
het corresponderende inhoudsbestand op:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
Vervangen we in de sjabloontekst onze bedachte opdracht door de opgehaalde inhoud:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
We geven het sjabloonbestand met de ingevoegde inhoud weer in de browser:
<?php
echo $layout;
?>
Laten we alles samenvoegen en we krijgen de volgende code:
<?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;
?>
Implementeer de beschreven bestandengestuurde engine.