Motore basato su file in PHP
Implementeremo un motore per il sito che ci permetterà di creare un file template a cui, in base all'URL, verrà collegato contenuto diverso.
Supponiamo che la struttura della nostra pagina sia la seguente:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
content
</main>
<header>
footer
</header>
</body>
</html>
Inseriamo nel punto in cui dovrebbe avvenire
l'inserimento del contenuto un comando da noi inventato
per l'inserimento, ad esempio così:
{{ content }}. Modifichiamo il template del nostro sito:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
{{ content }}
</main>
<header>
footer
</header>
</body>
</html>
Creiamo ora una cartella view, in cui
posizioneremo i file di contenuto. Direttamente in questa
cartella o in sottocartelle.
Il primo file sarà così:
<div>
content 1
</div>
Il secondo file sarà così:
<div>
content 2
</div>
Il terzo file sarà così:
<div>
content 3
</div>
Facciamo ora in modo che in base all'URL
della barra degli indirizzi venga caricato il file
corrispondente. Nel nostro caso, all'URL /page1
corrisponderà il primo file, all'URL /dir/page2
- il secondo, e all'URL /dir/sub/page3
- il terzo.
Iniziamo l'implementazione. Per prima cosa, nel file
.htaccess, facciamo in modo che tutti gli indirizzi richiesti,
eccetto i file di risorse, vengano reindirizzati
alla pagina index.php:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php
Nella pagina index.php, otteniamo in una variabile
l'URL richiesto:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Poi otteniamo il testo del file del template:
<?php
$layout = file_get_contents('layout.php');
?>
Ora, in base all'URL, otteniamo dalla cartella view
il file di contenuto corrispondente:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
Sostituiamo nel testo del template il comando da noi inventato con il contenuto ottenuto dal file:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
Stampiamo nel browser il file template con il contenuto sostituito:
<?php
echo $layout;
?>
Mettiamo tutto insieme e otteniamo il seguente codice:
<?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;
?>
Implementate il motore basato su file descritto.